2016-03-31 23 views
1

Ich schreibe gerade einen Code, der goalseek automatisiert, aber ich stieß auf Syntaxprobleme.Excel VBA: Iterieren über mehrere Bereiche

I deklarierten Variablen 3:

Dim X as Range 
Dim Y as Range 
Dim Z as Range 

Set X as Range(....) 
Set Y as Range(....) 
Set Z as Range(....) 

For each cell in X,Y,Z 
X.GoalSeek Goal:=Y, ChangingCell:=Z 
Next cell in X,Y,Z 

Dies ist Pseudo-Code aber ich will es nacheinander in jeder der Zellen in Bereich X, Y, Z iterieren.

Dies sind Spaltenbereiche.

Frage: Wie kann ich jede Zelle in Bereich X, Y, Z iterieren, um in die goalseek-Funktion zu setzen? Wenn also jeder der Bereiche 5 Zellen hätte, würde er 5 mal laufen.

+0

Es ist wahrscheinlich eine Frage (jemand) versteckt in sich. Können Sie mir helfen, es zu finden, damit wir es beantworten können: http://stackoverflow.com/tour – Ralph

+0

Sorry, behoben – AltoidsBenefitsH

Antwort

1
  1. For ... Each erlaubt keine Komma Argumente nach in getrennt, so dass Sie „ein“ Bereich, um es präsentieren muss ...

  2. wenn Sie For Each cell ... sagen wollen, dann müssen Sie Bereiche in Zellen zersetzen mit

    ihre .Cells Eigenschaft
  3. innerhalb der For ... Each Sie sollten dann mit der Schleifenvariable (cell) statt X, Y, arbeiten Z

Beispiel

Sub Test() 
Dim X As Range, Y As Range, Z As Range 
Dim C As Range 

    Set X = [A1] 
    Set Y = [B1:B2] 
    Set Z = [C1:C3] 

    For Each C In Union(X.Cells, Y.Cells, Z.Cells) 
     MsgBox C.AddressLocal 
    Next C 
End Sub 

Alternative Syntax für die Union(...) würde

For Each C In Union(X, Y, Z).Cells 

sein, was es wahrscheinlich macht noch deutlicher, dass Sie zusammen 3 Bereiche sind tieing und dann jeder ihrer Zellen adressieren ... Geschmackssache vielleicht

EDIT unter der Annahme, Sie TRIPLES Ihrer (gleicher Größe) bilden wollen reicht und sie in einer einzigen Funktion zuzuführen, berechnen Offsets für Bereiche Y und Z auf X

Beispiel

Sub Test() 
Dim X As Range, Y As Range, Z As Range 
Dim C As Range 
Dim OYR As Long, OYC As Long, OZR As Long, OZC As Long 

    Set X = [A1:A5] 
    Set Y = [B3]  'no need to provide full range, starting point will do 
    Set Z = [C5] 

    ' calculating offsets 
    OYR = Y(1, 1).Row - X(1, 1).Row + 1 
    OYC = Y(1, 1).Column - X(1, 1).Column + 1 

    OZR = Z(1, 1).Row - X(1, 1).Row + 1 
    OZC = Z(1, 1).Column - X(1, 1).Column + 1 

    ' iterate thru all cells of X and their equally ofsett partners in Y and Z 
    For Each C In X.Cells 
     MsgBox C.AddressLocal & " " & C(OYR, OYC).AddressLocal & " " & C(OZR, OZC).AddressLocal 
    Next C 

End Sub 
+0

Also sagen wir, ich will X + Y = Z mit X = [A1: A5] Y = [B1: B5] Z = [C1: C5] Der Union-Operator erlaubt mir, einen Union-Bereich [A1: C1] so zu erstellen? Wie gebe ich die Position jeder Zelle in diesem Bereich ein, damit sie in der goalseek-Formel verwendet werden kann? – AltoidsBenefitsH

+0

Ihre Frage war, durch alle Zellen von 3 verschiedenen Bereichen zu iterieren ... innerhalb der Schleife "erscheint" jede Zelle aller 3 Bereiche als C ... also wenn Sie für jede dieser Zellen eine Funktion 'GoalSeek' aufrufen wollen Ersetzen Sie 'MsgBox ...' durch 'GoalSeek C' – MikeD

+0

AAHH ... war Ihre Frage, TRIPLES (A, B, C) für gleich große Bereiche zu bilden und diese TRIPLES an eine Funktion zu liefern? – MikeD

Verwandte Themen