Bestimmten Bereich einer Zeile, mit gewissen Inhalt, in neues Tabellenblatt kopieren
#1
Hallo liebe Excelfreunde,
ich hab ein kleinen Beginnerproblem und wurde im Forum nicht fündig. Mit Youtube videos hab ich es leider nicht geschafft.

Und Zwar hab ich ein Tabellenblatt für das Jahr 2021.
In diesem Tabellenblatt hab ich nebeneinander (mit jeweils 5 Spalten) die einzelnen Monate aufgelistet.
Je Monat hab ich eine Spalte ("C,H,M...") mit bestimmten Rubriken (z.B. "E","W","S" usw.)
Jetzt möchte ich jeden Bereich (also die 5 Spalten des Monats) in dem z.b: in den spalten (c,h,m) ein "W" steht in ein neues Tabellenblatt (UmbauW25) kopieren, damit ich in diesem eine genauere unterteilung dann vornehmen kann.

Ich hab euch ein Excelsheet angefügt mit einem Beispiel und wie die lösung aussehen sollte.
Ich bin wirklich ein beginner mit makros und habs leider nicht geschafft dieses Problem selbst zu lösen

vielen Dank im Voraus
lg Senfgurkn


Angehängte Dateien
.xlsx   Finanzen Makro.xlsx (Größe: 21,71 KB / Downloads: 8)
Antworten Top
#2
Hola,
warum erfasst du nicht alle Daten untereinander im Blatt 2021? Dann hättest du überhaupt kein Problem.
Gruß,
steve1da
Antworten Top
#3
Hallo

für Office 365 versuch es mit diesem Code

in ein Normales Modul
Code:
Sub Umbau()
    Dim Sp As Integer, RNG As Range, LR As Long
    Dim TB1 As String, TB2 As Worksheet, LC As Integer
    Dim SW As String
   
    '****Eingaben
    TB1 = "2021"
    Set TB2 = Sheets("UmbauW25")
    Set RNG = TB2.Range("A9:E54")
    SW = "W"
    '*****
   
    'reset
    RNG.ClearContents
   
    LC = Sheets(TB1).Cells.SpecialCells(xlCellTypeLastCell).Column 'Letzte Spalte des gesamten Blattes
   
    For Sp = 1 To LC Step 5
        With RNG
            LR = RNG.Cells(RNG.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
           
            TB2.Cells(LR + 1, 1).Formula2R1C1 = "=FILTER('" & TB1 & "'!C" & Sp & ":C" & Sp + 4 & ",'" & TB1 & "'!C" & Sp + 2 & " =""" & SW & """,0)"

        End With
    Next
    RNG.Value = RNG.Value
End Sub

LG UweD
[-] Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:
  • Senfgurkn
Antworten Top
#4
ja das denke ich mir jetzt auch.
nur führe ich meine Tabelle schon seit 2016. dh es gibt 6 arbeitsblätteer mit jeweisl 12 spaltenteilen.
die sind auch teilweise miteinander verknüpft und mit diversen funktionen verbunden. das kann ich jetzt so schnell nicht umändern =)

lg

Hallo UweD.
VIELEN DANK!

ich hab ein paar kleine Änderungen gemachen aber jetzt funktioniert es in meinen Hauptformular auch super.
Danke vielmals! =)

einen kleinen fehler hab ich noch nicht weg gebracht, und zwar kommen am Beginn und dazwischen immer einige leere Zellen. weißt du vielleicht woran das liegen könnte?
(siehe screenshot)

lg


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#5
Hallo

Dann lade mal eine Datei hoch, wo das Problem auftritt.

LG UweD
Antworten Top
#6
Entschuldige meine späte Rückmeldung.
Danke für die Hilfe beim Lösen meines Problems.

Lg Senfgurkn


Angehängte Dateien
.xlsm   Problem-Forum-Makro.xlsm (Größe: 66,18 KB / Downloads: 2)
Antworten Top
#7
Hi,

zunächst einmal vorweg: ein Umbau der Datei würde sich lohnen. Zumindest solltest du ab sofort neue Daten in einer vernünftigen Struktur erfassen. Damit werden Auswertungen dann wesentlich einfacher und du kommst vermutlich ohne VBA aus.

Nun zu deinem letzten Problem: du schreibst per VBA folgende Formel in A9: =FILTER('2022'!$A:$E;'2022'!$C:$C ="W25";0) Und da "W25" in Spalte C nicht vorkommt, wird - wie von der Formel vorgegeben - 0 in der Zelle ausgegeben. Durch das eingestellte Zahlenformat wird dies als 12:00:00 AM angezeigt. Was kann man nun machen? Ganz einfach! Die 0 wieder löschen. Allerdings bekommst du dann ein Problem, falls einmal kein Datum im ersten Eintrag der KW gemacht wurde. Daher: Lass in der Formel die 0 hinten dran weg. Damit wird dir dann statt der 0 ein Fehler in der Zelle angezeigt. Das kannst du wiederum in VBA checken und den Zellinhalt dann löschen.
Code:
    For Sp = 1 To LC Step 5
        With RNG
            LR = RNG.Cells(RNG.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
           
            TB2.Cells(LR + 1, 1).Formula2R1C1 = "=FILTER('" & TB1 & "'!C" & Sp & ":C" & Sp + 4 & ",'" & TB1 & "'!C" & Sp + 2 & " =""" & SW & """)"
            If IsError(TB2.Cells(LR + 1, 1)) Then TB2.Cells(LR + 1, 1).ClearContents

        End With
    Next
Wieso definierst du eigentlich einen With-Block ohne ihn wirklich zu benutzen?

Ich würde das Ganze so schreiben würde:
Code:
    For Sp = 1 To LC Step 5
        With RNG.Cells(RNG.Rows.Count, "A").End(xlUp).Offset(1) 'erste freie Zeile der Spalte
            .Formula2R1C1 = "=FILTER('" & TB1 & "'!C" & Sp & ":C" & Sp + 4 & ",'" & TB1 & "'!C" & Sp + 2 & " =""" & SW & """)"
            If IsError(.Value) Then .ClearContents
        End With
    Next
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • Senfgurkn
Antworten Top
#8
Hallo Helmut, vielen Dank für deine Hilfe.

Ich möchte schon seit längerem die Tabelle umbauen, jedoch fehlt mir dafür gerade die Zeit.
Dein Code funktioniert super, vielen Dank.
Zu deinen Fragen am Code kann ich leider nichts sagen, da ich mich mit VB leider garnicht auskenne und den code nur von UweD kopiert habe. tut mir leid.


Wenn ich jetzt in das selbe Tabellenblatt "Umbau W25" nicht nur die daten aus 2022 kopieren möchte, sondern z.B. auch von 2021 brauch ich den text nur kopieren und als TB1 bzw. TB2 "2021" eintragen oder?

lg felix
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste