Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ganze Zelle kopieren wenn Text in Zeile

Ganze Zelle kopieren wenn Text in Zeile
04.01.2023 12:00:41
Lisa
Hallo liebe Community,
folgendes Problem: Ich habe ein Tabellenblatt in dem alle Buchungszeiten aller "Abteilungen" drin sind. Jetzt möchte ich aber ein Makro schreiben, welches die Daten der einzelnen Abteilungen aufteilt und in extra Tabellenblätter aufteilt.
Sprich: In den Zellen C2:C10000 steht "Abt1, Abt2, Abt3 etc.".
Das Makro soll also jeweils ein Tabellenblatt für jede Abteilung anlegen, und in dieses Tabellenblatt alle Zeilen kopieren, die in der Spalte C die jeweilige Abteilung stehen haben.
Meine Grundidee wäre einfach eine if zu machen, die abfragt, ob Cells("C2") = "Abt1" Then Range("C2").EntireRow.Copy
Hier müsste man ja jetzt einfach die "2" durch eine Variable i ersetzen, und diese immer +1 rechnen. Aber ich komme nicht dahinter wie ich das in den Code integriere. Weil Cells("Ci") kann ja nicht funktionieren.....
Vielen Dank schon im Vorhinein!

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ganze Zelle kopieren wenn Text in Zeile
04.01.2023 17:57:58
Piet
Hallo
dieses kleine Makro sollte ausreichen um alle Daten in vorhandene oder neue Tabellen zu kopieren.
Vorhandene Tabellen werden vorher gelöscht, damit es keine doppelten Datensaetze gibt!
Wei lange es bei 10.000 Daten dauert weiss ich nicht. Bin gespannt auf ide Rückmeldung.
mfg Piet
  • 
    Sub Abteilunen_kopieren()
    Dim TabTxt As String, i As Integer
    Dim AC As Range, lzx, lz1 As Long
    Application.ScreenUpdating = False
    'vorhandene Tabellen ermitteln
    For i = 1 To Worksheets.Count
    TabTxt = TabTxt & ", " & Worksheets(i).Name
    Next i
    '** vorhandene Tabellen zuerst löschen!!
    For i = 1 To Worksheets.Count
    If Left(Worksheets(i).Name, 3) = "Abt" Then _
    Worksheets(i).Cells.Clear
    Next i
    With Worksheets("Tabelle1")  'Name deiner Liste!!
    'LastCell in Tabelle mit Abteilungen
    lz1 = .Cells(Rows.Count, 3).End(xlUp).Row
    'Alle Daten in einzelne Tabellen kopieren
    For Each AC In .Range("C2:C" & lz1)
    'Fehlende Tabellen zuerst erstellen
    If InStr(TabTxt, Mid(AC, 3)) = 0 Then
    Worksheets.Add after:=Worksheets(Sheets.Count)
    ActiveSheet.Name = Trim(AC)
    TabTxt = TabTxt & ", " & Trim(AC)
    End If
    'Daten in jede einzelne tabelle kopieren
    Sht = Trim(AC)
    lzx = Worksheets(Sht).Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Rows(AC.Row).Copy
    Worksheets(Sht).Rows(lzx).PasteSpecial xlPasteAll
    Next AC
    End With
    End Sub
    

  • Anzeige
    AW: Ganze Zelle kopieren wenn Text in Zeile
    05.01.2023 08:16:13
    Lisa
    Hallo Piet,
    erstmal vielen Dank für deinen Code. Habe gestern (noch vor deiner Antwort) einen eher "schwindligen" Code auf die Beine gestellt, der zwar funktioniert aber ca. 10min gebraucht hat. Jetzt habe ich es mal mit Deinem versucht und es hat anfangs nicht funktioniert. Excel ist einfach eingefroren, der Rechner hat aber nicht gearbeitet wie ich im Taskmanager festgestellt habe. Habe das Programm dann im Debugger mit Einzelschritten ausgeführt, da ich ja etliches umschreiben musste. Die Abteilung heißen ja nämlich nicht Abt1 usw. sondern haben Namen wie Controlling Finance etc.. Dachte es liegt daran, dass mein umschreiben falsch war. Stellt sich aber heraus, dass er die Zeilen sehr wohl rüberkopiert, jedoch nach der ersten Zeile jede kopierte Zeile "ausblendet". Sprich man sieht dann links Zeile 2 und darunter Zeile 4. Blendet man Zeile 3 ein, stimmt alles wieder. Führt man den Einzelschritt jetzt aber wieder durch, erscheint wieder eine eingeklappte Zeile. Und solang man sie nicht händisch aufklappt, kann man soviele Einzelschritte machen wie man will, es passiert nichts. - Bzw. stimmt nicht ganz, wenn man dann schon etliche dieser fehlgeschlagenen Einzelschritte durchgeführt hat, danach die Zeile ausklappt und wieder einen durchführt, bekommt man eine kopierte Zeile von viel weiter unten. Dh das Programm arbeitet grundsätzlich richtig aber das mit dem reinkopieren klappt leider nicht.
    Würde das File ja gerne hochladen, darf ich aber Datenschutzrechtlich leider nicht - sind sensible Daten.....
    Anzeige
    AW: Ganze Zelle kopieren wenn Text in Zeile
    06.01.2023 11:41:37
    Piet
    Hallo Lisa
    okay, Datenschutz muss sein. Ich habe meinen Code noch mal verbessert. So sollte er besser sein.
    Herzstück ist die Variabel TabTxt=Tabellen Liste, die zuerst alle vorhanden Tabellen auflistet.
    Mit Replace kannst du alle unerwünschten Tabellen die nicht zu kopieren/ löschen sind entfernen.
    Das ist wichtig für die nachfolgende Löschfunktion, die ja nicht alle Tabellen löschen soll!!
    Neu eingebaut habe ich die Funktion jede kopierte Zeile auf sichtbar zu setzen, und eine StatusBar Anzeige nach jeder 1000sten Kopie. Die Statuszeile kannst du auch löschen, falls nicht gewünscht.
    Würde mich freuen wenn der Code so besser klappt. Wie lange dauert es bei 100.000 Zeilen?
    mfg Piet
  • 
    Sub Abteilunen_kopieren()
    Dim TabTxt As String, i As Integer
    Dim AC As Range, n, lzX, lz1 As Long
    Application.ScreenUpdating = False
    'vorhandene Tabellen ermitteln
    For i = 1 To Worksheets.Count
    TabTxt = TabTxt & ", " & Worksheets(i).Name
    Next i
    'unerwünschte Tabellen löschen
    TabTxt = Replace(TabTxt, "diesen Namen löschen", "")
    TabTxt = Replace(TabTxt, "jenen Namen löschen", "")
    '** vorhandene Tabellen ab Zeile 2 löschen!!  (o. Überschrift)
    For i = 1 To Worksheets.Count
    If InStr(TabTxt, Worksheets(i).Name) Then
    Worksheets(i).Rows("2:" & Rows.Count).Delete
    Next i
    With Worksheets("Tabelle1")  'Name deiner Liste!!
    'LastCell in Tabelle mit Abteilungen
    lz1 = .Cells(Rows.Count, 3).End(xlUp).Row
    'Alle Daten in einzelne Tabellen kopieren
    For Each AC In .Range("C2:C" & lz1)
    '** Statusanzeige (kann gelöscht werden!!)
    If n >= 1000 Then
    Application.ScreenUpdating = True
    Application.StatusBar = n & "  Zeile"
    Application.ScreenUpdating = False
    n = n + 1000
    End If
    'Fehlende Tabellen zuerst erstellen
    If InStr(TabTxt, AC) = 0 Then
    Worksheets.Add after:=Worksheets(Sheets.Count)
    ActiveSheet.Name = Trim(AC)
    TabTxt = TabTxt & ", " & Trim(AC)
    End If
    'Daten in jede einzelne tabelle kopieren
    Sht = Trim(AC):  n = n + 1
    lzX = Worksheets(Sht).Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Rows(AC.Row).Copy
    Worksheets(Sht).Rows(lzX).PasteSpecial xlPasteAll
    Worksheets(Sht).Rows(lzX).EntireRow.Hidden = False
    Next AC
    End With
    End Sub
    

  • Anzeige
    AW: Ganze Zelle kopieren wenn Text in Zeile
    09.01.2023 09:07:08
    Lisa
    Hallo Piet,
    Der Code lässt sich nicht kompilieren, Excel schreibt "Next ohne For" und bezieht sich auf
    
    '** vorhandene Tabellen ab Zeile 2 löschen!!  (o. Überschrift)
    For i = 1 To Worksheets.Count
    If InStr(TabTxt, Worksheets(i).Name) Then
    Worksheets(i).Rows("2:" & Rows.Count).Delete
    Next i
    
    Klammern gibt es ja bei For in VBA nicht, und mit einrücken hab ich auch rumexperimentiert....
    Sorry, dass ich da so viele Probleme hab :o
    LG,
    Lisa
    AW: Ganze Zelle kopieren wenn Text in Zeile
    09.01.2023 10:08:42
    onur
    For i = 1 To Worksheets.Count
    If InStr(TabTxt, Worksheets(i).Name) Then
    Worksheets(i).Rows("2:" & Rows.Count).Delete
    End If
    Next i
    Anzeige
    AW: Ganze Zelle kopieren wenn Text in Zeile
    09.01.2023 10:18:48
    Lisa
    Oh Mann, da hätt ich selber auch draufkommen können - danke ;D
    Jetzt wirft Compiler noch einen Fehler: "Index außerhalb des gültigen Bereichs"
    
    lzX = Worksheets(sht).Cells(.Rows.Count, 1).End(xlUp).Row + 1
    
    Das wars dann hoffentlich... Danke nochmal!
    AW: Ganze Zelle kopieren wenn Text in Zeile
    09.01.2023 10:22:25
    onur
    bedeutet:
    Ein blatt mit Namen aus sht existiert nicht.
    AW: Ganze Zelle kopieren wenn Text in Zeile
    09.01.2023 12:33:36
    Piet
    Hallo Lisa
    Sorry, die dummen kleinen Flüchtigkeitsfehler! Lösche bitte mal den Punkt vor .Rows.Count,
    Wenn das ncht zutrifft setze bitte vor den Befehl mal Msgbox Sht und schaue dir den Sht Namen an.
    mfg Piet
    Anzeige
    AW: Ganze Zelle kopieren wenn Text in Zeile
    11.01.2023 09:54:00
    Lisa
    Hi Piet,
    habe jetzt etwas rumprobiert, komme aber auf keinen grünen Zweig. sht hat übrigens aus irgendeinem Grund immer den Wert "Abteilungsname", also die Überschrift...
    Hab mir jetzt einen ganz simplen und nicht besonders schlauen Code zusammengeschrieben:
    
    Sub Aufsplitten()
    ActiveWorkbook.Worksheets("Probe Quality Testing").Cells.ClearContents
    ActiveWorkbook.Worksheets("Probe Repair Endosono").Cells.ClearContents
    Dim c As Range
    Dim Source As Worksheet
    Dim Abt1 As Worksheet
    Dim Abt2 As Worksheet
    Set Source = ActiveWorkbook.Worksheets("Quelldaten")
    Set Abt1 = ActiveWorkbook.Worksheets("Abteilung 1")
    Set Abt2 = ActiveWorkbook.Worksheets("Abteilung 2")
    For Each c In Source.Range("C1:C" & Source.Cells(Rows.Count, 1).End(xlUp).Row)
    If c = "Abteilung 1" Then
    c.EntireRow.Copy
    Abt1.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
    ElseIf c = "Abteilung 2" Then
    c.EntireRow.Copy
    Abt2.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
    End If
    Next c
    Sheets("Quelldaten").Select
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Abteilung 1").Select
    Rows("1:1").Select
    ActiveSheet.Paste
    Sheets("Abteilung 2").Select
    Rows("1:1").Select
    ActiveSheet.Paste
    End Sub
    
    Bei etwas mehr als 11.000 Zeilen braucht das Ganze ca. 3 Minuten, das Programm erstellt zwar nicht die jeweiligen Tabellenblätter anhand der Abteilungsnamen, aber da sich in meinem Bsp. die Abteilungsnamen nie ändern reicht es, einfach einmal ein Blatt manuell zu erstellen.
    Anzeige

    301 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige