Excel VBA: Werte in jeweils vorgegebene Zelle schreiben
Die VBA-Programmierung ist für mich Neuland und ich bitte um Untersützung bei einer Sache:
Ich möchte Werte eines Arbeitsvorgangs, die in einem Excelsheet "WO-Vorgangsliste" sich befinden, in ein anderes Sheet "WO-Ablaufplan" in die jeweils vorgegebene Zelle schreiben. In der "WO-Vorgangsliste" sind mehrere Vorgänge als Datensätze gelistet. Jeder Vorgang bzw. jeder Datensatz beinhaltet in Spalte 9 als Wert die Zellenposition, wo er hinkopiert werden soll.
Konkret: -für ersten Vorgang: Wert in Zeile 5 Spalte 7 (5,7) soll gemäß (5,9) in "WO-Ablaufplan" in Zelle (Z41S9)
-für zweiten Vorgang: Wert in Zeile 6 Spalte 7 (6,7) soll soll gemäß (6,9) in "WO-Ablaufplan" in Zelle (Z76S17)
-für dritten Vorgang: Wert in Zeile 7 Spalte 7 (7,7) soll soll gemäß (7,9) in "WO-Ablaufplan" in Zelle (Z36S12)
-allgemein: Schleife für: Wert von Zeile i Spalte 7 gemäß hinterlegter Zellenposition aus Zeile i Spalte 9 der"WO-Vorgangsliste" in entsprechende Zelle von "WO-Ablaufplan" (gemäß hinterlegtem Wert aus Zeile i Spalte 9) kopieren.
Ich hoffe, das ist soweit verständlich und freue mich auf eure Unterstützung!
3 Antworten
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
Der Text des Makros schein wohl zu klein zu sein. Darum hier nochmal das Makro:
'Wert in x9 kommagetrennt
Dim Transp(10), Ort(10)
Sub AblPl_VorgL()
'Einlesen
Worksheets("WO-Vorgangsliste").Select
For i = 5 To 7
Transp(i) = Cells(i, 7)
Ort(i) = Cells(i, 9)
Next i
'Ausgeben
Worksheets("WO-Ablaufplan").Select
For i = 5 To 7
Cells(Int(Ort(i)), ((Ort(i) - Int(Ort(i))) * 10)) = Transp(i)
Next i
End Sub
Gruß aus Berlin
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
Ja, Lösungen gibt's immer ...
For i = 5 To 7
Zeile = Int(Ort(i))
Spalte = Right(Ort(i), 2)
If Left(Spalte, 1) = "," Then Spalte = Right(Ort(i), 1)
Spalte = Spalte * 1
Cells(Zeile, Spalte) = Transp(i)
Next i
Geholfen ?
Gruß aus Britz
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Geholfen! Genial.
Eine kleine Frage nur noch: Die mit Werten gefüllten Zellen möchte ich farbig hervorheben.
Wie / Wo kann ich folgenden Befehl einbauen: With Selection.Interior .ColorIndex = 44 .Pattern = xlSolid
Geht vllt noch innerhalb der Schleife?
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
Jaaa ...
Cells(Zeile, Spalte).Select
With Selection.Interior
.ColorIndex = 44
.Pattern = xlSolid
End With
Dieses einfügen zwischen
Cells(Zeile, Spalte) = Transp(i) und Next i
Gruß aus Britz
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
'Wert in x9 kommagetrennt
Dim Transp(10), Ort(10)
Sub AblPl_VorgL()
'Einlesen
Worksheets("WO-Vorgangsliste").Select
For i = 5 To 7
Transp(i) = Cells(i, 7)
Ort(i) = Cells(i, 9)
Next i
'Ausgeben
Worksheets("WO-Ablaufplan").Select
For i = 5 To 7
Cells(Int(Ort(i)), ((Ort(i) - Int(Ort(i))) * 10)) = Transp(i)
' farbig
Cells(Int(Ort(i)), ((Ort(i) - Int(Ort(i))) * 10)).Select
With Selection.Interior
.ColorIndex = 44
.Pattern = xlSolid
End With
Next i
End Sub
Diese Variante mit mit dem Zähler i läuft leider nicht. Was muss ich ergänzen?
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
ich habe eine separate schleife zusätzlich erstellt für die farbige markierung, was auch klappt. Mich interessiert weiterhin, wie das mit zwei befehlen innerhalb einer for-schleife funktioniert.
Gruß aus Berlin-Mitte
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
Innerhalb einer FOR-NEXT-Schleife werden alle Befehle (ob einer oder zweihundert) abgearbeitet.
Zwei (oder mehr) Befehle in einer Zeile werden durch Doppelpunkt getrennt: FOR i = 1 to 5: A*I : NEXT i
Gruß aus Britz
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
...
Worksheets("WO-Ablaufplan").Select
For i = 5 To 7
'ausgeben
Cells(Int(Ort(i)), ((Ort(i) - Int(Ort(i))) * 10)) = Transp(i)
' farbig
Cells(Int(Ort(i)), ((Ort(i) - Int(Ort(i))) * 10)).Select
With Selection.Interior
.ColorIndex = 44
.Pattern = xlSolid
End With
Next i
...
Diese 2 Befehle innerhalb einer Schleife über Mehrzeilen werden nicht ausgeführt. Was muss ich ergänzen?
Gruß!
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
'Wert in x9 kommagetrennt
Dim Transp(10), Ort(10)
Sub AblPl_VorgL()
'Einlesen
Worksheets("WO-Vorgangsliste").Select
For i = 5 To 7
Transp(i) = Cells(i, 7)
Ort(i) = Cells(i, 9)
Next i
'Ausgeben
Worksheets("WO-Ablaufplan").Select
For i = 5 To 7
Zeile = Int(Ort(i))
Spalte = Right(Ort(i), 2)
If Left(Spalte, 1) = "," Then Spalte = Right(Ort(i), 1)
Spalte = Spalte * 1
Cells(Zeile, Spalte) = Transp(i)
Cells(Zeile, Spalte).Select
With Selection.Interior
.ColorIndex = 44
.Pattern = xlSolid
End With
Next i
End Sub
Hier nochmal das gesamte Makro. Dass es immer vom Anfang laufen muss (DIM und Einlesen) ist Dir bekannt ?
Bei mir funktionieren beide Versionen (Deine als letzte eingestellte und meine aktuelle).
Also kopier noch mals dieses Makro und teste es.
Gruß aus Britz
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Funktioniert! Vielen Dank, Britzcontrol!
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Warum schwach typisiert (bez. gar nicht) und Option Explicit Off? Das ist nicht schön...
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
Was genau steht in Zelle x.9 ?
Steht dort "Z41S9" bzw. "Z76S17" .... oder
"41_9" oder "41 9" oder, oder ?
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
zur Zeit steht dort "Z41S9". Ich kann auch den Inhalt auf "41 9" bzw. "41,9" (für cells) bzw. "41I" (für range) ändern, falls das via VBA zur Lösung führt...=)
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
vom prinzip her ist es eine variable Zellenansteuerung bzw -auswahl...nur ist die Frage, wie der VBA-Code dazu aussieht
![](https://images.gutefrage.net/media/user/Britzcontrol/1444747379_nmmslarge.jpg?v=1444747379000)
Hier ein Lösungsvorschlag, wenn ...
die Zieladresse als Dezimalzahl vorliegt (Zeile =1, Spalte = 9 wäre : 1,9)
Natürlich müssten die Laufvariablen (jeweils i) angepasst werden.
Ebenso in der Dim-Anweisung die Anzahl der zu transportierenden Werte (im Beispiel 10).
Ist Dir damit geholfen ?
Gruß aus Berlin
![WertTransport - (Microsoft Excel, VBA, Schleifen)](https://images.gutefrage.net/media/fragen-antworten/bilder/109440668/0_big.jpg?v=1386831129000)
Excellent! Genau das habe ich gesucht.
Die Idee mit ((Ort(i) - Int(Ort(i))) * 10)) ist top, nur eine Bemerkung: Die Spaltenzahl kann auch 2-stellig sein, sodass nach der Subtraktion z.B. 0,43 steht, das *10 ergibt 4,3 statt 43 (für Spalte 43).
Gibt es eine Lösung dafür? 1 Möglichkeit: 1-stellige Spalten mit 0 vorsetzen und *100?
Ebenfalls Gruß aus Berlin!