Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1228to1232
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

VBA Kopie Daten in anderes Tabellenblatt

VBA Kopie Daten in anderes Tabellenblatt
Ronald
Hallo,
kann mir bitte jemand bei folgendem Problem helfen?
Ich hab ein Tabellenblatt "Eingabe", dort erfasse ich Daten. (Datum, Name, Betrag, Text, E/A, Kostenstelle, Anmerkung)
Ich brauche nun die Daten aus Datum, Name, Betrag, E/A, Kostenstelle im Tabellenblatt "Auswertung A".
Nun möchte ich nicht in "Auswertung A" immer die Formeln anpassen müssen und ich will die Daten auch weiter verarbeiten und brauche deshalb auch Werte und keine Formeln in "Auswertung A".
Mit einem Makro müsste das doch zu realisieren sein.
Gruß
Ronald
https://www.herber.de/bbs/user/76616.xlsx

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Kopie Daten in anderes Tabellenblatt
15.09.2011 00:47:38
fcs
Hallo Ronald,
ein entsprechendes Makro zur Übertragung der Eingabedaten schaut so aus.
Falls es notwendig ist, dass auch Änderungen an bereits übertragenen Datenzeilen in die Auswertung übertragen werden müssen, dann wird es wesentlich komplizierter. Dann muss jede Datenzeile zusätzlich mit einer ID-Nummer versehen werden.
Gruß
Franz

Sub DatenNachAuswertung()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim lngZeileQ As Long, lngSpalteQ As Long
Dim lngZeileZ As Long, lngSpalteZ As Long
Const varMarker As Variant = "x"    'Markierung für bereits übertragene Zeilen
Const lngSpalteQ_Marker As Long = 8 'Spalte für Markierung
Set wksQuelle = Worksheets("Eingabe")
Set wksZiel = Worksheets("Auswertung A")
With wksQuelle
For lngZeileQ = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(lngZeileQ, lngSpalteQ_Marker).Value  varMarker Then
With wksZiel
lngZeileZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
For lngSpalteQ = 1 To 7
Select Case lngSpalteQ
Case 1 To 3: lngSpalteZ = lngSpalteQ
Case 5, 6: lngSpalteZ = lngSpalteQ - 1
Case Else: lngSpalteZ = 0
End Select
If lngSpalteZ > 0 Then
.Cells(lngZeileZ, lngSpalteZ).Value = wksQuelle.Cells(lngZeileQ, lngSpalteQ). _
Value
End If
Next
End With
.Cells(lngZeileQ, lngSpalteQ_Marker).Value = varMarker
End If
Next
End With
End Sub

Anzeige
AW: VBA Kopie Daten in anderes Tabellenblatt
15.09.2011 09:54:10
Ronald
Super, danke Franz!
Ich habe so keine Ahnung von VBA, wollte den Code trotzdem mal versuchen zu verstehen. Aus diesem Grund habe ich mal versucht jede Zeile zu dokumentieren, bin aber jetzt stecken geblieben. Wahrscheinlich habe ich schon Teile falsch interpretiert. Kann mir jemand weiterhelfen?

Sub DatenNachAuswertung()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim lngZeileQ As Long, lngSpalteQ As Long
Dim lngZeileZ As Long, lngSpalteZ As Long
Const varMarker As Variant = "x"    'Markierung für bereits übertragene Zeilen
Const lngSpalteQ_Marker As Long = 8 'Spalte für Markierung
Set wksQuelle = Worksheets("Eingabe")
Set wksZiel = Worksheets("Auswertung A")
With wksQuelle
For lngZeileQ = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row '.Cells(.Rows.Count, 1).End(xlUp). _
Row sucht die letzte Zeile - was macht "2 To"?
If .Cells(lngZeileQ, lngSpalteQ_Marker).Value  varMarker Then 'wenn in der Zelle ( _
letzteZeile, SpalteMarker) der Wert ungleich der Variable Marker ist dann
With wksZiel 'gehe in wksZiel (gleich Tabellenblatt "Auswertung A")
lngZeileZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'suche die letzte Zeile und gehe  _
dann eins tiefer
For lngSpalteQ = 1 To 7 'Schleife beginnt, und IngSpalteQ wird Spalte1 bis Spalte7  _
zugeordnet - welches Tabellenblatt?
Select Case lngSpalteQ 'Case gilt für IngSpalteQ, also Spalte1 bis Spalte7
Case 1 To 3: lngSpalteZ = lngSpalteQ 'Spalte 1 bis 3:
Case 5, 6: lngSpalteZ = lngSpalteQ - 1
Case Else: lngSpalteZ = 0
End Select
If lngSpalteZ > 0 Then
.Cells(lngZeileZ, lngSpalteZ).Value = wksQuelle.Cells(lngZeileQ, lngSpalteQ). _
Value
End If
Next
End With
.Cells(lngZeileQ, lngSpalteQ_Marker).Value = varMarker
End If
Next
End With
End Sub
Gruß
Ronald
Anzeige
AW: VBA Kopie Daten in anderes Tabellenblatt
15.09.2011 10:15:36
Ronald
Super, danke Franz!
Ich habe so keine Ahnung von VBA, wollte den Code trotzdem mal versuchen zu verstehen. Aus diesem Grund habe ich mal versucht jede Zeile zu dokumentieren, bin aber jetzt stecken geblieben. Wahrscheinlich habe ich schon Teile falsch interpretiert. Kann mir jemand weiterhelfen?

Sub DatenNachAuswertung()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim lngZeileQ As Long, lngSpalteQ As Long
Dim lngZeileZ As Long, lngSpalteZ As Long
Const varMarker As Variant = "x"    'Markierung für bereits übertragene Zeilen
Const lngSpalteQ_Marker As Long = 8 'Spalte für Markierung
Set wksQuelle = Worksheets("Eingabe")
Set wksZiel = Worksheets("Auswertung A")
With wksQuelle
For lngZeileQ = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row '.Cells(.Rows.Count, 1).End(xlUp). _
Row sucht die letzte Zeile - was macht "2 To"?
If .Cells(lngZeileQ, lngSpalteQ_Marker).Value  varMarker Then 'wenn in der Zelle ( _
letzteZeile, SpalteMarker) der Wert ungleich der Variable Marker ist dann
With wksZiel 'gehe in wksZiel (gleich Tabellenblatt "Auswertung A")
lngZeileZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'suche die letzte Zeile und gehe  _
dann eins tiefer
For lngSpalteQ = 1 To 7 'Schleife beginnt, und IngSpalteQ wird Spalte1 bis Spalte7  _
zugeordnet - welches Tabellenblatt?
Select Case lngSpalteQ 'Case gilt für IngSpalteQ, also Spalte1 bis Spalte7
Case 1 To 3: lngSpalteZ = lngSpalteQ 'Spalte 1 bis 3:
Case 5, 6: lngSpalteZ = lngSpalteQ - 1
Case Else: lngSpalteZ = 0
End Select
If lngSpalteZ > 0 Then
.Cells(lngZeileZ, lngSpalteZ).Value = wksQuelle.Cells(lngZeileQ, lngSpalteQ). _
Value
End If
Next
End With
.Cells(lngZeileQ, lngSpalteQ_Marker).Value = varMarker
End If
Next
End With
End Sub
Gruß
Ronald
Anzeige
AW: Prozedur mit Erläuterungen
15.09.2011 12:28:11
fcs
Hallo Roland,
hier meine Prozedur mit ein paar zusätzlichen Erläuterungen.
VBA hat übrigens auch eine Hilfefunktion. Cursor auf ein Schlüsselwort oder eine Eigenschaft/Methode setzen, dann F1-Taste.
Frage: welches Tabellenblatt?
Ich hab die Variablennamen so festgelegt, dass sich Variablen mit "Q" auf die Quelle (hier Blatt "Eingabe") und Variablen mit "Z" auf das Zielblatt (hier "Auswertung A") beziehen.
Letztendlich wird der Bezug aber immer erst in der Methode/Eigenschaft hergestellt in der die Variable verwendet wird.
Gruß
Franz

Sub DatenNachAuswertung()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim lngZeileQ As Long, lngSpalteQ As Long
Dim lngZeileZ As Long, lngSpalteZ As Long
Const varMarker As Variant = "x"    'Markierung für bereits übertragene Zeilen
Const lngSpalteQ_Marker As Long = 8 'Spalte für Markierung
'Objekt-Variablen die Tabellenblätter zuweisen
Set wksQuelle = Worksheets("Eingabe")
Set wksZiel = Worksheets("Auswertung A")
With wksQuelle
'In einer For-Next-Schleife alle Zellen in der Quelle abarbeiten beginnend in Zeile 2 _
bis zur letzten Zeile mit Daten in Spalte A (1)
'Syntax für For ... Next - Schleife - siehe VBA-Hilfe: Cursor auf For setzen, dann Taste F1
'To ist ein VBA-Schlüsselwort, das in Verbindung mit verschiedenen Funktionen und _
Methoden verwendet wird
For lngZeileQ = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
'Prüfen, ob in der Markierungs-Spalte lngSpalteQ_Marker der Wert ungleich Markierung ist
If .Cells(lngZeileQ, lngSpalteQ_Marker).Value  varMarker Then
With wksZiel
'nächste freie Zeile in Spalte A (1) in der Zieltabelle emitteln
lngZeileZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Spalten in der Quelle abarbeiten
For lngSpalteQ = 1 To 7
'Spalten-Nr in der Quelle vergleichen und die zugehörige Spalte in der _
Zieltabelle festlegen
Select Case lngSpalteQ
Case 1 To 3: lngSpalteZ = lngSpalteQ
Case 5, 6: lngSpalteZ = lngSpalteQ - 1
Case Else: lngSpalteZ = 0
End Select
'Wert aus Quelle in der Zieltabelle eintragen, wenn eine Ziel-Spaltennummer _
größer 0 festgelegt wurde
If lngSpalteZ > 0 Then
.Cells(lngZeileZ, lngSpalteZ).Value = wksQuelle.Cells(lngZeileQ, _
lngSpalteQ).Value
End If
Next
End With
'Markierung in der Quelltabelle eintragen
.Cells(lngZeileQ, lngSpalteQ_Marker).Value = varMarker
End If
Next
End With
End Sub

Anzeige
AW: Prozedur mit Erläuterungen
15.09.2011 13:01:29
Ronald
Hallo Franz,
ich danke Dir für die guter Erläuterung.
Gruß
Ronald
AW: Prozedur mit Erläuterungen
15.09.2011 13:27:54
Ronald
Jetzt hab ich doch noch eine Frage dazu, die betrifft folgende Stelle:

            'Wert aus Quelle in der Zieltabelle eintragen, wenn eine Ziel-Spaltennummer _
größer 0 festgelegt wurde
If lngSpalteZ > 0 Then
.Cells(lngZeileZ, lngSpalteZ).Value = wksQuelle.Cells(lngZeileQ, _
lngSpalteQ).Value

Die Zielspaltennummern, wurden die durch Case 1 To 3 usw. festgelegt? Oder was genau ist damit gemeint? Ich habe mal > 0 in > 3 geändert, das Ergebnis erschließt sich mir dann noch nicht.
Gruß
Ronald
Anzeige
AW: Prozedur mit Erläuterungen
15.09.2011 14:18:33
fcs
Hallo Ronald,
du bist gedanklich fast angekommen.

            'Spalten-Nr in der Quelle vergleichen und die zugehörige Spalte in der _
Zieltabelle festlegen
Select Case lngSpalteQ
Case 1 To 3: lngSpalteZ = lngSpalteQ
Case 5, 6: lngSpalteZ = lngSpalteQ - 1
Case Else: lngSpalteZ = 0
End Select

Ist dir nicht aufgefallen, dass die Spalten 4 und 7 (das sind die Spalten, die nicht in die Auswertung übertragen werden sollen) in den Case-Prüfungen nicht vorkommen?
Für diese Spalten gilt dann der "Case Else"-Fall, d.h. für diese Spalten wird die Zielspalte lngSpalteZ auf den Wert 0 gesetzt.
Die Zeile

If lngSpalteZ > 0 Then

Sorgt dann dafür , dass auch nur die gewünschten Spalten ins Ziel übertragen werden.
Ich hab diese Konstruktion so gewählt, weill für
"Case 1 bis 3" und "Case 5,6" die gleiche Anweisung für das Übertragen der Werte gilt.
Man hätte die Zeile

              .Cells(lngZeileZ, lngSpalteZ).Value = wksQuelle.Cells(lngZeileQ, _
lngSpalteQ).Value
auch jeweils unter den Case-Anweisungen einfügen können. Ich wollte aber nicht die gleichen Anweisungen mehrfach einbauen.
Das Konzept stammt aus einer Datei mit über 30 Spalten von denen ca. 20 ausgelesen werden sollen mit 10 oder mehr Case-Zeilen und mehr als 10 Zeilen Code für das Übertragen der Daten.
Gruß
Franz
Anzeige
AW: Prozedur mit Erläuterungen
15.09.2011 14:36:08
Ronald
Oh mein Gott, jaaaa - ein dickes Brett vor dem Kopf.
Nochmal vielen Dank, Franz.
Gruß
Ronald

337 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige