Zeilen tauschen

Moderator: ModerationP

Zeilen tauschen

Beitragvon Hasi69 » 12. Sep 2021, 14:59

Hallo! Ich habe einen Zellbereich Von A12:Z50.
Jetzt soll es per VBA möglich sein in einer Userform mit 2 Textboxen jeweils eine Zeilennummer anzugeben,
damit der Inhalt der jeweiligen Zeile ausgetauscht werden kann. (später)
Zunächst aber erstmal mit Angaben aus 2 Zellen B1 und B2 in dem Fall wurde Zeile 3 und Zeile 6 angegeben.
Also: Inhalt von Zeile 3 mit Inhalt von Zeile 6 austauschen. (A:Z).
Was aber so nicht funktioniert.
Kennt jemand eine Lösung? Vielen Dank.
Im Anhang ist eine Datei.

Version ist 2010
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Hasi69
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 249
Registriert: 14. Mär 2013, 10:59

Re: Zeilen tauschen

Beitragvon DerHoepp » 12. Sep 2021, 16:22

Moin,

in Datensatzlisten sollte die Position der Daten eigentlich keine Rolle spielen. Wenn doch, würde ich eher ein Feld einfügen, welches eine entsprechende Aufsteigende Sortierung ermöglicht (ID, Timestamp, sonstwas). Aber das nur vorab.

Um Datenzeilen zu tauschen bieten sich grundsätzlich zwei Ansätze an:
1. gib ein Sortierfeld an und sortiere danach. In einer Hilfsspalte fügst für alle Datensätze die Zeilennummer als Wert ein. Für die beiden zu tauschenden Zeilen wechelst du einfach den Wert. Im letzten Schritt sortierst du und bist schon fertig.
2. Du kopierst die erste zu tauschende Zeile in eine Hilfszeile, anschließend die zweite zu tauschende Zeile in die erste, als nächstes die Hilfszeile in die zweite und zum abschluss löschst du die Hilfszeile.

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9727
Registriert: 14. Mai 2013, 11:08

Re: Zeilen tauschen

Beitragvon snb » 12. Sep 2021, 16:24

Aber.... Wozu ?
Die Folge der Zeilen ist doch völlig egal.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8726
Registriert: 25. Sep 2014, 16:37

Re: Zeilen tauschen

Beitragvon Hasi69 » 12. Sep 2021, 16:48

@der Hoepp
Die Zeilennummern habe ich ja schon.
Tausch Zeile 12 gegen Zeile 15.
Hasi69
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 249
Registriert: 14. Mär 2013, 10:59

Re: Zeilen tauschen

Beitragvon Hasi69 » 12. Sep 2021, 16:58

Zellbereiche die nicht zusammen stehen, also mit Trennung dazwischen, lassen sich nicht sortieren.
Hasi69
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 249
Registriert: 14. Mär 2013, 10:59

Re: Zeilen tauschen

Beitragvon Eierlein » 12. Sep 2021, 18:09

Code: Alles auswählen
Sub tauschen()

    Dim T, z1&, z2&

    z1 = Cells(1, 2)
    z2 = Cells(2, 2)

    T = Cells(z1, 5)
    Cells(z1, 5) = Cells(z2, 5)
    Cells(z2, 5) = T

End Sub
Eierlein
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 95
Registriert: 18. Jan 2015, 18:40

Re: Zeilen tauschen

Beitragvon snb » 12. Sep 2021, 21:16

Verzichte auf 'Empty roiws'.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8726
Registriert: 25. Sep 2014, 16:37

Re: Zeilen tauschen

Beitragvon DerHoepp » 13. Sep 2021, 09:28

Moin,

Hasi69 hat geschrieben:@der Hoepp
Die Zeilennummern habe ich ja schon.
Tausch Zeile 12 gegen Zeile 15.

Jeder Datensatz muss bei der Version einen Sortierschlüssel haben. Das kann beispielsweise die Zeilennummer sein. Für Datensatz 12 und 15 änderst du den Sortierschlüssel, in dem du ihn vertauschst. Dann sortierst du. Leerzeilen haben in Datensätzen aber ohnehin nix zu suchen. Was ist denn eigentlich der Grund für diese Übung?

Und woran hapert es noch konkret?

Viele Grüße
derHöpp

[Nachtrag: Eierleins Vorschlag funktioniert natürlich nur für das konkrete Beispiel, weil einzelne Zellwerte getauscht werden und keine Datensätze mit mehreren Feldern]
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9727
Registriert: 14. Mai 2013, 11:08

Re: Zeilen tauschen

Beitragvon Flotter Feger » 13. Sep 2021, 09:46

@derHöpp:
die Frage nach dem Sinn ...? Echt jetzt ? :wink:
... allways look on the bright side of life ... ?

@Hasi:
2 Zellen tauschen ... hat man dir mindestens ... wenn nicht gar öfter gezeigt ... Referenzen einfügen sollte du selbst schaffen.
Code: Alles auswählen
Sub Tauschen(i As Long, j As Long)
Dim n As Variant

n = Range(Cells(i, 1), Cells(i, 26)).Value
Range(Cells(i, 1), Cells(i, 26)).Value = Range(Cells(j, 1), Cells(j, 26)).Value
Range(Cells(j, 1), Cells(j, 26)).Value = n
End Sub

Call Tauschen(12, 15)
Benutzeravatar
Flotter Feger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3259
Registriert: 24. Okt 2016, 16:40

Re: Zeilen tauschen

Beitragvon DerHoepp » 13. Sep 2021, 10:21

Flotter Feger hat geschrieben:@derHöpp:
die Frage nach dem Sinn ...? Echt jetzt ? :wink:
... allways look on the bright side of life ... ?

:roll: ohrwurm! Ich weiß, da bin ich blauäugig, aber manchmal würde ich einfach gern verstehen, warum man sich das Leben kompliziert macht. Der einzige Grund, der mir momentan einfallen würde, wäre eine Custom-Sort-Reihenfolge, die sich irgendwie nicht in Formeln abbilden lässt.

Damit ich aber nicht nur mit blauem Auge dastehe hier auch noch meine zwei Vorschläge in Codeform:
Code: Alles auswählen
Option Explicit
'Modul Tabelle1
Public Sub SwitchEntireRow(a As Long, b As Long)
'Beim zwischenkopieren auf dem gleichen Blatt kann man auf das DisplayAlerts natürlich verzichten.
    Dim enevbefore As Boolean, scupbefore As Boolean
   
    enevbefore = Application.EnableEvents
    scupbefore = Application.ScreenUpdating
    'Application.EnableEvents = False
    'Application.ScreenUpdating = False
   
    With Me.Parent.Worksheets.Add(before:=Me.Parent.Worksheets(1))
        Me.Rows(a).Copy .Cells(1)
        Me.Rows(b).Copy Me.Rows(a).Cells(1)
        .Cells(1).EntireRow.Copy Me.Rows(b).Cells(1)
        Application.DisplayAlerts = False
            .Delete
        Application.DisplayAlerts = True
    End With
    Application.EnableEvents = enevbefore
    Application.ScreenUpdating = scupbefore
End Sub

Public Sub ReSortSwitch(rownumberA, rownumberB)
    With Me.Cells(1).CurrentRegion
        With .Resize(, .Columns.Count + 1)
            With .Columns(.Columns.Count)
                .Formula = "=row()"
                .Value = .Value
                .Cells(rownumberB) = rownumberA
                .Cells(rownumberA) = rownumberB
            End With
            .Sort .Cells(1, .Columns.Count)
            .Columns(.Columns.Count).Delete
        End With
    End With
End Sub

'Aus dem Direktfenster:
Tabelle1.SwitchEntireRow 3,5
tabelle1.ReSortSwitch 2,4


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9727
Registriert: 14. Mai 2013, 11:08

Re: Zeilen tauschen

Beitragvon snb » 13. Sep 2021, 11:56

Die Spalten kann man beliebig erweiteren (im Beispiel sind es 3):

Code: Alles auswählen
Sub M_snb()
    M_tauschen 4, 10
End Sub

Sub M_tauschen(x, y)
    sn = Cells(x, 1).Resize(y - x + 1, 3)
    Cells(x, 1).Resize(, 3) = Application.Index(sn,Ubound(sn))
    Cells(y, 1).Resize(, 3) = Application.Index(sn, 1)
End Sub
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8726
Registriert: 25. Sep 2014, 16:37


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 Gäste