Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Alle gefüllten Spalten mit Variabler durchlaufen

Alle gefüllten Spalten mit Variabler durchlaufen
05.08.2014 15:27:23
Stefanie
Hallo ihr VBA Profis,
möchte mich zunächst für dieses Klasse Forum bedanken, was mir schon oft weitergeholfen hat!
Meine Frage:
Ich möchte gerne alle Spalten (B4-EJ49) in meiner Tabelle durch gehen. Wenn in einer Spalte ein 'x' gefunden wird soll sich das Makro die Spalte merken, da ich dann aus dieser Spalte aber andere Zeile etwas kopieren möchte.
Mein Problem: wie kann ich mir die Spalte merken, in der das x gefunden wurde?
Mein Code:
For Each Zelle_Z In Range("B4:EJ49")
Worksheets(ArbBlatt).Select
If Zelle_Z.Value = "x" Then
Merke dir die Spalte
Und kopiere aus der gefunden Spalte aus Zelle 3 etwas
End if
Next Zelle_Z
Ich hoffe ich habe mein Problem verständlich ausgedrückt und freue mich über eure Hilfe.
Viele Grüße
Stefanie

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Alle gefüllten Spalten mit Variabler durchlaufen
05.08.2014 15:33:29
Hajo_Zi
Hallo Stefanie,
Option Explicit
Sub Schleife()
Dim Zelle_Z As Range
Dim ArbBlatt As String
ArbBlatt = ActiveSheet.Name
With Worksheets(ArbBlatt)
For Each Zelle_Z In .Range("B4:EJ49")
If Zelle_Z.Value = "x" Then
MsgBox Zelle_Z.Column
'Merke dir die Spalte
'Und kopiere aus der gefunden Spalte aus Zelle 3 etwas
End If
Next Zelle_Z
End With
End Sub

Anzeige
AW: Alle gefüllten Spalten mit Variabler durchlaufen
06.08.2014 07:24:46
Stefanie
Danke so sieht der Quellcode natürlich besser aus :-) hab mein Problem nochmal an einem Beispiel erläutert. Hoffe ihr könnt mir helfen, würde mich freuen bis dahin tüftel ich weiter ;-)
Viele Grüße

Alle gefüllten Spalten mit Variabler durchlaufen
06.08.2014 07:59:48
Hajo_Zi
Gut, Du möchtest mir das also nicht zeigen. Ich bin dann raus.
Gruß Hajo

Anzeige
AW: Alle gefüllten Spalten mit Variabler durchlaufen
06.08.2014 08:09:08
Stefanie
Entschuldige was zeigen?

AW: Alle gefüllten Spalten mit Variabler durchlaufen
06.08.2014 08:10:56
Stefanie
Meinst du das Beispiel? Natürlich :-)
Zitat:
Tabellenblatt ArbBlatt:
------A--------B-----------C ....
-----Text1----Text 2-----Text 3
G1-----x------------------ x
G2-------------x------------
G3-----x------ x-----------x
Mein Makro sucht in einem anderen Arbeitsblatt G1. Nun wechselt es in dieses Arbeitsblatt und findet hier auch die Zelle G1. So weit bin ich. Nun sollte es so weiter gehen:
Finde alle 'x' in der Zeile von G1 (im Beispiel in der Spalte A und C)
Wenn ein 'x' gefunden wurde dann kopiere in der Spalte (z.B. A) den Text 1 in ein anderes Tabellenblatt z.B. ZielArbBlatt in Spalte M4.
Ich hoffe so ist es verständlicher.

Anzeige
Kopieren wohin?
05.08.2014 15:38:30
EtoPHG
Hallo Stefanie,
Einige Anmerkungen:
1. Warum willst du jede Zelle im Bereich überprüfen? Das kann man mit Zählenwenn viel schneller prüfen.
2. Spalte / Zeile / Zelle : Sei konsistenter in der Begriffswahl. Ich nehme an, wenn in einer Spalte in den Zeilen 4:49 ein "x" vorkommt soll die Zeile 3 aus dieser Spalte irgendwohin
3. kopiert werden, aber wohin?
4. Dein VBA Code referenziert den Bereich im aktiven Tabellenblatt, da nützt ein nachträglicher .Select eines anderen Blatts gar nicht. Das .Select/.Activate meist überflüssige Befehle in VBA sind, kannst du in diesem Forum in Tausenden von Beiträgen lesen.
Warum VBA? Und nicht einfach eine Formel [Ansatz: =WENN(ZÄHLENWENN(A4:A49;"x")>1;INDEX(A:A;3);"")] in die erste Zielzelle und dann die Formel kopieren.
Gruess Hansueli

Anzeige
AW: Kopieren wohin?
06.08.2014 07:22:00
Stefanie
Vielen Dank für die schnelle Antwort!
Ich möchte dies gerne in einem größeren Makro Projekt unterbringen, deswegen muss ich dies per VBA umsetzen.
Entschuldige bitte ich versuche es an einem Beispiel besser zu beschreiben!
Tabellenblatt ArbBlatt:
------A--------B-----------C ....
-----Text1----Text 2-----Text 3
G1-----x------------------ x
G2-------------x------------
G3-----x------ x-----------x
Mein Makro sucht in einem anderen Arbeitsblatt G1. Nun wechselt es in dieses Arbeitsblatt und findet hier auch die Zelle G1. So weit bin ich. Nun sollte es so weiter gehen:
Finde alle 'x' in der Zeile von G1 (im Beispiel in der Spalte A und C)
Wenn ein 'x' gefunden wurde dann kopiere in der Spalte (z.B. A) den Text 1 in ein anderes Tabellenblatt z.B. ZielArbBlatt in Spalte M4.
Ich hoffe so ist es verständlicher.
Ich muss mir halt die Spalte merken irgendwie, in der das x steht um den Text aus der Spalte zu kopieren :-(
Freue mich über eure Hilfe!

Anzeige
Deine Ausführungen in Ehren...
06.08.2014 15:58:09
EtoPHG
Stefanie,
Beim besten Willen, kann ich dir keinen Codevorschlag aufgrund deiner Ausführungen machen.
Vielleicht genügt ja Hajo's Vorschlag. Allerdings bezweifle ich das, beim angegebenen Level.
Zum Einsteigen ins VBA Programmieren eignet sich der Makrorekorder, aber nachher das Anwenden der Tipps dieses Artikels (wobei empfohlen ist, diesen sich schon vorher zu Gemüte zu führen).
Gruess Hansueli
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Alle gefüllten Spalten mit Variabler durchlaufen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Code einfügen: Füge den folgenden VBA-Code in das Modul ein:

    Option Explicit
    Sub Schleife()
        Dim Zelle_Z As Range
        Dim ArbBlatt As String
        Dim ZielArbBlatt As Worksheet
        Dim i As Long
    
        ArbBlatt = ActiveSheet.Name
        Set ZielArbBlatt = Worksheets("ZielArbBlatt") ' Zieldatenblatt anpassen
    
        With Worksheets(ArbBlatt)
            For Each Zelle_Z In .Range("B4:EJ49")
                If Zelle_Z.Value = "x" Then
                    i = Zelle_Z.Column ' Merke dir die Spalte
                    ZielArbBlatt.Cells(4, 13).Value = .Cells(3, i).Value ' Kopiere aus Zelle 3
                End If
            Next Zelle_Z
        End With
    End Sub
  4. Anpassen der Zielzelle: Stelle sicher, dass die Zelle, in die Du die Daten kopieren möchtest (hier M4), korrekt eingestellt ist.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: "ZielArbeitsblatt nicht gefunden"
    Lösung: Stelle sicher, dass das Arbeitsblatt mit dem Namen "ZielArbBlatt" existiert.

  • Fehler: "Objektvariable nicht gesetzt"
    Lösung: Überprüfe, ob Du das Zielarbeitsblatt korrekt gesetzt hast.

  • Fehler: Leere Zellen werden nicht erkannt
    Lösung: Stelle sicher, dass Du den richtigen Bereich in Range("B4:EJ49") angibst und dass die Zellen tatsächlich Werte enthalten.


Alternative Methoden

Falls Du nicht mit VBA arbeiten möchtest, kannst Du auch Excel-Formeln verwenden:

  • Verwende die ZÄHLENWENN-Funktion, um die Anzahl der 'x' in einem Bereich zu zählen, und die INDEX-Funktion, um die Werte aus einer bestimmten Zeile zu extrahieren. Beispiel:

    =WENN(ZÄHLENWENN(B4:B49; "x") > 0; INDEX(B:B; 3); "")

Praktische Beispiele

Angenommen, Du hast in den Zellen B4 bis EJ49 verschiedene Werte und möchtest nur die Werte in Zeile 3 kopieren, wenn in der jeweiligen Spalte ein 'x' steht. Der obige VBA-Code veranschaulicht genau dieses Vorgehen.

Zusätzlich kannst Du in einer anderen Zeile oder einem anderen Arbeitsblatt die gleiche Methode anwenden, um die Daten dynamisch zu sammeln.


Tipps für Profis

  • Nutze die Option Explicit-Anweisung, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.
  • Vermeide die Verwendung von .Select und .Activate, um die Ausführungsgeschwindigkeit Deines VBA-Codes zu erhöhen.
  • Überlege, ob Du eine Collection oder ein Array verwenden möchtest, um mehrere Spalten zu speichern, in denen 'x' gefunden wird.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Werte zu kopieren?
Du kannst den Code leicht erweitern, indem Du eine Schleife hinzufügst, die nicht nur auf 'x' prüft, sondern auch andere Bedingungen berücksichtigt.

2. Was passiert, wenn meine Daten mehr als 49 Zeilen umfassen?
Du solltest den Bereich in .Range("B4:EJ49") entsprechend anpassen, um alle relevanten Zeilen einzuschließen.

3. Wie kann ich die kopierten Werte in eine andere Zelle als M4 einfügen?
Ändere die Zeile ZielArbBlatt.Cells(4, 13).Value in die gewünschte Zelle. Das erste Argument ist die Zeile, das zweite die Spalte.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige