Excel VBA – Bestimmte Zeilen in eine andere Tabelle kopieren

Bestimmte Zeilen in eine andere Tabelle kopieren

Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.

In diesem How To zeige ich Ihnen wie Sie bestimmte Zeilen in eine andere Tabelle kopieren können. Wir haben eine Liste mit verschiedenen Artikeln. Manche von ihnen sind vergriffen. Wir wollen die verfügbaren Artikel in eine neue Tabelle kopieren.

111 VBA Makros die Ihr Leben leichter machen. Egal ob Sie Einsteiger oder fortgeschrittener Anwender sind – in diesem Buch finden Sie Lösungen für Ihre alltäglichen Aufgaben. Keine Vorkenntnisse notwendig.

VBA Bedingte Kopie

Dafür legen wir ein VBA Makro an. Zunächst definieren wir Variablen für die Zeilen. Zeile und ZeileMax sind für die Schleife notwendig. Mit der Variable n bestimmen wir die Zeile der Zieltabelle die wir füllen werden.

Sub BedingteKopieZeilen()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

End Sub

Dann geben wir an mit welcher Tabelle wir arbeiten wollen und ermitteln wie viele Zeilen in dieser Tabelle gefüllt sind. Die Variable n setzen wir initial auf 1. (Als erstes wird in die Zeile 1 kopiert.)

With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 1

End With

Unternehmensplanung mit SAP BPC

111 VBA Makros die Ihr Leben leichter machen

Wollen Sie Ihre langweiligen Routineaufgaben loswerden? Möchten Sie Excel an Ihre Bedürfnisse anpassen, Berechnungen automatisieren, eigene Dialogfelder erstellen und vieles mehr? Dieses Buch zeigt Ihnen, wie Sie Ihre Aufgaben schnell und einfach mit VBA erledigen.

Als nächstes setzen wir die Schleife auf. Innerhalb der Schleife prüfen wir ob in der jeweiligen Zeile in der Spalte C der Wert „Ja“ steht. Wenn die Bedingung zutrifft, dann kopieren wir die ganze Zeile über die Methode Copy. Als Ziel geben wir die n-te Zeile der Tabelle2 an. Danach müssen wir die Laufvariable n um eins erhöhen. Damit wird beim nächsten Kopiervorgang die nächste Zeile gefüllt.

For Zeile = 2 To ZeileMax

If .Cells(Zeile, 3).Value = "Ja" Then

.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1

End If
Next Zeile

Excel VBA - Bestimmte Zeilen in eine andere Tabelle kopieren
Führen Sie Ihr Makro aus. In Tabelle2 erscheinen nun die verfügbaren Artikel.
VBA Makro Kopieren

Das gesamte Makro:

Sub BedingteKopieZeilen()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 1

For Zeile = 2 To ZeileMax

If .Cells(Zeile, 3).Value = "Ja" Then

.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1

End If
Next Zeile
End With
End Sub

Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.

Beeindrucke deinen Chef mit coolen Excel Tricks!

  • Lasse dich von deinen Kollegen nicht abhängen!
  • Spare Zeit und nutze diese für angenehmere Dinge
  • Steigere deine Produktivität und Effizienz
  • Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
  • Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.
20 Excel Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. 100% sicher.

Quellen und weiterführende Literatur:
Bernd Held – VBA mit Excel: Das umfassende Handbuch
Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

61 Kommentare
  1. Andreas Böhme
    Andreas Böhme sagte:

    Vielen Dank! Das ist hier sehr gut erklärt!
    Ich beschäftige mich erst seit wenigen Tagen mit VBA, kenne mich aber sonst ganz gut mit Excel aus. Ich habe heute den ganzen Tag nach einem Weg gesucht, bestimmte Zeilen einer Tabelle (bis zur Zeile 140) in die gleiche Tabelle (ab Zeile 150) zu kopieren, bin daran aber grandios gescheitert.
    Vor allem die Beiträge aus Foren, die das gefundene Ergebnis gerne in die erste freie Zeile der gleichen Tabelle kopieren wollen, ließen sich für mich einfach nicht wie gewünscht abändern (Ich glaube mittlerweile verstanden zu haben, dass dies auch nicht so ohne weiteres geht).
    In ihrem Beitrag ist die Programmierung Schritt für Schritt gut erklärt. Und der Code kommt mit erstaunlich wenig Programmier-Zeilen aus. So habe ich schnell die Stellschrauben, an denen sich drehen lässt gefunden. Das ging in 30 Minuten!
    Sehr empfehlenswert!
    Ich werde mir ihr Buch bestimmt kaufen.
    Gerne auch wie gewünscht über Amazon.
    Nochmals vielen Dank.

    Antworten
    • Andrew
      Andrew sagte:

      Leider funktioniert der Code bei mir nicht ich habe 2 Tabellenblätter einmal Übersicht und einmal Bank in Spalte 2 des Tabellenblattes soll er nach dem Begriff „Bank“ suche sollte er da sein komplette Zeile mit Inhalt „Bank“ kopieren.

      Allerdings gibt er mir eine fehlermeldung zurück da er mit dem Punkt vor Rows (n)

      In der Zeile

      .Rows (Zeile). Copy Destination:=“Bank“.Rows(n)

      Nicht einverstanden ist Da kommt eine Fehlermeldung erwartet anweisungsende? ???

      Antworten
        • Denis
          Denis sagte:

          Hallo Andrew, geht es um eine ähnliche Aufgabenstellung wie beim Thorsten? Da habe ich ein Beispiel erstellt. Hoffe, dass es hilft.
          Ansonsten probier mal „Bank“ ohne „“, wenn die Tabelle in VBA Eigenschaften so heißt.
          Wenn es nur die Beschreibung ist (und die Tabelle in VBA Eigenschaften Tabelle2 oder ähnlich heißt), versuche es bitte mit Sheets(„Bank“).Rows(n).
          Viele Grüße
          Denis

          Antworten
    • Elena-Cristina Bareiß
      Elena-Cristina Bareiß sagte:

      Hallo :)
      Ich muss ebenfalls aus einer Tabelle (Eingabe sheet) Daten in andere Tabellen (Januar Februar usw) übertragen. Das soll automatisch über ein Button erfolgen.
      Mein Problem ist, dass die Übertragung anhand mehrerer Kriterien erfolgen muss (anhand des Monats und anhand der Produktlinie)
      Produktlinie wird im Eingabe sheet über eine drop down liste ausgewählt.
      Das heißt die Person wählt die Produktlinie aus (Monat wird automatisch ausgefüllt) macht seine manuellen Eingaben und dann klickt er auf den Button, die Daten werden übertragen und dann wählt er die nächste Produktlinie. Jede Tabelle mit dem Monat (Januar usw) hat in unterschiedliche Spalten die unterschiedlichen Produktlinien.
      Kann mir jemand hierzu helfen ? Ich komme nicht weiter (da ich keine Ahnung von Makros und VBA habe)
      Viele Grüße

      Antworten
  2. Oliver Zedler
    Oliver Zedler sagte:

    Hallo Herr Reis,
    ich befasse mich ebenfalls seit wenigen Tagen mit VBA.
    Was ich interessieren würde ist folgendes Szenario:
    Angenommen es gibt mehrere gleiche Artikel in Spalte A mit unterschiedlichen Mengen in Spalte B. Kann ein VBA Code so programmiert werden das die unterschiedlichen Artikel erkannt und in andere Tabelle kopiert werden?

    Antworten
    • Denis
      Denis sagte:

      Hallo Herr Zedler,
      verstehe die Aufgabenstellung noch nicht ganz. Sollen nur die einmaligen Artikel kopiert werden? Also jedes Artikel nur ein Mal? Oder geht es darum die Mengen zu kopieren? Da könnte man das obige Makro anpassen, dass die Spalten mit dem Artikel als Bedingung gelten. Kopiert wird dann die ganze Zeile.
      Viele Grüße
      Denis

      Antworten
      • Oliver Zedler
        Oliver Zedler sagte:

        Guten Morgen Herr Reis,
        es sollen alle Zeilen kopiert werden die den selben Bezug (Text und Zahlen z.B. 5B2 oder 18A1-CON15-4,…) in der Spalte K haben.
        Bsp.
        Angenommen Spalte K hat über 1000 Werte und für jeden unterschiedlichen Text soll ein neues Tabellenblatt geöffnet und alle dazugehörigen Zeilen kopiert werden.
        Die Werde in Spalte K sind aber Variabel und müssten „so denke ich“ vorher durchsucht, erkannt, zwischengespeichert und kopiert werden.
        Ich hoffe das die Erklärung besser ist ansonsten kann ich ihnen auch gerne eine Datei zusenden.

        VG
        Oliver Zedler

        Antworten
        • Denis
          Denis sagte:

          Hallo Herr Zedler,
          Sie könnten ja die Werte in der Spalte K sortieren. Dann fangen Sie an diese in ein anderes Tabellenblatt zu kopieren. Dabei vergleichen Sie immer ob der Wert in Spalte K derselbe ist. Wenn sich der Wert ändert, machen Sie ein neues Tabellenblatt auf und kopieren in den diesen weiter.
          Viele Grüße
          Denis

          Antworten
          • Oliver Zedler
            Oliver Zedler sagte:

            Danke für diesen Denkanstoß :-) Dann wird ich mich mal an die Arbeit machen recherchieren und versuche das umzusetzen.

            Ihre Erklärungen hier sind sehr übersichtlich und verständlich großen Lob.

            Vielen Dank
            Gruß

          • Andrew
            Andrew sagte:

            Hallo her Reis, gibt es eine Möglichkeit sie auch anderweitig zu kontaktieren ich bin leider seit 4 Jahren Arbeitssuchend und daher aus der
            Übung
            das MS ofice betrifft hab eine Frage zur Bedingten Formatierung

      • Andrew
        Andrew sagte:

        Hallo Denis ich hab mal eine Frage ich hab den vba Code jetzt in meiner Datei so modifiziert das im im Tabellenblatt Übersicht nach dem Begriff Bank in Spalte 2 nach dem Begriff Bank sucht die komplette Zeile dann in das Tabellenblatt Bank kopiert. Das ist so richtig. Danke schon mal dafür das gleiche soll er es jetzt für 3 weitere Tabellenblätter machen wenn ich das Makro also kopiere (3mal) und die Parameter entsprechend aufauf „Portmonee“, „Geldkassette“ „Sparbuch“ dazugehörigen
        Tabellenblätter
        „Portmonee“, „Geldkassette“ „Sparbuch“ ändere legt Excelmir 4 makros was mach ich falsch geht das nicht in ein Makro da iCh dieses mit einem Button verknüpfen und nicht jedes mackro einzeln aufrufen möchte, haben sie eine Idee?

        Gruß

        Andrew

        Antworten
        • Denis
          Denis sagte:

          Hallo Andrew, warum nicht alle vier Arbeitsblätter in einem Makro abfrühstücken? Einfach den Code Kopieren und With Tabelle1 ersetzen, With Tabelle2 usw. Quick and dirty :)

          Antworten
  3. Tobias Hanses
    Tobias Hanses sagte:

    Guten Tag Herr Reis,
    ich beschäftige mich, im Auftrag meiner Firma, seit einigen Tagen auch wieder mit dem Thema VBA.
    Ich hatte damals in meinem Studium auch EDV, davon ist aber leider nicht mehr viel hängen geblieben. Ich hoffe, Sie können mir bei folgendem Problem helfen.

    Situation:
    Ich habe eine Liste von Firmenkunden (ca. 500 unterschiedliche, unterteilt in Branchen) in der Mappe1.
    Ich möchte nun in Mappe2 nur die Kunden ausgeben, die ich in Mappe1 mit „x“ gekennzeichnet habe, und am besten mit Branche. Es sollte dann wie folgt in Mappe2 aussehen:

    Branche 1
    Kunde Nr.12
    Kunde Nr.45

    Branche 2
    Kunde Nr.67

    usw.

    Ich habe schon überlegt ob ich in Mappe1 eine Schaltfläche einbaue, und zwar mit dem Auftrag: “ Alle Zeilen, die mit „X“ gekennzeichnet sind, in Mappe2 übertragen“.
    Quasi scroll ich so den Kundenstamm durch, markiere die passenden Kunden an, scroll wieder hoch, klicke auf den Button, und in Mappe2 erscheinen automatisch nur die Kunden, die ich brauche. Ist das so möglich?

    Ich hoffe Sie können mir da weiter helfen
    MfG
    Tobias Hanses

    Antworten
    • Denis
      Denis sagte:

      Hallo Herr Hansens,
      steht die Branche in derselben Zeile wie der Kunde? Wenn Sie das hier vorgestellte Makro anpassen erreichen Sie das gewünschte Ergebnis. Sie könnten dann die rüberkopierten Kunden noch nach Branchen filtern.
      Viele Grüße
      Denis

      Antworten
  4. Kokernak
    Kokernak sagte:

    Guten Tag Herr Reis,

    zunächst einmal Danke für Ihre Vorlage. Ich möchte diese gerne erweitern, da ich mit drei Tabellenblättern arbeite stehe ich vor folgendem Problem. Im ersten Tabellenblatt erfolgt in einer Zeile die Eingabe einer Zahlenkombination, diese soll entsprechend im zweiten Tabellenblatt, welches die Datensätze enthält gesucht werden und Analog zu Ihrem Beispiel in ein neues Tabellenblatt kopiert werden.
    Allersdings stehe ich hierbei auf dme Schlau wie die folgende Zeile „If .Cells(Zeile, 3).Value = „Ja“ Then“ abzuändern ist, dass anstatt des „Ja“ entsprechend die Zelle des ersten Tabellenblattes ausglesen wird und im Anschluss gesucht wird.

    Vielen herzlichen Dank
    Mfg Christian Kokernak

    Antworten
  5. Anna
    Anna sagte:

    Guten Morgen,
    ich bin nach langer Suche auf diese Formel gestoßen und hoffe durch Sie mein Problem lösen zu können.

    Ich möchte die Formel gerne dafür nutzen Inhalte aus 8 verschiedenen Tabellenblättern in ein neues kopieren zu können.
    Der Aufbau der 8 Tabellenblätter ist identisch: Datum – Aufgabe- Zieltermin- Zuständigkeit. Jedes Tabellenblatt steht für ein eigenes Thema. (z.B. operativ, strategisch, Kontrolle etc.)

    Jetzt möchte ich alle Aufgaben, für die Person A zuständig ist, gesammelt in ein neues Tabellenblatt kopieren. Möglichst so, dass sich bei Eintragungen auf Blatt 7 diese Auflistung automatisch erweitert.

    Wie kann ich dies tun, ohne dass sich die kopierten Zeilen gegenseitig überschreiben?
    Kann ich die oben genannte Formel einfach auf alle 8 Blätter anwenden, oder muss ich Sie umschreiben?

    Vielen Dank und Liebe Grüße
    Anna

    Antworten
    • Denis
      Denis sagte:

      Hi Anna,
      kann man sicherlich machen, einfach die anderen Tabellen unten anhängen und die Variable n weiter zählen.
      Aber wäre es nicht einfacher, die 8 Tabellenblätter in einen Blatt zu kopieren und das Makro darüber laufen zu lassen?
      Warum so kompliziert, wenn es auch einfach geht? :)
      Viele Grüße
      Denis

      Antworten
  6. André Benesch
    André Benesch sagte:

    Hallo Denis,

    diese Erklärung von Dir hat mir auch sehr weitergeholfen – Super!
    Nun habe ich aber das Problem, dass ich aus Tabellenblatt 1 nur bestimmte Spalten kopieren muss und diese auch noch in andere Spalten einfügen soll. Kannst Du mir da weiterhelfen?

    Gruß André

    Antworten
  7. Thorsten
    Thorsten sagte:

    Hallo.

    Ich danke erstmal für diese Erklärung. Ich habe den Code so umgesetzt, dass ich Ihn auf meine Bedürfnisse angepasst habe. jetzt ist es so, dass der Code kopiert, wenn bestimmte Bedingungen erfüllt sind. Ich habe hier eine Tabelle. In dieser Tabelle habe ich mir mehrere Tabellen gemacht. Diese haben Stäftenamen. Mit Ihrem Code, lasse ich eine Tabelle „SH“ durchsuchen. Die Bedingung ist die Stadt. Hat er die Zeile gefunden in der die Stadt steht, kopiert er die ganze Zeile in die dazugehörige Tabelle mit dem selben Stadtnamen.
    Jetzt meine Frage. Es gibt auch eine Tabelle „Sonstige“. In der Tabelle „SH“ stehen auch Zeilen mit Städten die keine einzelne Tabelle haben. Hier fungiert die Tabelle „Sonstige“ als sog. Auffangbecken für alle anderen.

    Wie kann ich dem Code sagen, dass er mir alle anderen Städte in die Tabelle „Sonstige“ kopieren soll?

    Danke schonmal.

    Antworten
    • Denis
      Denis sagte:

      Hallo Thorsten,
      würde gern sicher gehen, dass ich es richtig verstanden habe. Soll das Makro prüfen, ob für die Stadt eine eigene Tabelle (Arbeitsblatt) existiert? Und wenn nicht, die Stadt in das Arbeitsblatt „Sonstige“ kopieren?
      Mann könnte die Namen der Tabellen auslesen und vergleichen, falls es keine Überstimmungen gibt, soll die Stadt in „Sonstige“ kopiert werden.
      Viele Grüße
      Denis

      Antworten
      • Thorsten
        Thorsten sagte:

        Guten Morgen.
        Ja genau das ist gemeint. Suche mir in Spalte G die Namen der Städte und wenn ein Tabellenblatt mit dem Namen existiert, dann kopiere die ganze Zeile in das Tabellenblatt, ansonsten alle anderen Städte, wo kein eigenes Tabellenblatt existiert bitte in die Tabelle „Sonstige“.

        Antworten
          • Thorsten
            Thorsten sagte:

            Guten Morgen.
            Mit dieser Übereinstimmung…also wenn keine Übereinstimmung vorliegt….wie muss dass denn aussehen. Aus den Beispielen hier auf der Seite habe ich mir schon einige zusammengestrickt.
            Auch die Suche nach einer Variablen (also die Stadtnamen) klappt und es wird artig in die anderen Tabellen kopiert.
            Aber wie sage ich, dass wenn keine Übereinstimmung vorliegt, dass er in Sonstige kopieren soll. Gibt es ein Beispiel hier auf der Seite?

            VG
            Thorsten

  8. Thorsten
    Thorsten sagte:

    Vielleicht noch zur Ergänzung. Derzeit kopiere die Zeilen mit dem Code die gefundenen Städte auf die Tabellen mit dem selben Namen.
    Private Sub CommandButton3_Click()
    Dim Zeile As Integer
    Dim ZeileMax As Integer
    Dim i As Integer

    With Tabelle2
    ZeileMax = .UsedRange.Rows.Count
    n = 1

    For Zeile = 2 To ZeileMax

    If .Cells(Zeile, 4).Value = „Köln“ Then

    .Rows(Zeile).Copy Destination:=ThisWorkbook.Worksheets(„Köln“).Rows(n)
    n = n + 1

    End If
    Next Zeile
    End With
    End Sub

    Das mache ich mit jeder Stadt die ich habe. Das klappt auch.
    Aber jetzt sind halt Städte dort, die keine eigene Tabelle haben. Diese ganze Zeile soll dann in die Tabelle „Sonstige“.
    Und genau diesen Codeschnipsel bekomme ich nicht hin.

    Gruß

    Thorsten

    Antworten
    • Denis
      Denis sagte:

      Hallo Thorsten,
      wenn die Städte von vornherein bekannt sind, funktioniert dein Code. Einfach eine Else Bedingung einbauen.
      Habe dir ein Beispiel hochgeladen. Habe die Blätter nach Städten benannt. Aber mit der Beschreibung wie bei dir geht es auch. Werden aber ziemlich viele „Wenns“, eventuell wäre SELECT CASE übersichtlicher (und performanter).

      Eleganter wäre es zu prüfen ob die Tabelle für die Stadt existiert. Wenn ja, soll in diese kopiert werden. Wenn nicht, soll in „Sonstige“ kopiert werden. Auch hier habe ich ein Beispiel erstellt.

      Antworten
      • Thorsten
        Thorsten sagte:

        Super danke.
        Habe es umgesetzt und klappt perfekt.

        Ein anderes Thema habe ich noch.

        Ich habe zwei Tabellenblätter. Im ersten Tabellenblatt (Tabelle1) sind nur die CommandButtons. Im zweiten Tabellenblatt („Betrag“) stehen folgende Informationen.

        Spalte A: Nachname
        Spalte B. Vorname
        Spalte C: Geburtsdatum
        Spalte D: Ort
        Spalte E: Leistungsbeginn
        Spalte F: Leistungsende
        Spalte G: Leistungsbetrag
        Spalte H-N. Zusatzinformationen

        In den Zeilen stehen jeweils ausgefüllt die Daten zu den einzelnen Personen. Es sind pro Person mehrere Einträge nach unten (Personen kommen mehrfach vor). So kann es sein das eine Person (Meier, Michael 7-8x untereinander kommt, mit jeweils einem Leistungsbetrag). Es sind über 3000 Zeilen nach unten.

        Ich möchte jetzt mit dem klick auf einen CommandButton in Tabelle 1 folgendes bewirken:

        1. Die Liste soll nach Spalte A sortiert werden (und zwar ab Zeile 2, da in Zeile 1 die Überschriften stehen).

        2. Steht zum Beispiel in Zeile 2 Meier, Michael mit dem jeweiligen Leistungsbetrag und das geht bis Zeile 8 und in Zeile 9 kommt Meyer, Jörg, sollen nach den ersten 8 Zeilen (da gleiche Person) eine Leerzeile eingefügt werden. In der Leerzeile soll dann in Spalte A das Wort „Summe“ (rechtsbündig) eingetragen werden und die Summe der jeweiligen Leistungsbeträge soll in der Leerzeile bei Spalte G gebildet werden. Und weiter geht es zum nächsten Namen….usw.

        Die Bedingung zum Suchen/Sortieren der gleichen Namen soll mit Nachname, Vorname und Geburtsdatum identifiziert werden, da Nachname und Vorname schonmal gleich sein können. Somit unterscheidet das Geburtsdatum dann.

        Ist so etwas zu machen?

        Antworten
  9. Stefan Primas
    Stefan Primas sagte:

    Hallo Herr Reis,

    danke erst mal für die gelungene Beschreibung.
    Hätte diesbezüglich eine Frage:
    Bei meiner Tabelle gibt es zwei Spalten die einen konkreten Wert annehmen müssten damit sie kopiert werden. Konkret gesagt: Wenn in der Spalte H, ab Zeile 10, der Wert „S“ vorkommt oder wenn in der Spalte I, ab Zeile 10, der Wert „H“ vorkommt, dann soll kopiert werden. Wenn beide Kriterien erfüllt sind, soll auch kopiert werden aber nur einmal.
    Können sie mir bei diesem Problem weiterhelfen?

    Vielen Dank im Voraus und liebe Grüße,

    Stefan Primas

    Antworten
    • Denis
      Denis sagte:

      Hallo Herr Primas,
      verstehe es leider noch nicht ganz. Was soll passieren wenn nur eine Bedingung erfüllt ist? Wird ja auch nur einmal kopiert, oder? Vielleicht können Sie ein Beispiel bringen?

      Viele Grüße
      Denis

      Antworten
  10. Nils Möller
    Nils Möller sagte:

    Hallo Herr Reis,

    Wenn Ich die Zeile „If. Cells(Zeile. 3).Value = „Ja“ Then“ eingebe zeigt mir Microsoft einen Fehler an.

    Fehler beim Kompilieren:
    Erwartet Bezeichner oder geklammerter Ausdruck

    Können Sie mir helfen diesen Fehler zu beseitigen?

    Antworten
  11. Lucas
    Lucas sagte:

    Hallo Herr Reis,

    erstmal vielen Dank für die leicht verständliche Erklärung.

    Allerdings habe auch ich eine Frage. In meiner Tabelle befinden sich Nummern, die mit RA-***** beginnen (z. Bsp. RA-01535) und normale Nummern (z. Bsp. 0124).
    Ich möchte nur die normalen Nummern kopieren.

    Allerdings weiß ich nicht, wie ich in dem Makro schreiben kann, dass alle Nummern die mit „RA“ beginnen nicht mit kopiert werden.

    Können Sie mir bei der leichten Anpassung des Codes helfen?

    Viele Grüße
    Lucas

    Antworten
    • Denis
      Denis sagte:

      Hallo Lucas,
      würde mit Left nach den ersten zwei Zeichen schauen und dementsprechend handeln:

      If Left(.Cells(Zeile, Spalte).Value, 2) = "RA" Then
      'do nothing
      Else
      'copy
      End If

      Viele Grüße
      Denis

      Antworten
  12. Friedrich Husmann Kd.36742
    Friedrich Husmann Kd.36742 sagte:

    Hallo,

    funktioniert das ganze auch mit Libre Office?
    Ich habe da meine Probleme!
    Für einen kleinen Tipp wäre ich dankbar.

    Antworten
  13. F. Schreiner
    F. Schreiner sagte:

    Hallo,

    Makro funktioniert super. Ich möchte aber nur eine bestimmte Zelle aus einer Zeile von Tabelle1 in eine Bestimmte Zelle der Tabelle 2 schreiben. habe schon so versucht — .Rows(Zeile, 16[Spalte]).Copy Destination:=Sheets(„MonatName“).Rows(n, 2[Spalte])– funktioniert nicht kommt immer Debuggen. was mach ich Falsch.

    Danke
    Gruß Friedl

    Antworten
  14. LB
    LB sagte:

    Hallo,
    Ich bin seit Tagen auf der suche nach einem VBA code der mir weiter helfen kann.
    Dann bin ich auf diesen hier gestoßen er erfüllt das was ich bräuchte aber ich würde gerne eine Zeile in eine andere Tabelle kopieren und nicht mit dem „Ja“
    Es sollen die Zeilen kopiert werden, die einen Colorindex 35 haben. Und das würde ich gerne in den Code eingeben.
    Ich hoffe du kannst mir helfen
    Viele Grüße

    Antworten
  15. Frank
    Frank sagte:

    Hallo Denis,
    das funktioniert super, vielen Dank.
    Wie bekomm ich es hin, dass erst ab Zeile 2 eingefügt wird, da ich in Zeile 1 Überschriften habe?

    Vielen Dank

    Frank

    Antworten
  16. Oliver Hartmann
    Oliver Hartmann sagte:

    Hallo Dennis,

    vielen Dank für den schlanken VBA Code. Das Makro macht „fast“ genau das, was es soll.
    Was müsste ich hinzufügen / verändern, um die kopierten Zellen von Tabelle 1 in die nächste freie Zeile der Tabelle 2 zu kopieren.
    Tabelle 2 soll also eine fortlaufende Auflistung der kopierten Zeilen aus Tabelle 1 sein.

    Ist das überhaupt möglich?

    Besten Dank und viele Grüße.
    Oliver

    Antworten
  17. Familie Ries
    Familie Ries sagte:

    Hallo Herr Reis, bin VBA Anfängerin oder sagen wir mal, es will einfach nicht in mein Hirn ;-( ,
    ich muss diesen Code doch sicherlich als Modul anlegen, oder muss ich ihn in die MS Excel Objekte einprogrammieren, Zieltabelle(Tabelle2), oder Starttabelle (Tabelle1), oder diese Arbeitsmappe?

    Soweit funktioniert der Code, aber wenn ich einen neuen Datensatz in der Starttabelle (Tabelle1) anlege, der mein Kriterium beinhaltet, wird dieser nicht automatisch in der Zieltabelle übernommen, außer ich starte das Modul manuell.
    Wie bekomme ich es hin, dass dies ständig ausgeführt wird?

    Was muss ich noch programmieren, wenn ich eine zusätzliche Prüfung mit dabei haben möchte; z.B. Spalte 17 soll leer sein, ein AND klappt nicht.
    If .Cells(Zeile, 5).Value = „W“
    If .Cells(Zeile, 17).Value = „“ Then
    Ich möchte mich im Vorfeld bedanken, dass Sie Ihre Erklärungen sehr verständlich vermitteln können.

    Antworten
  18. Manfred Seith
    Manfred Seith sagte:

    Hallo Herr Reis, ich kenne mich überhaupt mit VBA nicht aus. Ich habe mir ein Buchhaltungsprogramm erstellt. Auf einem Tabellenblatt gebe ich die Buchungen ein. Auf ein zweites Tabellenblatt habe ich die Konten angelegt. Ich habe alles mit Formeln belegt. Diese funktionieren auch. Wenn ich aber eine wiederkehrende Buchung eingebe, sind auf dem Konto Leerzellen. Kann ich mit einem VBA Code den Buchungstext automatisch fortlaufend programmieren.

    Antworten
  19. Frank A.
    Frank A. sagte:

    Hallo zusammen,

    vorab erstmal vielen Dank an Denis für viele tolle Tipps!

    Nun zu meinem Anliegen.

    Der nachfolgende Code (stammt von oben aus diesem Beitrag) ist sehr verständlich. Ich muss aber Folgendes ändern:

    1. Ich muss Daten nicht aus einem Tabellenblatt derselben Datei, sondern aus einem Tabellenblatt
    einer zweiten Datei (Quelldatei) holen.

    2. Die Reihenfolge der Spalten in der Quelldatei entspricht nicht der Reihenfolge der Zieldatei.
    – Spalte A der Quelldatei = Spalte D der Zieldatei
    – Spalte B der Quelldatei = Spalte A der Zieldatei

    Meine Zieldatei : C:\ZielOrdner\ZielDatei.xlsm Tabellenblatt: ZielTabelle
    Meine Quelldatei: C:\QuellOrdner\QuellDatei.xlsm Tabellenblatt: QuellTabelle

    Wie muss der folgende Code angepasst werden (habe ihn von oben aus diesem Beitrag hierher kopiert):

    _____________________________________

    Sub BedingteKopieZeilen()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long

    With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    n = 1

    For Zeile = 2 To ZeileMax

    If .Cells(Zeile, 3).Value = „Ja“ Then

    .Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
    n = n + 1

    End If
    Next Zeile
    End With
    End Sub
    _____________________________________

    Gruß aus Bremen

    Frank

    Antworten
  20. sgsandscholle
    sgsandscholle sagte:

    Hallo,

    erstmal vielen Dank für diese tolle Beschreibung.

    Wenn ich jedoch den Code abändere nach meinen Vorgaben. Erhalte ich immer den Laufzeitfehler 424. Können sie mir sagen was ich falsch gemacht habe? Hier der Code:

    Sub BedingteKopieZeilen()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long

    With Übersicht
    ZeileMax = .UsedRange.Rows.Count
    n = 1

    For Zeile = 2 To ZeileMax

    If .Cells(Zeile, 7).Value = „Zugesagt“ Then

    .Rows(Zeile).Copy Destination:=Zugesagt.Rows(n)
    n = n + 1

    End If
    Next Zeile
    End With
    End Sub

    Ich wäre für jede Hilfe dankbar.

    LG
    Tom

    Antworten
  21. Ernst Aust
    Ernst Aust sagte:

    Hallo Herr Reis,
    seit einiger Zeit (kein Profi) beschäftige ich mich mit dem Thema VBA. Ich bin dabei, ein bereits von mir geschriebenes Programm für eine Kegler-Vereinigung in Excel 2013 in VBA umzuschreiben.
    Meine Kenntnisse in VBA habe ich mir aus Büchern, Foren und vielen Beispielen aus dem Internet angeeignet. Seit längerem suche ich nach einer Lösung, wie ich die ermittelten Kegler-Ergebnisse aus der Erfassungstabelle in eine Auswertungstabelle in der gleichen Arbeitsmappe kopieren kann.
    Bei der Suche im Internet bin ich auf Ihre Seite gekommen und habe mir Ihr E-Book mit den Makros heruntergeladen. Dabei bin ich auf einen Lösungsansatz gestoßen. Mit dem Beispiel (Kopie von 0028 – Bestimmte Zeilen in eine andere Tabelle kopieren müsste es klappen. Leider habe ich es nicht geschafft, es umzusetzen.

    Nun zu meinem Anliegen Herr Reis!

    Der folgende Code stammt von Ihnen, ich habe angefangen diesen für meine Bedürfnisse anzupassen

    Sub Wertekopieren()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long
    With Hollern
    ZeileMax = .UsedRange.Rows.Count
    n = 1
    For Zeile = 2 To ZeileMax
    If .Cells(Zeile, 3).Value = „Ja“ Then
    .Rows(Zeile).Copy Destination:=Kegler.Rows(n)
    n = n + 1
    End If
    Next Zeile
    End With
    End Sub

    Folgende Daten möchte ich aus der Tab_Hollern in die Tab_Kegler kopieren:

    -Spalte CI, CJ, CK, CR, CY und DF der Tab_Hollern = Spalte AA, AB, AC,AO und AS der Tab_Kegler

    Herr Reis, wie muss der Code angepasst werden?

    Können Sie mir helfen?

    Gruß aus Hamburg
    Ernst

    Antworten
  22. Sascha
    Sascha sagte:

    Hallo Herr Reis,
    danke für die tolle Erklärung ich konnte den Cod für mich entsprechen anpassen. Allerdings würde ich gerne nur die Werte einfügen. Bekomme es aber nicht hin. Hab schon einiges mit PasteSpecial Paste:=xlValues versucht aber leider ohne Erfolg.

    Kann mir einer weiterhelfen?

    Antworten
  23. Uwe Winkler
    Uwe Winkler sagte:

    Hallo Hr. Reis,
    ich habe ihr VBA wie oben Verwendet. Habe es dann noch etwas abgeändert um einen Variablen Wert auszulesen:
    Sub Biotop()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long

    ThisWorkbook.Worksheets(„Tabelle2“).Activate
    Range(„A2:K10“).Clear

    With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    n = 1

    For Zeile = 2 To ZeileMax

    If .Cells(Zeile, 1).Value = Range(„P2“) Then

    .Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
    n = n + 1

    End If
    Next Zeile
    End With
    End Sub

    Private Sub Workbook_Open()

    End Sub

    Funktioniert soweit. Jetzt hätte ich aber gerne auch die Spaltenüberschriften in der Ausgabetabelle.
    Geht es auch das ich in P2 einen Wert eintrage der „irgendwo“ in der Datentabelle steht und mir dann dazu die kpl. Zeile in die Ausgabetabelle kopiert wird? oder muss ich dann jeweils ein Makro mit der entsprechende Zeile/Spalte anlegen?
    Danke im Voraus
    Gruß aus Burghausen
    Uwe

    Antworten
  24. Christian
    Christian sagte:

    Hallo Denis,

    das Beispiel ist sehr gut. Hätte aber ein anderes Problem, und zwar möchte ich in einer Master Excel Datei mittels Button druck aus 2 Excel Datein (selber Aufbau) nur die Zeilen in die Master Excel Datei kopieren die das aktuelle Datum haben (Spalte A ist immer das Datum). Hättest du dafür auch eine Lösung?! Danke schon mal im Voraus

    Antworten
    • Christian
      Christian sagte:

      habe eine Lösung für mein Problem – jedoch bin ich noch nicht ganz zufrieden. Das Makro kopiert mir von den beiden Quelldatein immer die Überschriften mit, und das soll nicht sein – hat jemand eine Idee?!

      hier der aktuelle Code:

      Private Sub CommandButton1_Click()
      Dim wkb As Workbook
      Dim wksQuelle As Worksheet
      Dim wksZiel As Worksheet
      Dim arDateien As Variant
      Dim lrow As Long
      Dim i As Integer
      Dim strPfad As String
      Dim Datum As Date

      Datum = Format(Now(), „DD.MM.YYYY“) ‚aktuelles Datum definieren

      Worksheets(1).UsedRange.ClearContents ‚löschte aktuelles Tabellenblatt

      strPfad = „T:\GM10\GL-BTL\Gutschriften“ ‚Pfad der zu prüfenden Dateien
      Set wksZiel = ThisWorkbook.Worksheets(„Tabelle1“) ‚Zieltabellennamen

      arDateien = Array(„KE_Test.xlsm“, „KA_Test.xlsm“) ‚Dateinamen

      For i = LBound(arDateien) To UBound(arDateien)
      Set wkb = Workbooks.Open(strPfad & „\“ & arDateien(i))
      Set wksQuelle = wkb.Worksheets(„Tabelle1“) ‚ Tabellennamen anpassen
      wksQuelle.Range(„A2″).AutoFilter _
      field:=1, Criteria1:=“>=“ & CDbl(Datum)
      wksQuelle.Cells(1, 1).CurrentRegion.Copy wksZiel.Cells(wksZiel.Cells(Rows.Count, 2).End(xlUp).Row + 1, 1)
      wkb.Close False
      Next

      MsgBox “ Fertig „, vbInformation + vbOKOnly, „Hinweis!“ ‚bringt Meldung wenn das Makro fertig ist

      End Sub

      Antworten
  25. Michaela
    Michaela sagte:

    Hallo, Ich brauche wirklich Hilfe und suche schon seit Tagen im Internet nah einer Lösung. Ich stelle gerade für mein Kleingartenverein eine Excelmappe mit verschiedenen Blättern her. Mitgliederliste, Rechnungen, Zahlungserinnerung, Mahnung usw. Hat soweit auch gut geklappt, aber jetzt habe ich ein Problem. Ich bekomme einen Code nicht hin und war habe ich eine Mitgliederliste und möchte die einzelnen Namen und Adressen in die Mahnung einfügen über ein Makro. Die erste Zeile mit Namen und Adresse bekomme ich auch hin, aber dann ruft er die 2 Zeile mit der Adresse und 3 und 4 usw nicht automatisch auf.Muss ich für jede einzelne Zeile ein neues Makro erstellen oder kann man das mit einen Code auf automatisch stellen? Würde mich sehr darüber freuen, wenn Ihr mir helfen könnt und mir vielleicht ein Beispielcode schicken könntet.

    Antworten
  26. Rebecca Hirtler
    Rebecca Hirtler sagte:

    Hallo Herr Reis,
    danke für das tolle Makro!
    Ich bin totale VBA-Anfängerin, muss aber sehr viel mit Excel arbeiten und würde mir das gern etwas leichter machen.
    Im Moment führe ich für jeden einzelnen Techniker eine Auswertung, was natürlich sehr aufwendig ist. Jetzt würde ich gerne eine Excel-Datei als Quelle verwenden und mit Hilfe des Makros die zum jeweiligen Techniker gehörende Auswertung in eine eigene Datei kopieren. Das Makro funktioniert ja so wie es ist wunderbar, wenn ich mich innerhalb einer Datei bewege, aber wie bekomme ich es hin, es in eine andere zu kopieren?
    Danke für Ihre Hilfe!

    Antworten
  27. Samuel
    Samuel sagte:

    Hallo,
    ich brauche dringend eure Hilfe!
    Ich habe eine Excel-Tabelle, bei der die Spalten und Zeilen sowohl mit Text als auch mit Zahlen befüllt sind.

    151 Berlin 117 87 154
    182 ROM Taxi Apples 156
    109 188 62 97 125
    194 125 110 122 76
    166 Paris 79 Bananas 169
    193 Oranges 119 131 167
    158 173 Grapes 180 100

    Wie kann ich binnen eines Makros feststellen, welche Zellen Text und welche Zellen mit Zahlen befüllt sind?
    Ich wäre jedem dankbar für seine Hilfe!
    VG
    Samuel

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.