Avatar billede sjogren Novice
28. februar 2002 - 23:11 Der er 13 kommentarer og
2 løsninger

Beregning af korrelationskoefficenter i VBA

Hvordan beregnes korrelationskoefficenter i VBA?

I Excel kan man kalde funktionen via macroen (ATPVBAEN.XLA) under Funktioner... Dataanalyse... Korrelation, men jeg kan ikke hitte ud af at skrive en kode der foretager beregningen automatisk! - er der en "HAJ" der kan hjælpe?

Jeg har prøvet med:

Application.Run "ATPVBAEN.XLA!MKorrel, ActiveSheet, osv. men det virke øjensynligt ikke
Avatar billede janvogt Praktikant
01. marts 2002 - 04:08 #1
Korrelationskoefficienten kan beregnes direkte med regnearksformlen =KORRELATION(A2:A4;B2:B4), hvor A2:A4 og B2:B4 indeholder dine 2 datasæt.

Hvis du vil have det samme foretaget i VBA kunne din makro se sådan ud:


Sub BeregningAfKorrelation()
   
    Set Omr1 = Worksheets("Ark1").Range("A2:A4")
    Set Omr2 = Worksheets("Ark1").Range("B2:B4")
   
    Korrelation = Application.WorksheetFunction.Correl(Omr1, Omr2)
    Range("E8").Value = Korrelation
   
End Sub

Makroen vil så indsætte korrelationskoefficienten i celle E8.
Avatar billede bak Seniormester
01. marts 2002 - 08:36 #2
For at din formel skal virke (hvis du har optaget den med makrooptageren) skal du også have vinget det tilføjelelsesprogram (add-inn) af der hedder Analysis Toolpak - VBA.
Så virker din makro.
Avatar billede sjogren Novice
01. marts 2002 - 09:42 #3
Hi guys tak for promt action, men jeg har den ekstra udfordring, at antallet af områder kan variere (Omr1, Omr2....Omrx) og "data-dybden" ligeledes kan variere (A2:A?,B2:B? - "?" vil naturligvis være samme værdi for de resp. Omr). Det var derfor jeg forsøgte at anvende den indbyggede funktion, da det her opereres med et samlet input-range. Jeg havde håbet på at det kunne løses ved at kombinere funktionen med et variabelt dump.Currentregion.Select!  ?
Avatar billede janvogt Praktikant
01. marts 2002 - 09:46 #4
Så behøver du ikke VBA for at løse problemet!
Du kan godt definere og navngive dynamiske områder i Excel v.h.a. OFFSET-formlen. På dansk hedder den vist FORSKYDNING.
Avatar billede janvogt Praktikant
01. marts 2002 - 09:51 #5
Hov, nu skriver du godt nok at antallet af områder også kan variere.
Beregning af korrelationskoefficienter bygger kun på 2 datasæt, og det er Excels funktioner også kun beregnet til.
Avatar billede sjogren Novice
01. marts 2002 - 09:51 #6
Jeg forsøger at bruge VBA for at gøre processen automatisk, så brugerene ikke skal "fumle rundt", men det kan da godt være at det ikke kan lade sig gøre?
Avatar billede janvogt Praktikant
01. marts 2002 - 09:54 #7
Jojo, det kan sagtens lade sig gøre at bruge VBA, men brugeren skal jo alligevel altid lægge datasættene ind, så jeg jeg kan ikke rigtig se, hvad du vil opnå ved at bruge VBA frem for Excels udmærkede KORRELATION's-funktion.
Avatar billede sjogren Novice
01. marts 2002 - 09:55 #8
Re: Hov, nu skriver.....

Excels funktion (Dataanalyse) kan via ATPVBAEN.XLA beregne og opstille en matrix med korrelationskoefficienter for X antal datasæt!
Avatar billede sjogren Novice
01. marts 2002 - 10:00 #9
Brugeren har via en UserForm angivet alle de relevante informationer, som anvendes til en række andre formål. Matricen er blot et del element!
Avatar billede janvogt Praktikant
01. marts 2002 - 10:00 #10
Ja, men Dataanalyse beregner også kun korrelationskoefficienter for 2 datasæt ad gangen.
Avatar billede sjogren Novice
01. marts 2002 - 10:06 #11
Ja naturligvis - korr.koeff. er jo i sin natur todimentionel, fordelen er bare at funktionen beregner og opstiller de indbyrdes KK'er for alle datasættene

      a      b      c      d
a    1
b    0,1    1
c    0,9    0,2      1
d  -0,9    -0,2    -0,3    1
Avatar billede janvogt Praktikant
01. marts 2002 - 10:20 #12
Om det overhovedet kan lade sig gøre pr. automatik at lægge data ind i dialogboksen "Dataanalyse" uden at vise dialogboksen, skal jeg ikke kunne sige, men det ligger ihvertfald uden for min formåen.

Men du kunne lave det sådan, at brugeren skal vælge hvilke 2 kolonner/datasæt han/hun ønsker analyseret, hvorefter Excel selv tjekker "dybden" og afleverer k.f.
Avatar billede bak Seniormester
01. marts 2002 - 10:25 #13
Prøv lige denne makro og se om den opfylder dine krav:
Du skal lige ændre Sheet1 til dit aktuelle ark.

Sub Macro2()
  ActiveWorkbook.Names.Add Name:="test2", RefersToR1C1:= _
        "=Sheet1!R1C1:OFFSET(Sheet1!R1C1,COUNTA(Sheet1!C1)-1,COUNTA(Sheet1!R1)-1)"

    Application.Run "ATPVBAEN.XLA!Mcorrel", ActiveSheet.Range("test2"), "" _
        , "C", True
    ActiveWorkbook.Names("test2").Delete
End Sub
Avatar billede bak Seniormester
01. marts 2002 - 10:42 #14
Eller lidt kortere, men stadig dynamisk.
Sub Macro4()
Range("A1").Select
Application.Run "ATPVBAEN.XLA!Mcorrel", Selection.CurrentRegion, "" _
        , "C", True
End Sub
Avatar billede janvogt Praktikant
01. marts 2002 - 11:08 #15
Genialt bak! Så lærte jeg også det :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester