2017-10-10 6 views
0

Ich versuche ein Makro zu erstellen, das zwischen zwei Punkten interpoliert.Schleifen mit variierendem Bereich (Makros)

Dies ist, was ich bisher:

Sub Withoutloop() 

    If Range("E2") >= Range("A2") And Range("E2") <= Range("A3") Then 

Range("E3").FormulaR1C1 = "=(R[-1]C[0])/((R[0]C[-4]-R[-1]C[-4])/(R[0]C[-3]-R[-1]C[-3]))" 

ElseIf Range("E2") >= Range("A3") And Range("E2") <= Range("A4") Then 

Range("E3").FormulaR1C1 = "=(R[-1]C[0])/((R[1]C[-4]-R[0]C[-4])/(R[1]C[-3]-R[0]C[-3]))" 

ElseIf Range("E2") > Range("A4") Then 

Range("E3") = "Fail" 

End If 

End Sub 

Wie Sie sehen können, der erste, wenn ein Teil zu sehen ist, wenn E2 zwischen A2 und A3 ist, aber wenn E2 ist nicht zwischen A2 und A3 es dann bewegt sich auf um zu sehen, ob E2 zwischen A3 und A4 etc ist, möchte ich einen Code, der diesen Prozess automatisch annimmt.

Zweitens, in dem Abschnitt, wenn ich die beiden Zellen gefunden habe E2 ist zwischen in dann berechnet den x-Wert für mich.

Range("E3").FormulaR1C1 = "=(R[-1]C[0])/((R[0]C[-4]-R[-1]C[-4])/(R[0]C[-3]-R[-1]C[-3]))" 

in jeder Schleife würde ich die Zellen wie ein nach unten zu bewegen .. hier gezeigt:

Range("E3").FormulaR1C1 = "=(R[-1]C[0])/((R1C[-4]-R[0]C[-4])/(R1C[-3]-R[0]C[-3]))" 

Gibt es eine Möglichkeit, dies in einer Schleife enthält.

Excel

Vielen Dank!

+0

Je nachdem, wie Sie eine Schleife möchten, können Sie unterschiedliche Ergebnisse haben. Sieht so aus, als ob du A2, E2, A3 und E3 verwendest Wie soll deine Schleife funktionieren? eine andere Zeile (Schritt 2), über Spalten? – Cyril

+0

Für jede Zelle in rng // tun, bis IsFalse (cell.value) nächste Zelle // in [dieser] IsFalse gleichsetzen (https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/isfalse-operator) operator gegen "E2" ?? Dann machst du einfach das Notwendige außerhalb des Tuns bis ... –

Antwort

0

Sie könnten mit einer case select-Anweisung beginnen. Sie müssen Ihre Formel liefern. Wenn die Zellen und Bereiche dynamisch sein sollen, können Sie die Zellenzeilenreferenz durch eine Variable ersetzen. Wie ich als in Für I = 2 bis letzte Zeile Range ("E" & I) oder Bereich ("A" & i)

Select Case Range("E2").Value 
Case Is >= Range("A2").Value 
    If Range("E2").Value < Range("A3").Value Then 
    Range("E3").FormulaR1C1 = "your formula" 
    End If 
Case Is >= Range("A3").Value 
    If Range("E2").Value < Range("A4").Value Then 
    Range("E3").FormulaR1C1 = "your formula" 
    End If 
Case Is >= Range("A4").Value 
    If Range("E2").Value < Range("A5").Value Then 
    Range("E3").FormulaR1C1 = "your formula" 
    End If 
Case Is >= Range("A5").Value 
    If Range("E2").Value < Range("A6").Value Then 
    Range("E3").FormulaR1C1 = "your formula" 
    End If 

Else 
    Range("E3").Value = "Fail" 
End Select 
0

A schnellen Gang durch Schleifen eines for-Schleife (nicht For Each) könnte helfen ... Meine Empfehlung ist, sich an die Verwendung von Cells() zu gewöhnen, was es sehr einfach macht, den Überblick zu behalten.

Zeigt die Basisschleife, die in Zeilen abläuft (vorausgesetzt, Sie haben in jeder anderen Zeile (3, 5, 7, usw.) ausgegeben) für: If Range ("E2")> = Range ("A2") And Range („E2“) < = Range („A3“) Dann

Dim i as Long 
For i = 2 to 10 Step 2 
    If Cells(i,"E").Value >= Cells(i, "A").Value AND Cells(i, "E").Value <= Cells(i+1, "A") Then 
     Cells(i+1, "E").Formula = "insert formula" 
    End If 
Next i 

Wenn diese entlang von Spalten gehen, würden Sie ändern, wenn Ihr Variable ist (und in diesem Fall würde wahrscheinlich wollen Zahlen verwenden, zB A = 1, E = 5 (zeigt wie Zellen auf (1, 5) = Cells (1, "E") = Range ("E1")

Verwandte Themen