Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Nach Spaltenköpfe suchen und Spalte kopieren

Nach Spaltenköpfe suchen und Spalte kopieren
23.10.2012 14:04:03
Jockel
Hallo,
ich habe eine Arbeitsmappe, in der befinden sich zwei Tabellenblätter, als Beispiel TABELLE1 und TABELLE2.
Tabelle1 ist zuerst mal leer.
Es werden dann Daten in dieses Tabellenblatt eingefügt. Die Daten haben in der Zeile 1 einen Spaltenkopf (Beschriftung)
Die Spalten der Daten können aber bei jeden einfügen ein bisschen variieren, mal sind sie nicht exakt in der gleichen Reihenfolge oder es sind zwischendurch mal ganz neu Spalten dabei.
Da ich aus diesen eingefügten Daten immer die gleichen Spalten benötige, dachte ich, vielleicht könnte man das mit einem Makro lösen.
Kann man mit einem Makro auf dem ersten Tabellenblatt die erste Zeile (die mit den Spaltenköpfen) durchlaufen lassen, nach den Strings zB: "Name" , "Adresse" , "Alter" .... suchen lassen und diese entsprechneden Spalten auf das Tabellenblatt 2 kopieren, egal, an welcher Position sich diese Spalten befinden.
Ich glaube, das wäre aber noch nicht mal das Problem. Eventuell ist die Mange das Problem. Meine Quelltabelle, die ich reinkopiere, kann zwischen 40 und 70 Spalten haben. Davon müssten so ca. 50 kopiert werden.
Also, nach 50 Strings in einer Zeile zu suchen, ist sicher auch nicht das Wahre.
Eventuell wäre aber eine andere Vorgehensweise möglich:
Wenn ich in meinem Tabellenblatt2 in der ersten Zeile schon mal die gewünschten Spaltenköpfe definiere (als Referenz) , die ich haben will. Ein Makro schaut zuerst im Tabellenblatt2 nach dem ersten String in Zeile 1, wechselt dann zum Tabellenblatt1 und holt sich dort die entsprechende Spalte heraus, und kopiert sie im Tabellenblatt2 rein.
Dann wird in der Zeile 1 in Spalte B der String geholt, wieder zum Tabellenblatt1 gewechselt und da wieder die entprechende Spalte kopieren...usw.
Das so lange, bis aus dem Tabellenblatt2 alle Spalten abgearbeitet sind.
Die Idee wäre ja da, aber an der umsetzung mangelt es.
Hat jemand sowas schon mal gemacht, oder ein ähnliches Beispiel parat.
Würde mir sehr weiter helfen.
Danke schon mal
Jockel

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nach Spaltenköpfe suchen und Spalte kopieren
23.10.2012 14:30:00
Matze,Matthias
Hi Jockel,
.., kannste da nicht eine Musterdatei erstellen Zwecks besseren Durchblick.
Matze

Hier ist eine Beispieldatei ...
23.10.2012 14:54:09
Jockel
Hallo
hier ist so eine Datei.
Ist ganz einfach gehalten.
https://www.herber.de/bbs/user/82279.xlsx
Wie schon geschrieben, in wirklichkeit habe ich bis zu 70 Spalten.
Gruß
Jockel

Anzeige
..offen!...
23.10.2012 15:16:18
Matze,Matthias
Hi Jockel,
ich versuch mich mal damit, kann aber dauern , ich lasse aber offen für die Profis
die das lesen.
Matze

AW: Hier ist eine Beispieldatei ...
23.10.2012 15:28:31
UweD
Hallo nochmal
hab gerade erst die Musterdatei gesehen.
Im Makro hab ich nur Die Tabellenzuordnungen abgeändert.
Sub Copy_Col()
On Error GoTo Fehler
Dim TB1, TB2, i%, SP
Dim LC%, C
Set TB2 = Sheets("Tabelle1")
Set TB1 = Sheets("Tabelle2")
LC = TB1.Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
Application.ScreenUpdating = False
For i = 1 To LC
SP = TB1.Cells(1, i).Value
Set C = TB2.Rows(1).Find(SP, LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
TB2.Columns(C.Column).Copy TB1.Columns(i)
End If
Next
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Gruß UweD

Anzeige
AW: Nach Spaltenköpfe suchen und Spalte kopieren
23.10.2012 15:20:26
UweD
Hallo
- Die Spaltennamen müssen in Tabelle 1 in der oberen Zeile eingetragen sein.
- Das Makro kopiert dann die komplette Spalte (inkl. Kopfzeile) aus Tabelle2 genau dorthin.
Sub Copy_Col()
On Error GoTo Fehler
Dim TB1, TB2, i%, SP
Dim LC%, C
Set TB1 = Sheets("Tabelle1")
Set TB2 = Sheets("Tabelle2")
LC = TB1.Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
Application.ScreenUpdating = False
For i = 1 To LC
SP = TB1.Cells(1, i).Value 'Überschrift
Set C = TB2.Rows(1).Find(SP, LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
TB2.Columns(C.Column).Copy TB1.Columns(i)
End If
Next
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub

Gruß UweD

Anzeige
@ uwe andersherum,...
23.10.2012 15:50:34
Matze,Matthias
Hallo Uwe,
..., so wie ich das gelesen habe soll es andersherum sein, habe deinen Code
abgeändert...
Sub Copy_Col()
On Error GoTo Fehler
Dim TB1, TB2, i%, SP
Dim LC%, C
Set TB1 = Sheets("Tabelle1")
Set TB2 = Sheets("Tabelle2")
LC = TB1.Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
Application.ScreenUpdating = False
For i = 1 To LC
SP = TB2.Cells(1, i).Value 'Überschrift
Set C = TB1.Rows(1).Find(SP, LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
TB1.Columns(C.Column).Copy TB2.Columns(i)
End If
Next
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Gruß Matze

Anzeige
AW: @ UWE_ Frage,...
23.10.2012 15:54:03
Matze,Matthias
Dim TB1, TB2, i%, SP
Dim LC%, C
Wo kann ich das erlesen? Was bedeutet das %
sich fragender Matze

AW: @ UWE_ Frage,...
23.10.2012 16:08:41
UweD
Hallo Matze
das sind Typkennzeichen.
anstelle von
DIM i As Integer kannst du
DIM i% verwenden
Long &
Currency @
Single !
Double #
String $
Schreibt sich schneller.
Gruß UweD

Anzeige
Danke, genau so ...
23.10.2012 17:10:56
Jockel
Hallo Uwe
Danke, genau so soll es sein.
Hab vielen Dank
Gruß
Jockel
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Spaltenköpfe in Excel suchen und Spalte kopieren


Schritt-für-Schritt-Anleitung

Um eine Spalte in Excel basierend auf den Spaltenköpfen zu kopieren, kannst Du ein VBA-Makro verwenden. Hier sind die Schritte:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" -> Einfügen -> Modul.

  3. Kopiere und füge den folgenden Code ein:

    Sub Copy_Col()
       On Error GoTo Fehler
       Dim TB1 As Worksheet, TB2 As Worksheet
       Dim i As Integer, SP As String
       Dim LC As Integer, C As Range
       Set TB1 = Sheets("Tabelle1") ' Ziel-Tabelle
       Set TB2 = Sheets("Tabelle2") ' Quell-Tabelle
       LC = TB1.Cells(1, Columns.Count).End(xlToLeft).Column ' letzte Spalte einer Zeile
       Application.ScreenUpdating = False
       For i = 1 To LC
           SP = TB1.Cells(1, i).Value ' Spaltenkopf
           Set C = TB2.Rows(1).Find(SP, LookIn:=xlValues, LookAt:=xlWhole)
           If Not C Is Nothing Then
               TB2.Columns(C.Column).Copy TB1.Columns(i)
           End If
       Next
    Fehler:
       If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus: Drücke ALT + F8, wähle Copy_Col und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“: Stelle sicher, dass die Spaltenköpfe in der ersten Zeile von Tabelle2 korrekt eingetragen sind.
  • Spalten nicht kopiert: Vergewissere Dich, dass die Spaltenköpfe in Tabelle1 und Tabelle2 identisch sind, inklusive Leerzeichen.

Alternative Methoden

Falls Du kein VBA verwenden möchtest, kannst Du auch die SVERWEIS-Funktion nutzen, um Daten aus einer Tabelle in eine andere zu übertragen. Du kannst eine Formel wie folgt verwenden:

=SVERWEIS(A1;Tabelle2!A:B;2;FALSCH)

Damit suchst Du nach dem Wert in A1 in der ersten Spalte von Tabelle2 und gibst den entsprechenden Wert aus der zweiten Spalte zurück.


Praktische Beispiele

Angenommen, Du hast in Tabelle1 die Spaltenköpfe "Name", "Adresse" und "Alter". In Tabelle2 sind diese Spalten in beliebiger Reihenfolge angeordnet. Mit dem oben genannten Makro kannst Du sicherstellen, dass die Daten in der richtigen Reihenfolge in Tabelle1 eingefügt werden, unabhängig von deren Anordnung in Tabelle2.


Tipps für Profis

  • Formel für ganze Spalte übernehmen: Wenn Du die Formel in die gesamte Spalte anwenden möchtest, kannst Du die Formel in die erste Zelle eingeben und dann die Zelle mit dem kleinen Quadrat in der unteren rechten Ecke nach unten ziehen.
  • Makros automatisieren: Du kannst das Makro bei jedem Öffnen der Datei automatisch ausführen, indem Du es im Workbook_Open-Ereignis einfügst.

FAQ: Häufige Fragen

1. Wie kann ich eine ganze Spalte kopieren, ohne VBA zu verwenden?
Du kannst die Spalte einfach markieren und mit STRG + C kopieren, dann in das Zielblatt mit STRG + V einfügen.

2. Was sind die Vorteile von VBA gegenüber Formeln?
VBA kann komplexe Aufgaben automatisieren und ist flexibler, wenn es um große Datenmengen geht.

3. Kann ich das Makro anpassen, um nur bestimmte Spalten zu kopieren?
Ja, Du kannst die Bedingungen im Makro anpassen, um nur bestimmte Spalten basierend auf den Spaltenköpfen zu kopieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige