Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
732to736
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
732to736
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Hilfe beim Sortieren

VBA Hilfe beim Sortieren
Henrik
Hallo zusammen,
habe mal wieder ein Problem.
In (Tabellenblatt "1") stehen in (Spalte "A") folgende Werte:
A2=-1,0 / A3=-1,5 / A4=-2,0 / A5=-0,5 / A6=1,5 / A7=0,5 / A8=0,0 /usw.
Suche ein Makro, das mir diese Werte in (Tabellenblatt "2") in (Zeile"2") sortiert einfügt.
Folgende Bedingungen sollen gelten:
1. Einfügen:Beginnen bei der kleinsten Zahl (also: Blatt2 Zelle A2=-2,0 / B2=-1,5 /C2=-0,5 /usw.)
2. Doppelt vorkommende Werte nur einmal aufführen
3. Makro soll auf Blatt1 in SpalteA,Zeile9 anfangen und aufhören, wenn die ertse freie Zelle in SpalteA kommt.
Das ist eigentlich alles. Konnte leider im archiv nix finden. Hoffe jemand weiß Rat. Danke schon mal.
Gruß Henrik

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Hilfe beim Sortieren
15.02.2006 15:34:10
Peter
Hallo Henrik,
das geht wohl nur per Makro.
Du bist in Excel, drücke Alt+F11, damit wechselst du in den VBA-Editor.
Jetzt gehst du auf "Einfügen" , dann "Modul" und kopierst den Code in das rechte Fenster.
Schließe den VBA-Editor (Schließen-Kreuz rechts oben), gehe auf das Tabellenblatt mit deiner Liste, drücke Alt+F8, wähle das Makro in der Liste aus und klicke auf "Ausführen".

Public Sub SortCopy()
Dim WkSh_Q       As Worksheet
Dim WkSh_Z       As Worksheet
Dim lZeile       As Long
Dim lLetzte      As Long
Dim iSpalte      As Integer
Dim sVorheriger  As String
   Set WkSh_Q = Worksheets("Tabelle1")
   Set WkSh_Z = Worksheets("Tabelle2")
   
   lLetzte = WkSh_Q.Range("A65536").End(xlUp).Row
   If lLetzte < 9 Then lLetzte = 9
   
   WkSh_Q.Range("A9:A" & lLetzte).Sort _
          Key1:=Range("A9"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        
   If lLetzte < 256 Then
      iSpalte = 1
    Else
      MsgBox "es sollen zu viele Werte in EINE Zeile eingefügt werden - Abbruch.", _
         16, "   Hinweis für " & Application.UserName
      Exit Sub
   End If
        
   For lZeile = 9 To lLetzte
      If WkSh_Q.Range("A" & lZeile).Value <> sVorheriger Then
         WkSh_Q.Range("A" & lZeile).Copy Destination:=WkSh_Z.Cells(2, iSpalte)
         iSpalte = iSpalte + 1
         sVorheriger = WkSh_Q.Range("A" & lZeile).Value
      End If
   Next lZeile
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: VBA Hilfe beim Sortieren
15.02.2006 15:52:44
Peter
Hallo Henrik,
weil VBA nein, hier meine Mappe als Anlage:
https://www.herber.de/bbs/user/31062.xls
das Makro enthält auch noch eine kleine Korrektur.
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
VBA Sortieren funktioniert
17.02.2006 09:14:26
Henrik
Hallo Peter,
danke Dir für Deine Hilfe. Entschuldige, das ich mich jetzt erst melde.
Dein Makro funktioniert einwandfrei.
Gruß Henrik
AW: VBA Sortieren doch nicht
17.02.2006 09:31:21
Henrik
Hallo Peter und alle anderen,
Dein Makro funktioniert. Nun ist mir aufgefallen, dass es zuerst auf den Quellsheet die Daten sortiert und dann auf Zielsheet einfügt. Da liegt das Problem.
Die Daten auf dem Quellsheet dürfen nicht verändert werden.
Versuche das Problem zu ändern, indem ich die Daten vom Quellsheet erst kopiere, auf ein neuen Sheet einfüge, sortiere und dann im Zielsheet einfüge. Wäre aber schön , dieses Problem gelöst zu bekommen, ohne neuen sheet verwenden zu müssen. Noch jemand eine Idee?
Gruß
Henrik
Anzeige
AW: VBA Sortieren doch nicht
17.02.2006 12:09:07
Peter
Hallo Henrik,
dass die Sortier-Reihenfolge nicht verändert werden darf, hattest du leider verschwiegen.
Hier ein Lösung, die kein neues Blatt erfordert, sondern kurzzeitig nur eine neue Spalte, die am Ende wieder gelöscht wird.
Versuch es mal:

'
'   In (Tabellenblatt "1") stehen in (Spalte "A") folgende Werte:
'   A2=-1,0 / A3=-1,5 / A4=-2,0 / A5=-0,5 / A6=1,5 / A7=0,5 / A8=0,0 /usw.
'
'   Gesucht wird ein Makro, das diese Werte in (Tabellenblatt "2")
'   in (Zeile"2") sortiert einfügt.
'
'   Folgende Bedingungen sollen gelten:
'
'   1. Einfügen: Beginnen bei der kleinsten Zahl
'      (also: Blatt2 Zelle A2=-2,0 / B2=-1,5 /C2=-0,5 /usw.)
'   2. Doppelt vorkommende Werte nur einmal aufführen
'   3. Makro soll auf Blatt1 in Spalte A ,Zeile9 anfangen und aufhören,
'      wenn die erste freie Zelle in Spalte A kommt.
'
Public Sub SortCopy()
Dim WkSh_Q       As Worksheet
Dim WkSh_Z       As Worksheet
Dim lZeile       As Long
Dim lLetzte      As Long
Dim iSpalte      As Integer
Dim sVorheriger  As String
   Application.ScreenUpdating = False
   
   Set WkSh_Q = Worksheets("Tabelle1")
   Set WkSh_Z = Worksheets("Tabelle2")
   
   lLetzte = WkSh_Q.Range("A65536").End(xlUp).Row
   If lLetzte < 9 Then lLetzte = 9
   
   WkSh_Q.Columns("A:A").Insert Shift:=xlToRight
   WkSh_Q.Range("B9:B" & lLetzte).Copy Destination:=WkSh_Q.Range("A9:A" & lLetzte)
   
   Worksheets("Tabelle1").Activate
   
   WkSh_Q.Range("A9:A" & lLetzte).Sort _
          Key1:=Range("A9"), Order1:=xlAscending, Header:=xlGuess, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        
   If lLetzte < 257 Then
      iSpalte = 1
    Else
      MsgBox "es sollen zu viele Werte in EINE Zeile eingefügt werden - Abbruch.", _
         16, "   Hinweis für " & Application.UserName
      Exit Sub
   End If
        
   For lZeile = 9 To lLetzte
      If Not IsEmpty(WkSh_Q.Range("A" & lZeile).Value) Then
         If WkSh_Q.Range("A" & lZeile).Value <> sVorheriger Then
            WkSh_Q.Range("A" & lZeile).Copy Destination:=WkSh_Z.Cells(2, iSpalte)
            iSpalte = iSpalte + 1
            sVorheriger = WkSh_Q.Range("A" & lZeile).Value
         End If
      End If
   Next lZeile
   
   WkSh_Q.Columns("A:A").Delete Shift:=xlToLeft
   Application.CutCopyMode = False
   Application.ScreenUpdating = True
     
End Sub
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige