Excel VBA: Schleife und speichern Sie die Ausgabe für jeden Wert in Reihe?
Ich versuche, erstellen Sie eine Schleife in excel, aber ich bin stecken.
Den Zweck meiner Schleife ist
- Gehen durch einen Bereich von Werten, e.g A1:A8760 und fügen Sie Sie in Zelle e.g B10
- Für jeden Bereich der Werte, die ich speichern möchten, die Ausgabe und kopiere Sie in eine neue Spalte e.g C.
Habe ich versucht, ein makro aufzunehmen und eine Schleife erstellen. Aber es ging einfach falsch,
gg = 1
Dim myRange As Range
Dim i As Long, j As Long
Set myRange = Range("AJ4:AJ8763")
For i = 1 To myRange.Rows.Count
For j = 1 To myRange.Columns.Count
myRange.Cells(i, j).Select
Selection.Copy
Range("D10").Select
ActiveSheet.Paste
Range("O7").Select
Application.CutCopyMode = False
Selection.Copy
myRange.Cells(i, j + gg).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next j
Next i
End Sub
Dem code-Beispiel oben ist das, was ich habe, so weit. So ist die Idee, ich gehe über einen Wertebereich von AJ4 zu AJ8763 und legen Sie Sie in die Zelle D10,
Im nächsten Schritt kopieren Sie die Ausgabe von der Zelle O7 und legen Sie es auf Zelle AK4 zu AK8763.
Hinzugefügt korrigierte version
Lieber Armon, ich habe gerade mein code-Beispiel in der orignal post.
Was ist die Formel, die recomputes die neuen Werte in Spalte O? Dies könnte besser sein, erfolgt vollständig im Speicher.
"AK4 zu AJ8763" - ich nehme an, hier meinst du AK4 zu AK8763?
ist die richtige. Oder besser, wenn Sie verlassen die Schleife und dann einfach rechts der Formel in einem Rutsch konvertieren die Formel als Werte.
InformationsquelleAutor SKkumar | 2015-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie ich es verstehe, gibt es eine Formel in O10, einen oder mehrere Präzedenzfälle, die gehören D10. Dies bedeutet, dass, wenn ein neuer Wert geht in D10 ein neues Ergebnis in O10 und Sie möchten, speichern Sie das Ergebnis in eine neue Spalte.
Der Schnellste Weg, dies zu tun, ist zu sammeln alle Werte in AJ4:AJ8763 in ein variant-array. Schleife durch das array vom Typ variant in VBA und berechnen Sie den Wert mit math und funktioniert genauso wie die Formel in O10.
Wenn es fertig ist, ziehen Sie einfach die neuen Werte in das array vom Typ variant zurück in AK4:AK8763.
Ich habe eine sehr einfache Berechnung als Platzhalter, wo die eigentliche Arbeit passieren sollte. Läuft dein code auf diese Weise blendend schnell im Vergleich zu einer Schleife durch jede Zelle, kopieren es an eine neue Position dann nahm das Ergebnis einer Formel und einfügen in eine neue Spalte.
NPV($D$9;I82:AG82)+H82.
.Auf der ersten Etappe der Schleife der Wert von AJ4, kopiert wird in D10 und das neu berechnete Ergebnis in O7, kopiert wird in AK4 (das ist aus deiner ursprünglichen Frage). Tut mir Leid aber ich habe keine Ahnung, wo $D$9, I82:AG82 oder H82 kommen. Ich vermute, dass 'Anderes Blatt'!$D$9 ist, wo die NPV-Funktion's Preis - parameter kommt, aber ich sehe nicht, wie diese Veränderungen O7, wenn Sie einen neuen Wert in D10.
Ich weiß, es ist ein bisschen mehr kompliziert, dass nur. D10 bezieht sich auf die Menge der Stunden, die ein Energie-system in Betrieb ist - die änderung der cash-flow für jedes Jahr. Dies bedeutet, der NPV-Ergebnisse ändert sich abhängig von der geänderten cash-flows, die abhängig von D10. Ich hoffe, das war ein bisschen besser geklärt. $D9$ konstant bleibt, wie du sagst, aber I82:AG82 (Cash flow) Veränderungen mit AK4:AK8763
InformationsquelleAutor
Sorry - jetzt editiert, ich habe es auf meinem Rechner
sollte
ich denke, dies sollte es tun, habe ich nicht wirklich überprüft, wenn es auf einem logischen Pegel, nur sicherstellen, dass es kompiliert.
Sie haben 2 Linien wie die.
wenn ich mich nicht Irre - ich bin noch neu dabei, anderen zu helfen, den string in
problematisch ist -, müssen Sie die Variablen mit "& " in den code wie folgt:
hoffe, das hilft.
Hallo Jungs, ich habe es geschafft, es funktioniert durch die Verwendung von "myRange.Zellen(i,j).Wählen Sie" in statt. Thx für Eure schnellen Antworten! Und ich hatte natürlich hinzufügen myRange.Cells(i+1,j+1).Wählen Sie für die Ausgabe.
ja, ich habe es bemerkt, während Sie zu kommentieren 🙂 danke
InformationsquelleAutor Avishay Cohen
Sie machen die Sache unnötig kompliziert mit
myRange
, versuchen Sie dies:InformationsquelleAutor Uri Goren