2.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

ich bin etwas hilflos und würde gerne folgendes Problem über einen VBA-Knopf im Excel lösen:


1. Daten aus der Spalte C in dem Tabellenblatt 1 kopieren (knopfdruck)
2. Einfügen der Spalte in das Tabellenblatt 2 - hier jedoch flexibel nach rechtslaufend, da durch das Kopieren immer eine Spalte weiter das Ergebnis eingefügt werden muss und nicht überschrieben werden soll.

Könnt Ihr mir dabei helfen?

Vielen Dank

5 Antworten

0 Punkte
Beantwortet von m-o Profi (16.9k Punkte)
Hallo,

füge den folgenden Code in ein Standardmodul der entsprechenden Arbeitsmappe ein:

Sub spalte_kopieren()

Dim lngSpalte As Long
Dim wksZiel As Worksheet

Set wksZiel = ThisWorkbook.Worksheets("Tabelle2")

'letzte beschriebene Spalte im Arbeitsblatt Tabelle2 feststellen
With wksZiel
lngSpalte = .Cells(1, Columns.Count).End(xlToLeft).Column
'Prüfen, ob diese Spalte leer ist, ggf. Variable für Einfügespalte um 1 erhöhen
If Application.CountA(.Columns(lngSpalte)) > 0 Then lngSpalte = lngSpalte + 1

End With

'kopieren
ActiveSheet.Range("C:C").Copy Destination:=wksZiel.Cells(1, lngSpalte)

End Sub


Den Namen des Zielarbeitsblattes musst du ggf. anpassen. Mit dem Makro wird die Spalte C der aktuellen Tabelle in die nächste freie Spalte der Tabelle2 kopiert.

Das Makro kannst du dann einem Button (Entwicklertools - Einfügen - Formularsteuerelemente - Schaltfläche) zuordnen.

Gruß

M.O.
0 Punkte
Beantwortet von
Hi M. O.,

vielen vielen Dank!!

Es funktioniert. Könnte man noch die Bedingung adden, dass nur die Werte übernehmen werden und keine Farben?

Danke!!
0 Punkte
Beantwortet von m-o Profi (16.9k Punkte)
Hallo,

dann nimm den folgenden Code:

Sub spalte_kopieren()

Dim lngSpalte As Long
Dim wksZiel As Worksheet

Set wksZiel = ThisWorkbook.Worksheets("Tabelle2")

'letzte beschriebene Spalte im Arbeitsblatt Tabelle2 feststellen
With wksZiel
lngSpalte = .Cells(1, Columns.Count).End(xlToLeft).Column
'Prüfen, ob diese Spalte leer ist, ggf. Variable für Einfügespalte um 1 erhöhen
If Application.CountA(.Columns(lngSpalte)) > 0 Then lngSpalte = lngSpalte + 1

End With

'kopieren, nur Werte einfügen
ActiveSheet.Range("C:C").Copy
wksZiel.Cells(1, lngSpalte).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
hi,

was muss ich ändern, wenn bei mir die Tabelle wo der Inhalt eingefügt werden muss erst in Zeile 3 startet?

lg hofe
0 Punkte
Beantwortet von m-o Profi (16.9k Punkte)

Hallo,

da die ganze Spalte kopiert wird, muss der kopierte Bereich in die erste Zeile eingefügt werden.

Probiere mal den folgenden Code:

Sub spalte_kopieren()

Dim lngSpalte As Long
Dim wksZiel As Worksheet
Dim lngLetzte As Long

'Zieltabelle festlegen
Set wksZiel = ThisWorkbook.Worksheets("Tabelle2")
'im aktiven Arbeitsblatt letzte beschriebene Zeile in Spalte C ermittlen
lngLetzte = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row

'letzte beschriebene Spalte im Arbeitsblatt Tabelle2 feststellen
With wksZiel
lngSpalte = .Cells(1, Columns.Count).End(xlToLeft).Column
'Prüfen, ob diese Spalte leer ist, ggf. Variable für Einfügespalte um 1 erhöhen
If Application.CountA(.Columns(lngSpalte)) > 0 Then lngSpalte = lngSpalte + 1

End With

'kopieren, nur Werte einfügen
ActiveSheet.Range("C1:C" & lngLetzte).Copy
wksZiel.Cells(3, lngSpalte).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

End Sub

Gruß

M.O.

...