Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1080to1084
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

Spalten kopieren

Spalten kopieren
14.06.2009 17:00:54
edie
Hallo zusammen,
im nachfolgenden Code werden Daten aus der Tabelle "Source" nach "Target" ab der Spalte C übertragen, wobei die Spalten können auch Lücken haben.
Leider dürfen resp. können die leeren Spalten in "Target" nicht gelöscht werden. Zum Beispiel,
wenn man erst den ganze Bereich kopieren würde und zum Schluss die leeren Spalten löscht.
In Abhängigkeit des Inhaltes der Zeile 1 in "Source" sollen die nächst leere Spalte in "Target" gefüllt werden.
Für die Spalte C funktioniert das:

Sub Spalte_C() 'C
Dim wksS As Worksheet
Dim wksT As Worksheet
Dim iRow As Integer, iRowL As Integer
Dim iCol As Integer
Set wksS = Worksheets("Source")
Set wksT = Worksheets("Target")
iRowL = wksS.Cells(Rows.Count, 1).End(xlUp).Row
iCol = 1
For iRow = 1 To iRowL
If Not IsEmpty(wksS.Cells(1, iCol + 2)) Then
Range(wksT.Cells(iRow, iCol + 2), wksT.Cells(iRow, iCol + 2)).Value = _
Range(wksS.Cells(iRow, iCol + 2), wksS.Cells(iRow, iCol + 2)).Value
End If
Next iRow
End Sub


Für die Spalte D wie Folgt:


Sub Spalte_D() 'D
Dim wksS As Worksheet
Dim wksT As Worksheet
Dim iRow As Integer, iRowL As Integer
Dim iCol As Integer
Set wksS = Worksheets("Source")
Set wksT = Worksheets("Target")
iRowL = wksS.Cells(Rows.Count, 1).End(xlUp).Row
iCol = 1
For iRow = 1 To iRowL
If Not IsEmpty(wksS.Cells(1, iCol + 3)) Then
If IsEmpty(wksT.Cells(iRow, iCol + 2)) Then
Range(wksT.Cells(iRow, iCol + 2), wksT.Cells(iRow, iCol + 2)).Value = _
Range(wksS.Cells(iRow, iCol + 3), wksS.Cells(iRow, iCol + 3)).Value
ElseIf Not IsEmpty(wksT.Cells(iRow, iCol + 2)) Then
Range(wksT.Cells(iRow, iCol + 3), wksT.Cells(iRow, iCol + 3)).Value = _
Range(wksS.Cells(iRow, iCol + 3), wksS.Cells(iRow, iCol + 3)).Value
End If
End If
Next iRow
End Sub


Habe noch mindestens 10 weitere Spalten, und so langsam wird es kompliziert.
Gibt es einen anderen Weg bzw. Beispiel-Code den man anpassen könnte?
Vorab vielen Dank.
Grüße

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten kopieren
15.06.2009 12:09:32
fcs
Hallo edie,
eine Subroutine, die jeweils die Inhalte der Zeilen der vorgegebene Spalte aus der Source-Tabelle in die jeweils nächste frei Spalte in der Zeile der Target-Tabelle überträgt, reduziert den Code für die einzelnen Spalten.
Gruß
Franz

Sub Spalte_C() 'C (3)
Call CopySpalte(Spalte_S:=3, wksS:=Worksheets("Source"), _
wksT:=Worksheets("Target"), Spalte_T_min:=3)
End Sub
Sub Spalte_D() 'D (4)
Call CopySpalte(Spalte_S:=4, wksS:=Worksheets("Source"), _
wksT:=Worksheets("Target"), Spalte_T_min:=3)
End Sub
Sub CopySpalte(Spalte_S As Long, wksS As Worksheet, wksT As Worksheet, _
Optional Spalte_T_min = 1)
'Spalte_S = Nummer der Spalte im Source-Blatt, die kopiert werden soll
'wksS = Source-Tabellenblatt
'wksT = Target-Tabellenblatt
'Spalte_T_min = Nr. der Spalte ab der Werte im Target-Blatt eingetragen werden sollen
Dim iRow As Long, iRowL As Long
Dim iCol As Long
iRowL = wksS.Cells(wksS.Rows.Count, 1).End(xlUp).Row
For iRow = 1 To iRowL
With wksT
'letzte ausgefüllte Spalte in Zeile ermitteln
iCol = .Cells(iRow, .Columns.Count).End(xlToLeft).Column
'auszufüllende Spalte festlegen
If iCol 


Anzeige
AW: Spalten kopieren
15.06.2009 16:42:24
edie
Hallo fcs,
vielen herzlichen Dank, es funktioniert prima, bin immer wieder positiv überrascht.
Noch mal vielen Dank und Grüße.
Nachgefragt
15.06.2009 17:01:15
edie
Hallo fcs,
Hallo zusammen,
wenn die Daten eine Spalte nicht durchgehend sind (Lücken aufweisen), dann werden
die Daten der Nächsten Spalte in die Lücke kopiert. Könnte man das beheben? Und wie?
Vielen Dank für die Mühe im Voraus.
Grüße
AW: Nachgefragt
16.06.2009 13:59:51
fcs
Hallo edie
mit den folgenden Anpassungen/Ergänzungen werden die Daten jeweils in die nächste frie Spalte übertragen.
Gruß
Franz

Sub Spalte_C() 'C (3)
Call CopySpalte(Spalte_S:=3, wksS:=Worksheets("Source"), _
wksT:=Worksheets("Target"), Spalte_T_min:=3)
End Sub
Sub Spalte_D() 'D (4)
Call CopySpalte(Spalte_S:=4, wksS:=Worksheets("Source"), _
wksT:=Worksheets("Target"), Spalte_T_min:=3)
End Sub
Sub CopySpalte(Spalte_S As Long, wksS As Worksheet, wksT As Worksheet, _
Optional Spalte_T_min = 1)
'Spalte_S = Nummer der Spalte im Source-Blatt, die kopiert werden soll
'wksS = Source-Tabellenblatt
'wksT = Target-Tabellenblatt
'Spalte_T_min = Nr. der Spalte ab der Werte im Target-Blatt eingetragen werden sollen
Dim iRow As Long, iRowL As Long
Dim iCol As Long
iRowL = wksS.Cells(wksS.Rows.Count, 1).End(xlUp).Row
'letzte ausgefüllte Spalte in Targettabelle ermitteln
iCol = fncLastFilledColumn(wks:=wksT)
'auszufüllende Spalte festlegen
If iCol 


Anzeige
AW: Nachgefragt
16.06.2009 15:52:18
edie
Hallo Franz,
funktioniert einwandfrei, jetzt ist auch das letzte Problem behoben, vielen herzlichen Dank.
Danke!
Grüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige