2017-07-13 16 views
0

Ich versuche, den maximalen Wert einer Schleife zu finden. Erstens, ich habe zwei zufällige Arrays und ich möchte diese beiden Arrays Korrelationskoeffizienten finden. Dann möchte ich es mehrfach so viel wie "I3" Zelle berechnen. Danach möchte ich einen Code schreiben, der den maximalen Korrelationskoeffizienten aus dieser Berechnung ermittelt. Ich habe den Code unten geschrieben, aber es hat nicht funktioniert.Den maximalen Wert einer Schleife mit VBA finden

Sub Macro1() 

Dim i As Long 
For i = 1 To Range("I3") 
    Calculate 
Next 

DMax = Application.WorksheetFunction.Max("A2") 
Range("I4").Value = DMax 

End Sub 

Jede Hilfe wird geschätzt.

+0

Was ist 'Bereich (" I3 ")', beziehen Sie sich auf Wert in dieser Zelle oder ...? Und was möchten Sie erreichen, indem Sie Max auf einer einzelnen Zelle aufrufen? Maximal ein Wert gibt diesen Wert zurück ... –

+0

Bereich ("I3") bezieht sich auf den Wert in dieser Zelle. Ich möchte den Koeffizienten so viel wie diesen Wert berechnen. Und ich möchte Max dieser Werte mit einem Code finden. – OykuA

Antwort

1

Ihre Max-Funktion benötigt ein passendes Argument. Nur "A2" eingeben funktioniert nicht in VBA. Versuchen:

DMax = Application.WorksheetFunction.Max(Range("A2")) 

Dies gibt Ihnen die max-Wert des Array A2. Beachten Sie jedoch, dass der Maximalwert eines Bereichs, der aus einer einzelnen Zelle besteht, immer der Zellenwert ist.


Wenn Sie den Maximalwert aller Iterationen berechnen möchten, sollten Sie die max-Funktion in jeder Iteration verwenden (innen for-Schleife) und speichern Sie es Wert ist. In jeder folgenden Iteration sollten Sie dann den Maximalwert überschreiben, wenn Ihr neuer Maximalwert größer als der alte ist. Einfach so:

Sub Macro1() 

Dim i As Long 
DMax = 0 
For i = 1 To Range("I3") 
    Calculate 
    DMax2 = Application.WorksheetFunction.Max(Range(...)) 
    If DMax2 > DMax Then DMax = DMax2 
Next i 

Range("I4").Value = DMax 

Dies wird Ihnen den Maximalwert des Bereichs (...) aller Iterationen geben.

+0

Ja und das ist mein Problem. Hast du eine Idee, wie ich das beheben kann? – OykuA

+0

Bearbeitete meine Antwort. – Andi

+0

Danke, aber ich habe nicht verstanden, was ich anstelle von "Range (.....)" schreiben sollte. – OykuA

0

Ich verstehe kaum Ihren Code, aber die Lösung wird Naste-Schleife sein. Angenommen, Sie haben zwei Sätze von Zahlen: A2 (Cells(2, 1)) durch I2 (Cells(2, 7)) und A3 (Cells(3, 1)) durch I3 (Cells(3, 7)). Sie wollen eine partielle Korrelation berechnen und herausfinden, was der Maximalwert davon ist.

For i = 1 To 7 
    For j = 1 To i 
     'Calculate the correlation 
    Next j 
    'here you have partial coefficient and you can compare it, 
    'if it is greater than previous one then save it and store 
Next i 
0
For i = 1 To Range("I3").value 'to calculate from 1 to the value in that cell 

was würde ich für Ihre Frage empfehlen.

For i = 1 To 10 ' loop 10 times 
    For j = 1 To i ' here it will allow you to check your stuff multiple times before moving on to the next value 
    arr1(i) = arr2(j) ' see if your array match 
    Next j 

Next i 
Verwandte Themen