Excel VBA: Werte in jeweils vorgegebene Zelle schreiben

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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

Woher ich das weiß:Hobby – Jahrelanges programmieren.
DonnieYen 
Fragesteller
 12.12.2013, 13:38

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!

0
Britzcontrol  12.12.2013, 14:41
@DonnieYen

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

1
DonnieYen 
Fragesteller
 12.12.2013, 16:47
@Britzcontrol

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?

0
Britzcontrol  12.12.2013, 18:51
@DonnieYen

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

0
DonnieYen 
Fragesteller
 12.12.2013, 23:39
@Britzcontrol
'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?

0
DonnieYen 
Fragesteller
 13.12.2013, 00:17
@DonnieYen

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

0
Britzcontrol  13.12.2013, 07:13
@DonnieYen

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

0
DonnieYen 
Fragesteller
 13.12.2013, 10:12
@Britzcontrol
 ...
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ß!

0
Britzcontrol  13.12.2013, 11:52
@DonnieYen
    '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

1
Higlav  17.12.2013, 19:46
@Britzcontrol

Warum schwach typisiert (bez. gar nicht) und Option Explicit Off? Das ist nicht schön...

0

Was genau steht in Zelle x.9 ?

Steht dort "Z41S9" bzw. "Z76S17" .... oder
"41_9" oder "41 9" oder, oder ?

Woher ich das weiß:Hobby – Jahrelanges programmieren.
DonnieYen 
Fragesteller
 11.12.2013, 18:36

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...=)

0
DonnieYen 
Fragesteller
 12.12.2013, 00:02

vom prinzip her ist es eine variable Zellenansteuerung bzw -auswahl...nur ist die Frage, wie der VBA-Code dazu aussieht

0

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

Woher ich das weiß:Hobby – Jahrelanges programmieren.
WertTransport - (Microsoft Excel, VBA, Schleifen)