Aktuell kann es Probleme bei der Anmeldung mit dem Chrome oder Edge Browser geben. Ihr müsstet in die Einstellungen des Browsers gehen und Cache, Cookies und sofern vorhanden, gespeicherte Passwörter vom CEF löschen oder alternativ auf einen anderen Browser ausweichen. Ursache sind vermutlich kürzliche Browserupdates. x

Excel VBA: Spalte Verschieben und nicht vertauschen
#1
Hallo liebes Forum,

im Netz habe ich ein tolles Makro gefunden das mir in einer Tabelle zwei auszuwählende Daten-Spalten vertauscht.
Was ich aber benötige ist eine Möglichkeit (Makro) die eine ausgewählte Spalte, ab einer wählbaren Zeile, an eine wählbare Spalte verschiebt.
Dabei soll natürlich deren Inhalt nicht überschrieben werden sondern diese Spalte soll um eine Spalte nach rechts verschoben werden.

Habt Ihr mir da vielleicht einen Lösungsvorschlag?

Hier mal das Makro zum Spalten vertauschen:

Code:
Sub SpaltenAustauschen()
Dim rngSpalteA As Range
Dim rngSpalteB As Range
Dim Zwischenspeicher As Variant

  On Error GoTo ErrorHandle

  Set rngSpalteA = Application.InputBox(prompt:="1. Spalte markieren:", Type:=8)
  If rngSpalteA.Columns.Count > 1 Then
    MsgBox "Die 1. Markierung enthält mehr als eine Spalte", vbCritical
    Exit Sub
  End If

  Set rngSpalteB = Application.InputBox(prompt:="1. Spalte ist " & _
    rngSpalteA.Address & vbLf & "2. Spalte markieren:", Type:=8)
  If rngSpalteB.Columns.Count > 1 Then
    MsgBox "Die 2. Markierung enthält mehr als eine Spalte", vbCritical
    Exit Sub
  End If

  Zwischenspeicher = rngSpalteA.Value
  rngSpalteA.Value = rngSpalteB.Value
  rngSpalteB.Value = Zwischenspeicher
  Exit Sub

ErrorHandle:
  MsgBox "Das Makro wurde abgebrochen!", vbExclamation

End Sub
Top
#2
Hallo Erich,

vielleicht so:

Code:
Sub SpaltenteilVerschiebenEinfuegen()
 Dim rngSpalteA As Range
 Dim rngSpalteB As Range

 On Error GoTo ErrorHandle

 Set rngSpalteA = Application.InputBox(prompt:="1. Zelle der Spalte markieren:", Type:=8)
 If rngSpalteA.Columns.Count > 1 Then
   MsgBox "Die 1. Markierung enthält mehr als eine Spalte", vbCritical
   Exit Sub
 End If

 Set rngSpalteB = Application.InputBox(prompt:="1. Spalte ist " & _
   rngSpalteA.Address & vbLf & "2. Spalte markieren:", Type:=8)
 If rngSpalteB.Columns.Count > 1 Then
   MsgBox "Die 2. Markierung enthält mehr als eine Spalte", vbCritical
   Exit Sub
 End If
 
 rngSpalteB.Insert
 Range(rngSpalteA, Cells(Rows.Count, rngSpalteA.Column)).Cut rngSpalteB.Offset(, -1)
 Exit Sub

ErrorHandle:
 MsgBox "Das Makro wurde abgebrochen!", vbExclamation

End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top
#3
Hallo Uwe,

vielen Dank für Deinen Vorschlag. Funktioniert soweit ganz gut.
Will das aber noch genauer ausprobieren.

Danke!
Top
#4
Hallo Uwe,

wollte Dir noch eine Rückmeldung geben.

Also, wenn ich eine Spalte verschiebe, funktioniert das sehr schön.
Es wird die zu verschiebende Spalte an den neuen Ort eingefügt, aber alle Spalten rechts davon werden jetzt auch nach rechts verschoben......das ist ja auch so gewollt....
.... aber die verschobene Spalte lässt eine "Leerspalte" zurück und dadurch bekomme ich natürlich jetzt eine Spalte mehr.

Wichtig dabei ist mir zusätzlich dass eine mögliche Kopfzeile nicht mit verschoben wird!

Vielleicht hast Du da noch eine Idee?
Top
#5
Hallo Erich,

Sub SpaltenteilVerschiebenEinfuegen()
 Dim rngSpalteA As Range
 Dim rngSpalteB As Range
 
 On Error GoTo ErrorHandle
 
 Set rngSpalteA = Application.InputBox(prompt:="1. Zelle der Spalte markieren:", Type:=8)
 If rngSpalteA.Columns.Count > 1 Then
   MsgBox "Die 1. Markierung enthält mehr als eine Spalte", vbCritical
   Exit Sub
 End If
 
 Set rngSpalteB = Application.InputBox(prompt:="1. Spalte ist " & _
   rngSpalteA.EntireColumn.Address & vbLf & "2. Spalte markieren:", Type:=8)
 If rngSpalteB.Columns.Count > 1 Then
   MsgBox "Die 2. Markierung enthält mehr als eine Spalte", vbCritical
   Exit Sub
 Else
   Set rngSpalteB = rngSpalteB.EntireColumn
 End If
 
 Application.ScreenUpdating = False
 rngSpalteB.Insert
 Range(rngSpalteA, Cells(Rows.Count - rngSpalteA.Row + 1, rngSpalteA.Column)).Copy rngSpalteB.Cells(1).Offset(rngSpalteA.Row - 1, -1)
 rngSpalteA.EntireColumn.Delete
 Application.ScreenUpdating = True
 Exit Sub
 
ErrorHandle:
 MsgBox "Das Makro wurde abgebrochen!", vbExclamation
 
End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top
#6
Hallo Uwe,

cool....das Vertauschen klappt toll....es bleibt keine Leerspalte mehr zurück und die Anzahl der Spalten bleibt gleich.
Jetzt verhaut es aber die Kopfzeile (Zelle).

So sieht das vor dem Spaltentausch aus....

Tabelle1
ABCD
1ABCD
21234
31234
41234
51234
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.08 einschl. 64 Bit



...und so nachher...

Tabelle1
ABCD
1A BD
21324
31324
41324
51324
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.08 einschl. 64 Bit



Die Kopfzellen sollen nicht beeinflußt werden.
Hast Du vielleicht noch ne Idee?
Top
#7
Hallo Erich,

zeige bitte einen Vorher-/Nachhervergleich wie Du es Dir vorstellst.

Gruß Uwe
Top
#8
Hallo Uwe,

so sieht es vorher aus...

Tabelle1
ABCD
1ABCD
21234
31234
41234
51234
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.08 einschl. 64 Bit



.... und so soll es nachher aussehen.....

Tabelle1
ABCD
1ABCD
21423
31423
41423
51423
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.08 einschl. 64 Bit


....oder auch so......je nachdem welcher Spaltenbereich verschoben werden soll....

Tabelle1
ABCD
1ABCD
24123
34123
44123
54123
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.08 einschl. 64 Bit



....... aber......die Titel-Zelle soll nicht verschoben werden!
Top
#9
Hallo Erich,

interessant wäre nun noch, was Du in welcher Reihenfolge bei Deinen Beispielen anklickst.

Gruß Uwe
Top
#10
Hallo Uwe,

zuerst markiere ich die Werte (Spalte , ohne Titel-Zelle) die ich verschieben will....dann markiere ich die Zellen (Spalte, ohne Titel-Zelle)  wohin ich verschieben will.
Die Anzahl der Auswahlzellen ist in beiden Fällen gleich groß.

In meinem letzten Beitrag wurden im ersten Beispiel zuerst...
alle Werte (4) in Spalte "D" markiert .... dann alle Werte (2) in Spalte "B".....also zuerst Quell-Daten (oder Quell-Ort) ..dann Ziel-Ort...wohin die Quelldaten geschoben werden sollen.

Im zweiten Beispiel wurden zuerst.....
alle Werte (4) in Spalte "D" markiert .... dann alle Werte (1) in Spalte "A".....

Du wirst Dich fragen was das ganze soll.....nun, ich bekomme verschiedene Daten geliefert die eine ähnliche Struktur im Tabellenaufbau haben. Mir ist durchaus bewusst dass es einfacher ist einheitliche Tabellenstrukturen zu generieren.....das ist sozusagen auch das "Endziel". Im Moment muss ich mir aber selbst etwas zusammenbasteln.

Daraus ergibt sich für mich die Frage ob es eine einfachere, effektivere und elegantere Methode gibt Tabellen zusammenzuführen?
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste