Office: (Office 365) VBA dyn. Zellen kopieren und am ende der Liste einfügen

Helfe beim Thema VBA dyn. Zellen kopieren und am ende der Liste einfügen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Morgen zusammen, ich hoffe ihr könnt mir helfen, da ich mich zwar mit Excel auskenne aber mit Makros nichts zu tun habe. Ich habe folgendes... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von CJ5286, 11. März 2022.

  1. CJ5286 Neuer User

    VBA dyn. Zellen kopieren und am ende der Liste einfügen


    Guten Morgen zusammen,

    ich hoffe ihr könnt mir helfen, da ich mich zwar mit Excel auskenne aber mit Makros nichts zu tun habe.

    Ich habe folgendes Problem:

    Ich möchte einen Zelleneinträge kopieren und die Zellenwerte in eine anderen Tabelle am Ende einfügen.

    Der zu kopierende Bereich ist jedoch dynamisch, soll heißen es können mal Einträge von 1 Zeile bis zu 25 Zeilen sein. Die Inhalten sind in den Spalten A bis N aufgeführt. Kopiert werden sollen aber nur die Zeilen mit einem Wert/Text. In allen Zellen a1 bis n25 sind jedoch Formeln, die nicht berücksichtigt werden sollen.

    Die Werte sollen dann in einer anderen Liste (anderes Registerblatt) am Ende eingefügt werden, sodass sich dann sukzessive eine Datenbank ergibt. Da diese Tabelle mit jedem Vorgang auch erweitert, ist das ende der Liste somit auch dynamisch.

    Leider geht das natürlich nicht über die Makroaufzeichnung.



    Ich hoffe ihr könnt mir helfen.



    Vielen Dank schon einmal.
     
    CJ5286, 11. März 2022
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    kopiere folgendes Makro "Kopieren" in ein allgemeines Codemodul (so wie es auch der Makrorekorder getan hätte):
    Code:
    Option Explicit
    
    Public Sub Kopieren()
      Dim WsQ As Worksheet, WsZ As Worksheet
      Dim rgQ As Range, rgZ As Range
      Dim Zeile1Z As Long
     
      Set WsQ = Worksheets("Quelle")  '<== Quellblatt (anpassen!)
      Set WsZ = Worksheets("Ziel")    '<== Zielblatt  (anpassen!)
     
      'Quellbereich ermitteln:
      Set rgQ = WsQ.Range("A1:N25")
     
      'Zeilennummer der ersten freien Zeile des Zielbereichs ermitteln
      '(Die Spalte A wird dafür überprüft):
      Zeile1Z = WsZ.Cells(Rows.Count, "A").End(xlUp).Row + 1
     
      'Kopiert werden: Werte und Zahlenformate
      rgQ.Copy
      WsZ.Cells(Zeile1Z, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
                              Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
      'Kopiermodus beenden
      Application.CutCopyMode = False
    
    End Sub
    
    Die beiden Namen für das Quellblatt und für das Zielblatt müssen an deine Arbeitsblattnamen (=Tabellenregister) angepasst werden. Die Namensvorbesetzung im Makro ist "Quelle" und "Ziel".

    Das Makro kann über die Tastenkombination Alt+F8 (Makrodialog) nach Auswahl des Makros "Kopieren" und Drücken des Buttons "Ausführen" aufgerufen werden.
     
    Exl121150, 11. März 2022
    #2
  3. CJ5286 Neuer User
    Hallo Exl121150

    vielen Dank erst einmal für die schnelle Antwort.
    Die Funktion geht auch, leider aber nicht so ganz wie ich es mir gewünscht hatte. Leider werden die Daten weiter unten eingetragen und auch alle Zellen kopiert. Es sollen aber nur die Zellen aus der Liste "Übertrag" kopiert werden, bei denen die Formeln Ergebnisse ausgeben. Zellen die Leer sind sollen nicht kopiert werden.
    Wahrscheinlich ist das Problem, dass meine Wennfunktion ein "" ausgibt.
    Ich habe eine Bsp. Datei mal hochgeladen. Vielleicht erklärt sich dann meine Thematik.

    Ich hoffe du kannst mir weiterhelfen.
     
    CJ5286, 11. März 2022
    #3
  4. Exl121150 Erfahrener User

    VBA dyn. Zellen kopieren und am ende der Liste einfügen

    Hallo,

    die Probleme aus deinem letzten Posting hätten vermieden werden können, wenn du gleich eine Datei mit Wunschergebnissen hochgeladen hättest.

    In der beiliegenden Datei habe ich ein Arbeitsblatt "test(2)" eingefügt, das als testweises Kopierziel der Daten aus "Übertrag!A7:N31" dient. Dabei werden jetzt die sogenannten "Leerzeilen" nicht mehr kopiert.
    Sollen andere Arbeitsblätter bzw. Bereiche als Quelle oder Ziel des Kopierens verwendet werden, sind sie wieder zuerst an den gekennzeichneten Stellen im Makro zu ändern.
    Code:
    Option Explicit
    
    Public Sub Kopieren()
      Dim wsQ As Worksheet, wsZ As Worksheet
      Dim rgQ As Range, rgZeileQ As Range
      Dim ZeileZ As Long
    
      Set wsQ = Worksheets("Übertrag")  '<== Quellblatt (anpassen!)
      Set wsZ = Worksheets("test(2)")   '<== Zielblatt  (anpassen!)
    
      'Quellbereich ermitteln:
      Set rgQ = wsQ.Range("A7:N31")     '<== Quellbereich im Quellblatt (anpassen!)
    
      'Zeilennummer der ersten freien Zeile des Zielbereichs ermitteln
      '(Die Spalte A wird dafür überprüft):
      ZeileZ = wsZ.Cells(Rows.Count, "A").End(xlUp).Row + 1
    
      'Kopiert werden in nicht leeren Zeilen: Werte und Zahlenformate 
      For Each rgZeileQ In rgQ.Rows
         If Not IstLeerZeile(rgZeileQ) Then
            rgZeileQ.Copy
            wsZ.Cells(ZeileZ, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
                                   Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            ZeileZ = ZeileZ + 1
         End If
      Next rgZeileQ
      'Kopiermodus beenden
      Application.CutCopyMode = False
    
    End Sub
    '
    'Teste, ob die Zellen im Bereich "rgZeile" alle "leer" sind:
    '
    Public Function IstLeerZeile(rgZeile As Range) As Boolean
      Dim rgZelle As Range
      Dim vWert As Variant
     
      IstLeerZeile = True
      For Each rgZelle In rgZeile.Cells
         vWert = rgZelle.Value
         If Not IsEmpty(vWert) Then
            Select Case VarType(vWert)
               Case vbString:
                    'falls etwas anderes als "" enthalten ist
                    If Len(vWert) Then IstLeerZeile = False: Exit Function
               Case vbBoolean:
                    'falls WAHR oder FALSCH enthalten ist
                    IstLeerZeile = False: Exit Function
               Case Else:
                    'falls ein sonstiger numerischer Wert (auch 0) enthalten ist
                    IstLeerZeile = False: Exit Function
            End Select
         End If
      Next rgZelle
    End Function
    
    Aufgerufen wird das Makro genauso wie in meinem letzten Posting beschrieben.

    Mit der ebenfalls enthaltenen Funktion IstLeerZeile(Zellbezug) kann auch in Arbeitsblättern getestet werden, ob es sich beim Zellbereich "Zellbezug" um lauter "Leerzellen" handelt, zB. im Arbeitsblatt "Übertrag":
    =IstLeerZeile(A10:N10)
    falls das Resultat WAHR ist, handelt es sich um lauter "Leerzellen"; falls die Funktion FALSCH retourniert, ist mindestens 1 Zelle nicht "leer".
     
    Exl121150, 12. März 2022
    #4
  5. CJ5286 Neuer User
    Guten Morgen Exl121150
    vielen vielen Dank für die Unterstützung. Klappt genauso wie angedacht.
    Auch die Funktion ISTLeerZeile kannte ich bisher nicht. Aber lernt ja nie aus.
     
    CJ5286, 14. März 2022
    #5
  6. Exl121150 Erfahrener User
    Hallo,
    diese Funktion gibt es auch normalerweise nicht. Ich habe sie dir im Makro erstellt, wie du an folgender Makrozeile ersehen kannst:
    Public Function IstLeerZeile(rgZeile As Range) As Boolean
    In den dann folgenden Zeilen bis zur Zeile "End Function" ist sie enthalten.
     
    Exl121150, 14. März 2022
    #6
Thema:

VBA dyn. Zellen kopieren und am ende der Liste einfügen

Die Seite wird geladen...
  1. VBA dyn. Zellen kopieren und am ende der Liste einfügen - Similar Threads - VBA dyn Zellen

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Bilder über VBA Größe und DPI ändern für Webshop

    in Microsoft Excel Hilfe
    Bilder über VBA Größe und DPI ändern für Webshop: Hallo Excel Spezialisten, Ich habe mir eine recht aufwendige Tabelle gebastelt, aus der ich Daten für meinen Webshop generiere und in einer .csv bereitstelle. Es werden neue Preislisten...
  7. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  8. VBA - Textbox in UF mit Inhalt eines dyn. Bereiches füllen

    in Microsoft Excel Hilfe
    VBA - Textbox in UF mit Inhalt eines dyn. Bereiches füllen: Hallo, meine Frage bezieht sich auf eine sehr umfangreiche Firmendatei, weshalb ich leider "nicht mal eben" ein Beispiel posten kann. Aber da ich nur eine bestimmte Schreibweise in VBA suche,...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden