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

Zusammenhängend mehrere Zellen vertauschen

Zusammenhängend mehrere Zellen vertauschen
20.02.2014 17:31:19
VBA-Anfänger
Hallo und lieber Gruß an die VBA-Profis.
Ich möchte in meiner Tabelle mit einen Marko den ich ausführen kann mehrere Zellen zusammenhä _
ngend vertauschen. Dabei soll Excel mir die Formeln in der Zelle vertauschen und nicht nur den _
Inhalt. Habe schon ein Makro gefunden mit dem ich jedoch nicht ganz zufrieden bin:

Sub Tauschen(ByVal Target As Range)
If Target.Cells.Count  2 Or Target.Columns.Count  1 Or Target.Cells(1).Column  1 Then  _
Exit Sub
Dim C(1 To 2) As Range, i As Integer, Antwort As Integer, x As Variant
For Each Zelle In Target
i = i + 1
Set C(i) = Zelle
Next Zelle
Antwort = MsgBox("Möchten Sie die Zellen tauschen ?" & vbCr & vbCr & "Zeile " & C(1).Row & "  _
mit Zeile " & C(2).Row, vbYesNo, "Frage")
If Antwort = vbYes Then
x = C(1)
C(1) = C(2)
C(2) = x
x = C(1).Offset(0, 1)
C(1).Offset(0, 1) = C(2).Offset(0, 1)
C(2).Offset(0, 1) = x
x = C(1).Offset(0, 5)
C(1).Offset(0, 5) = C(2).Offset(0, 5)
C(2).Offset(0, 5) = x
End If
End Sub

Das schöne bei diesen Makro ist, dass er mir die Formeln vertauscht und nicht blos die Inhalte. Optimieren würde ich es gerne soweit, dass er mir wenn ich eine Zelle auswähle 2 andere Zellen in den selben Zeile mit den anderen Zellen in einer anderen Zeile vertauscht.
Hier mal ein Beispiel wie sowas dann in der Praxis auszusehen hat.
Vorher:
Zelle A1 Zelle B1 Zelle C1 Zelle D1 Zelle E1 Zelle F1 Zelle G1
Zelle A2 Zelle B2 Zelle C2 Zelle D2 Zelle E2 Zelle F2 Zelle G2
Zelle A3 Zelle B3 Zelle C3 Zelle D3 Zelle E3 Zelle F3 Zelle G3
Zelle A4 Zelle B4 Zelle C4 Zelle D4 Zelle E4 Zelle F4 Zelle G4
Zelle A5 Zelle B5 Zelle C5 Zelle D5 Zelle E5 Zelle F5 Zelle G5
Nachher:
Zelle A1 Zelle B1 Zelle C1 Zelle D1 Zelle E1 Zelle F1 Zelle G1
Zelle A2 Zelle B2 Zelle C2 Zelle D4 Zelle E2 Zelle F4 Zelle G4 ' Zelle A3 Zelle B3 Zelle C3 Zelle D3 Zelle E3 Zelle F3 Zelle G3
Zelle A4 Zelle B4 Zelle C4 Zelle D2 Zelle E4 Zelle F2 Zelle G2 ' Zelle A5 Zelle B5 Zelle C5 Zelle D5 Zelle E5 Zelle F5 Zelle G5
Hier werden also die Zellen D2+F2+G2 gegen die Zellen D4+F4+G4 ausgetauscht. Wichtig dabei ist dass die Formeln in der Zelle nicht verändert werden.
Schön wäre noch die Abfrage ob der Inhalt in Zelle A2+B2 mit den Inhalten in Zelle A4+B4 identisch ist (nicht Formel nur Inhalt) und nur dann die anderen Zellen getauscht werden.
Ich weiß, dass ich viel von euch verlange aber vielleicht könnt Ihr mir auch ein Stück weiterhelfen...
Zum besseren Verständnis habe ich noch die Datei beigefügt.
https://www.herber.de/bbs/user/89371.xlsx
Lieben Gruß,
ein VBA-Anfänger :-)

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zusammenhängend mehrere Zellen vertauschen
20.02.2014 18:30:01
fcs
Hallo VBA-Anfänger,
probier es mal mit den folgenden Anpassungen.
Gruß
Franz
Sub Tauschen(ByVal Target As Range)
If Target.Cells.Count  2 Or Target.Columns.Count  1 _
Or Target.Cells(1).Column  1 Then
MsgBox "Für korrekte Funktion des Makros müssen 2 Zellen in Spalte A " _
& "selektiert werden!", vbOKOnly, "Zellen vertauschen"
Exit Sub
End If
Dim C(1 To 2) As Range, i As Integer, Antwort As Integer, x As Variant
Dim Zelle As Range
For Each Zelle In Target
i = i + 1
Set C(i) = Zelle
Next Zelle
Antwort = MsgBox("Möchten Sie die Zellen tauschen ?" & vbCr & vbCr & "Zeile " _
& C(1).Row & " mit Zeile " & C(2).Row, vbYesNo, "Frage")
If Antwort = vbYes Then
If C(1) = C(2) And C(1).Offset(0, 1) = C(2).Offset(0, 1) Then
x = C(1).Offset(0, 3).Formula
C(1).Offset(0, 3).Formula = C(2).Offset(0, 3).Formula
C(2).Offset(0, 3).Formula = x
x = C(1).Offset(0, 5).Formula
C(1).Offset(0, 5).Formula = C(2).Offset(0, 5).Formula
C(2).Offset(0, 5).Formula = x
x = C(1).Offset(0, 6).Formula
C(1).Offset(0, 6).Formula = C(2).Offset(0, 6).Formula
C(2).Offset(0, 6).Formula = x
Else
MsgBox "Werte in Spalte A und B sind nicht identisch", , "Zellen vertauschen"
End If
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige