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

Zellen variabel kopieren

Zellen variabel kopieren
25.11.2021 17:59:29
Martin_
Hallo Excel Freunde,
ich möchte aus einem Arbeitsblatt (Eingabe) die Werte aus SpalteB kopieren und in einem zweiten Arbeitsblatt (gespeicherte Daten) in einer über eine Variable gesteuerten Zeile einfügen.
Das Problem ist das es in der SpalteB leere Zellen zwischendrin gibt und im Arbeitsblatt2 in der Zeile soll das nicht vorkommen. Bei diesen leeren Zellen soll nichts passieren.
Der zu kopierenden SpalteB ist eine SpalteA mit Benennungen vorgesetzt die auch in Arbeitsblatt2 vorhanden ist, jedoch dort als 1. Zeile.
Ich habe in eine For Schleife die über der Benennungsspalte im Arbeitsblatt1 läuft geschrieben. Wenn in einer Zelle ein Wert steht überträgt er den Parameter der nächsten Spalte (gleicher Zeile) in eine Variable.
Soweit so gut!
Beim Einfügen dieser Variablen in das Arbeitsblatt2 komme ich nicht weiter. Nachdem eine leere Zelle in Arbeitsblatt1 durchlaufen ist werden alle weiteren Werte nicht mehr in die richtige Zelle kopiert.
Meine Datei: https://www.herber.de/bbs/user/149400.xlsm.

Über Hilfestellungen würde ich mich sehr freuen.

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

Betreff
Datum
Anwender
Anzeige
AW: Zellen variabel kopieren
25.11.2021 18:48:31
Yal
Hallo Martin,
sammeln und ablegen. Am einfachste, weil ja die Überschrift in beide Tabelle genau übereinstimmen, geht es über einen Sammler, den man par Schlüssel abfragen kann. Davon gibt es 2 Typen: Collection und Dictionary. Ich habe Dictionary gewählt.

Sub Daten_kopieren()
Dim Dict
Dim Z
Dim ZielZeile As Integer
'für Dictionary, siehe https://excelmacromastery.com/vba-dictionary/
Set Dict = CreateObject("Scripting.Dictionary")
'alle Überschriften und Wert in Quelle sammeln
With Worksheets("Eingabe")
For Each Z In .Range(.Range("A1"), .Range("A999").End(xlUp)).Cells
If Z.Offset(0, 1)  "" Then Dict.Add Z.Value, Z.Offset(0, 1).Value
Next
End With
ZielZeile = ThisWorkbook.Worksheets("Eingabe").Cells(1, 7).Value
'mit dem Ziel-Überschrift als Schlüssel, Wert aus der Sammlung holen und ablegen
With Worksheets("gespeicherte Daten")
For Each Z In .Range("B1:G1").Cells
If Dict.exists(Z.Value) Then .Cells(ZielZeile, Z.Column) = Dict(Z.Value)
Next
End With
Set Dict = Nothing
End Sub
Unter https://excelmacromastery.com/vba-dictionary/ bekommst Du eine gute Einführung in den Dictionary.
Wenn Du viel mit Objekte aus externen Bibliothek programmierst, ist early binding vielleicht besser (Extras, Verweise.., "Microsoft Scripting Runtime" anhacken)
VG
Yal
Anzeige
AW: Zellen variabel kopieren
25.11.2021 19:50:51
ralf_b
Ich hab auch noch eine Variante für dich. Hier wird das Object der intelligenten Tabelle genutzt. Voraussetzung ist das ID gleich der Zeilennummer im Ziel ist.

Sub Daten_kopieren3()
Dim ID As Double
Dim ParamE As Variant
Dim varResult
Dim n As Integer
Dim i As Long
ID = ThisWorkbook.Worksheets("Eingabe").Cells(1, 7).Value
For n = 2 To 20
ParamE = Worksheets("Eingabe").Cells(n, 1).Value
If ParamE  "" Then
With Worksheets("gespeicherte Daten").ListObjects(1)
varResult = Application.WorksheetFunction.Match(ParamE, .HeaderRowRange, 0)
If IsNumeric(varResult) Then
.ListRows(ID).Range.Cells(1, varResult).Value = Worksheets("Eingabe").Cells(n, 2).Value
End If
End With
End If
Next n
End Sub

Anzeige
AW: Zellen variabel kopieren
28.11.2021 18:06:16
Martin_
Hallo Yal und Hallo Ralf,
vielen Dank für die Hilfestellungen. Ich habe am Wochenende mit beiden Varianten herumgespielt und beide führen eindeutig zur Lösung meines Problems.
Ergänzend dazu habe ich noch eine Frage:
Wenn ich eine zusätzliche Zeile im ersten Arbeitsblatt einfüge wird diese jedoch durch fehlende Zielzelle nicht im zweiten Arbeitsblatt abgelegt.
Die Dictionary Variante macht in diesem Fall nichts. Der Wert wird zwar in das Dictionary mit aufgenommen aber nicht ausgegeben.
Die Match Variante gibt mir einen dafür typischen Fehler aus.
Habt ihr eine Idee wie man die Zieltabelle mit der Benennung und dem Wert der hinzugefügten Zeile erweitern kann?
Vielen Dank
Grüße Martin
Anzeige
AW: Zellen variabel kopieren
28.11.2021 19:02:32
ralf_b
ich habe deine Anliegen so verstanden das die Quell- und Zieltabellen aufeinander abgestimmt sind. Was hindert dich denn daran wenn du in der Quelle etwas hinzufügst, das auch im Ziel zu tun?
AW: Zellen variabel kopieren
28.11.2021 20:00:18
Yal
Hallo Martin,
Geliefert wird bestellt :-)
Wenn Du eine Spalte mehr im Zielbereich hast, dann ist diese Zielbereich nicht mehr B1:G1 sondern B1:H1. Die Überschriften müssen in der Quelle und das Ziel stimmen.
Das Coding anpassen wirst Du sicher hinbekommen.
VG
Yal
AW: Zellen variabel kopieren
28.11.2021 20:48:59
Martin_
Hallo Yal und Hallo Ralf,
ihr habt mein Anliegen auch vollends korrekt gelöst. Es tut mir Leid falls ich einen anderen Eindruck hinterlassen habe.
Die Quell- und Zieltabellen sind tatsächlich aufeinander abgestimmt.
Das war nur eine Zusatzfrage. Sie ist rein theoretisch. Ich versuche mich von Aufgabe zu Aufgabe zu verbessern da dachte ich falls ich mich in Zukunft mit einer komplexeren Aufgabe dieser Art beschäftige wäre das hilfreich.
Vielen Dank nochmal und ein schönes Restwochenende.
Grüße Martin
Anzeige
AW: Zellen variabel kopieren
28.11.2021 21:54:59
ralf_b
schon gut. Wenn man deinen Gedankengang nun weiterdenkt, solltest du auch berücksichtigen das vielleicht auch Spalten mal wegfallen. Sonst bläht sich deine Zieltabelle immer weiter auf. Das mußt du schon beim Programm zu Beginn berücksichtigen, sonst fängst du immer wieder von vorne an.

Sub Daten_kopieren3()
Dim ID As Double
Dim ParamE As Variant
Dim varResult
Dim n As Integer
Dim i As Long
Dim myNewColumn As ListColumn
ID = ThisWorkbook.Worksheets("Eingabe").Cells(1, 7).Value
For n = 2 To 20
ParamE = Worksheets("Eingabe").Cells(n, 1).Value
If ParamE  "" Then
With Worksheets("gespeicherte Daten").ListObjects(1)
Do
i = i + 1
varResult = Application.Match(ParamE, .HeaderRowRange, 0)
If IsNumeric(varResult) Then
.ListRows(ID).Range.Cells(1, varResult).Value = Worksheets("Eingabe").Cells(n, 2).Value
i = 2
Else
Set myNewColumn = .ListColumns.Add
myNewColumn.Name = ParamE
Set myNewColumn = Nothing
End If
Loop Until i = 2
End With
End If
Next n
End Sub

Anzeige
AW: Zellen variabel kopieren
29.11.2021 11:12:38
Yal
Hallo zusammen,
wenn Ralf eine angepasste Version liefert, möchte nicht hinterher sein ;-)
Anbei eine leicht geänderte Variante meiner Zuordnung über Dictionary.
Nur der Umfang des zweiten For muss einmalig angepasst werden.
Es wird angenommen, dass der Überschrift im Zieltabelle ab B1 anfängt, mindestens 2 Überschriften hat (also mind. C1 befüllt) und dass nach dem letzten Überschrift eine leere Zelle liegt (z.B.) in J1. Dann kann man mit .End(XlToLeft) ab B1 arbeiten, um allen Überschriften, heute, morgen, übermorgen abzugfangen.

Sub Daten_kopieren()
Dim Dict
Dim Z
Dim ZielZeile As Integer
'für Dictionary, siehe https://excelmacromastery.com/vba-dictionary/
Set Dict = CreateObject("Scripting.Dictionary")
'alle Überschriften und Wert in Quelle sammeln
With Worksheets("Eingabe")
For Each Z In .Range(.Range("A1"), .Range("A9999").End(xlUp)).Cells
If Z.Offset(0, 1)  "" Then Dict.Add Z.Value, Z.Offset(0, 1).Value
Next
End With
ZielZeile = ThisWorkbook.Worksheets("Eingabe").Cells(1, 7).Value
'mit dem Ziel-Überschrift als Schlüssel, Wert aus der Sammlung holen und ablegen
With Worksheets("gespeicherte Daten")
For Each Z In .Range(.Range("B1"), .Range("B1").End(xlToRight)).Cells
If Dict.exists(Z.Value) Then .Cells(ZielZeile, Z.Column) = Dict(Z.Value)
Next
End With
Set Dict = Nothing
End Sub
Erratum:
in meinem letzten Post war "Geliefert wie bestellt" zu lesen. Der Smartphone -doch nicht so smart- korrigiert eigenwillig.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige