AW: Makro zum Kopieren von Datensätzen
02.01.2018 16:37:23
Datensätzen
Hallo Gregor,
nachfolgend ein Makro mit dem du die Daten übertragen kannst. Kopiert wird jeweils die letzte Zeile mit eintrag im Blatt.
Du solltest aber den Ratschlag von Ralf annehmen und die Tabellen einheitlich aufbauen.
Spalten die du für die Eingabe bei einzenen Kategorien nicht benötigst kannst du ja ausblenden.
Das vereinfacht dann auch das Makro, da das Kopieren identisch für alle Blätter sein kann.
Gruß
Franz
Sub CopyZeile_to_Gesamtkosten()
Dim wksQ As Worksheet
Dim wksZ As Worksheet
Dim ZeiQ As Long, SpaQ As Long
Dim ZeiZ As Long, SpaZ As Long
Set wksZ = ActiveWorkbook.Worksheets("Gesamtkosten")
Set wksQ = ActiveSheet
If wksZ.Name = wksQ.Name Then Exit Sub
With wksQ
'Spalte festlegen in der letzte Zeile mit Eingabewert ermittelt werden soll
SpaQ = 0
Select Case wksQ.Name
Case "Büro": SpaQ = 1
Case "Haushalt": SpaQ = 2
Case "Freizeit": SpaQ = 2
Case Else
MsgBox "Für Blatt """ & wksQ.Name & """ wurde noch kein Case " _
& "zum ermitteln der letzten Datenzeile im Makro eingerichtet"
Exit Sub
End Select
'letzte Datenzeile ermitteln
ZeiQ = .Cells(.Rows.Count, SpaQ).End(xlUp).Row
End With
With wksZ
'nächste freie Zeile in Spalte B (Datum) von Gesamtkosten
ZeiZ = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
'Blattname in Spalte A eintragen
.Cells(ZeiZ, 1) = wksQ.Name
For SpaQ = 1 To 10
Select Case wksQ.Name
Case "Büro"
Select Case SpaQ
Case 1: SpaZ = 2 'Datum
Case 2: SpaZ = 3 'Posten
Case 3: SpaZ = 4 'Anzahl
Case 4: SpaZ = 5 'Einzelpreis
Case 5: SpaZ = 6 'MwSt
Case 6: SpaZ = 7 'Gesamtpreis
Case Else
SpaZ = 0
End Select
Case "Haushalt"
Select Case SpaQ
Case 2: SpaZ = 2 'Datum
Case 3: SpaZ = 3 'Posten
Case 4: SpaZ = 5 'Einzelpreis
Case 5: SpaZ = 7 'Gesamtpreis
Case Else
SpaZ = 0
End Select
Case "Freizeit"
Select Case SpaQ
Case 2: SpaZ = 2 'Datum
Case 3: SpaZ = 3 'Posten
Case 4: SpaZ = 4 'Anzahl
Case 5: SpaZ = 5 'Einzelpreis
Case 6: SpaZ = 7 'Gesamtpreis
Case Else
SpaZ = 0
End Select
Case Else
.Cells(ZeiZ, 1).ClearContents
MsgBox "Für Blatt """ & wksQ.Name & _
""" wurde noch kein Case zum Kopieren im Makro eingerictet"
Exit For
End Select
If SpaZ 0 Then
.Cells(ZeiZ, SpaZ).Value = wksQ.Cells(ZeiQ, SpaQ).Value
End If
Next
End With
End Sub
Makro, wenn Blätter einheitlich wie Blatt "Büro" aufgebaut werden
Sub CopyZeile_to_Gesamtkosten()
Dim wksQ As Worksheet
Dim wksZ As Worksheet
Dim ZeiQ As Long, SpaQ As Long
Dim ZeiZ As Long, SpaZ As Long
Set wksZ = ActiveWorkbook.Worksheets("Gesamtkosten")
Set wksQ = ActiveSheet
If wksZ.Name = wksQ.Name Then Exit Sub
With wksQ
'Spalte festlegen in der letzte Zeile mit Eingabewert ermittelt werden soll
'letzte Datenzeile in Spalte A ermitteln
ZeiQ = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
With wksZ
'nächste freie Zeile in Spalte B (Datum) von Gesamtkosten
ZeiZ = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
'Blattname in Spalte A eintragen
.Cells(ZeiZ, 1) = wksQ.Name
For SpaQ = 1 To 6
SpaZ = SpaQ + 1
.Cells(ZeiZ, SpaZ).Value = wksQ.Cells(ZeiQ, SpaQ).Value
Next
End With
End Sub