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
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
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
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?
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
'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?
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
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
...
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ß!
'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
Funktioniert! Vielen Dank, Britzcontrol!
Warum schwach typisiert (bez. gar nicht) und Option Explicit Off? Das ist nicht schön...
Was genau steht in Zelle x.9 ?
Steht dort "Z41S9" bzw. "Z76S17" .... oder
"41_9" oder "41 9" oder, oder ?
vom prinzip her ist es eine variable Zellenansteuerung bzw -auswahl...nur ist die Frage, wie der VBA-Code dazu aussieht
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...=)
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

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!