Clever-Excel-Forum

Normale Version: VBA - In nächste leere Spalte kopieren & Variablenverwendung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich bin leider ein ziemlicher Excel VBA Laie und gerade etwas am verzweifeln. Deshalb hoffe ich, dass ihr mir vielleicht helfen könnt.

Konkret möchte ich in einem Tabellenblatt 2 im Zellbereich E8:J8 nach einem "x" suchen. Findet er in einer Zelle ein "x" soll mir Excel die in Tabelle2 im Zellbereich E7:J7 zugehörigen Namen in den Zellbereich B4:G4 in das Tabellenblatt 1 schreiben.

Mein Code dazu sieht so aus:

Sub Werte_kopieren()

Dim i As Long

For i = 5 To 11

If Worksheets("Tabelle2").Cells(8, i) = "x" Then

Worksheets("Tabelle1").Cells(4, 2) = Worksheets("Tabelle2").Cells(7, i)

End If

Next

End Sub



1. Problem:
Starte ich das Makro und findet es mehrmals ein "x" schreibt es alle Namen in die Zelle B4, überschreibt diese also immer. In gewisser Hinsicht auch logisch, da ich ja nur die Zelle "B4" als Ziel angegeben habt. Wie schaffe ich es allerdings, dass er mir beginnend mit B4 die Werte in den Folgezellen B5, B6, B7 auflistet?
Also quasi immer in die nächste freie Spalte?

Ich habe mich jetzt durch das Netz gewühlt und unter anderem den nachfolgenden Code gefunden:

lngLetzteSpalte = Cells(2, Columns.Count).End(xlToLeft).Column
  
  With Range("C2:C200")
    Cells(2, lngLetzteSpalte + 1).Resize(.Rows.Count, 1) = .Value
  End With


Ich muss aber ehrlich sagen ich verstehe den Code nicht. Ist jemand so nett und könnte mir erklären, wie ich es auf meinen Fall anpassen muss, dass es funktioniert? 



2. Problem:
Wie muss ich es handhaben, wenn ich mehrere Variablen gleichzeitig einsetzen will?

Konkret:
Ich möchte die Zelle B4 ebenfalls teilweise als Variable definieren und habe den Code wie folgt geändert:

Sub Werte_kopieren()

Dim i As Long
Dim j As Long

For i = 5 To 11
For j = 2 To 8

If Worksheets("Tabelle2").Cells(8, i) = "" Then

Next i

Else

Worksheets("Tabelle1").Cells(4, j) = Worksheets("Tabelle2").Cells(7, i)

End If

Next i
Next j

End Sub



Meinem Verständis nach, prüft das Makro nun, ob die Zelle E8 einen Inhalt hat. Ist dies nicht der Fall, springt es weiter auf F8 und prüft wieder ob die Zelle leer ist.
Angenommen in F8 befindet sich nun ein "x", kopiert er mir die Zelle F7 nach B4. Anschließend springt er sowohl mit der Varialbe "i", als auch "j" eins nach oben und beginnt wieder von vorne.

In der Realität bekomme ich jetzt von Excel allerdings einen "Next ohne For" Fehler. Alle Versuche meinerseits diesen zu beheben sind fehlgeschlagen. Kann mir jemand erklären, wie ich in einer "If" Bedingungen mehrere Variablen verschachtele, bzw. diese richtig (und auch unabhängig voneinander) hoch zähle?

Ich sage schon mal herzlichen Dank für jeden Ratschlag!

Viele Grüße
Sebbo
Hallo,

baue nicht 2 For-Next-Schleifen, sondern zähle die eine Variable dann weiter, wenn ein "x" gefunden wurde, z.B. so

Sub Werte_kopieren()

Dim i As Integer
Dim j As Integer


j = 4
For i = 5 To 11
     If Worksheets("Tabelle2").Cells(8, i) = "x" Then
            Worksheets("Tabelle1").Cells(j, 2) = Worksheets("Tabelle2").Cells(7, i)
             j = j + 1

     End If
Next
End Sub


Das sollte funktionieren!
Hallo Sebbo,

habe Günters Vorschlag etwas abgeändert, damit es wie im ersten Post gefragt funktioniert:
Sub Werte_kopieren()

Dim i As Integer
Dim j As Integer

Worksheets("Tabelle1").Range("B4:G4") = ""
j = 2
For i = 5 To 10
If Worksheets("Tabelle2").Cells(8, i) = "x" Then
Worksheets("Tabelle1").Cells(4, j) = Worksheets("Tabelle2").Cells(7, i)
j = j + 1
End If
Next
End Sub
Gruß Uwe
Hallo Günter, hallo Uwe,

vielen Dank für eure Unterstützung!
Der Vorschlag funktioniert super und ich habe wieder was gelernt. Das Makro macht genau was ich wollte und mein 1. Problem mit "Kopiere in nächste freie Spalte" hat sich damit auch gelöst.
Jetzt experimentiere ich gerade mit mehreren Variablen :19:

Danke nochmal!

Viele Grüße
Sebbo