Anzeige
Archiv - Navigation
1268to1272
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
"Datensätze" einsortieren und Reihenfolge neu
onkelbobby
Hallo zusammen,
ich habe folgende Datei vorliegen:
Tabelle1: Spalte A: Name, Spalte B: Adresse, Spalte C: Reihenfolge
Tabelle2: Spalte A: Adresse, Spalte C: Reihenfolge
In Tabelle1 wird per SVERWEIS geprüft, ob die Adresse in Tabelle2 vorliegt und in Spalte C dann die entsprechende Zahl der Reihenfolge (aus Tabelle2) eingefügt.
Einige Adressen in Tabelle1 sind jedoch nicht in Tabelle2 vorhanden, weshalb in manchen Zeilen der Spalte C #NV erscheint.
Die Tabelle1 wird anschließend nach der Spalte C aufsteigend sortiert. Es werden dort dann also Werte von 1 bis ... durchgehend vergeben. Am Ende stehen dann die Datensätze mit #NV.
Diese möchte ich dann manuell in eine gewünschte Position der Tabelle einsortieren. Ich habe mir das so gedacht, dass durch Drücken eines Buttons eine Eingabebox erscheint, in der für jeden Datensatz ohne Nummer abgefragt wird, an welche Position (nach welchem Datensatz - z. B. durch Eingabe dessen Nr. aus Spalte C) der Datensatz eingefügt werden soll. Danach dann dort einfügen und neu nummerieren von 1 bis ... Diese Prozedur soll dann wiederholt werden, bis alle Datensätze ohne Nr. einsortiert sind.
Bsp:
https://www.herber.de/bbs/user/80967.xls
Im kleinen Beispiel im Anhang gibt es 4 Übereinstimmungen. Die Sortierung erfolg dann also zunächst von 1 bis 4. Datensatz 1 soll dann z. B. nach Position 2 eingefügt werden, dadurch ergäbe sich eine Sortierung von 1 bis 5. Nach dem letzten dann von 1 bis 6.
Ich hoffe es war soweit verständlich. Falls es noch bessere (oder einfachere) Ideen zur Lösung gibt, sind diese auch gerne willkommen.
Danke,
onkelbobby
AW: "Datensätze" einsortieren und Reihenfolge neu
13.07.2012 19:04:46
Detlef
onkelbobby,
versuch's mal damit. Man könnte das Ganze jetzt noch verfeinern, indem man z.B. auf die tatsächlichen Zeilen reduziert anstelle der gesamten Spalte, bringt aber zumindest keinen wirklichen Geschwindigkeitsvorteil.
Detlef
Sub test()
valPosition = Application.InputBox(prompt:="Test", Type:=1)
For Each cll In ActiveSheet.Range("C:C")
If IsNumeric(cll) Then
If cll >= valPosition Then
cll.Formula = cll + 1
End If
End If
Next
ActiveCell.Value = valPosition
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.Apply
End With
End Sub

Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
13.07.2012 19:07:07
Detlef
Ach so, vergessen: Die zu überschreibende Zelle muß markiert sein, und nach jedem Überschreiben wird direkt sortiert.
Detlef
AW: "Datensätze" einsortieren und Reihenfolge neu
14.07.2012 16:09:45
onkelbobby
Hi Detlef,
cool! Der Code war letztendlich ja einfacher als ich dachte. Da wäre ich nicht drauf gekommen! Dankeschön!
Wenn jetzt noch automatisch die Felder mit Wert #NV vom Makro automatisch nacheinander aktiviert werden und die Dateneingabe erfolgen kann, ist das für mich die perfekte Lösung.
Also die erste Zeile mit dem Wert #NV, dann Eingabe und Neuberechnung der Werte, dann die nächste Zeile mit #NV,... Also eine Schleife, bis der letzte #NV-Wert erreicht ist.
Die Sortierung erfolgt dann ganz zum Schluss mittels eigenem Makro.
Mit meinen etwas holprigen Makrokenntnissen kriege ich das leider nicht alleine hin.
Danke für einene weiteren Tipp!
Robert
Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
14.07.2012 16:40:04
Detlef
Robert,
jetzt wirds noch einfacher. Jedesmal wenn Excel einen Fehlerwert findet, wird die Zelle markiert und die Inputbox gestartet.
Übrigens: Ich habe keinerlei Fehlerbehandlung im Makro. Es sollte nichts passieren, aber Computer sind schließlich auch nur Menschen...
Detlef
Sub test2()
For Each cll In ActiveSheet.Range("C:C")
If IsError(cll) Then
cll.Select: GoTo Eingabe
End If
Next
Eingabe:
valPosition = Application.InputBox(prompt:="Test", Type:=1)
ActiveCell.Value = valPosition
End Sub

Sub Sortieren()
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.Apply
End With
End Sub

Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
15.07.2012 17:27:18
onkelbobby
Hi Detlef,
auch für Deinen nächsten Lösungsvorschlag dankeschön!
Ich habe die beiden Codes (Test und test 1) mal zusammengefügt und folgenden Code in ein Modul eingefügt:
Sub test2()
For Each cll In ActiveSheet.Range("C:C")
If IsError(cll) Then
cll.Select: GoTo Eingabe
End If
Next
Eingabe:
valPosition = Application.InputBox(prompt:="Test", Type:=1)
For Each cll In ActiveSheet.Range("C:C")
If IsNumeric(cll) Then
If cll >= valPosition Then
cll.Formula = cll + 1
End If
End If
Next
ActiveCell.Value = valPosition
End Sub
Beim Starten wird wie gewünscht die erste Zelle mit #NV angesprungen und die Input-Box geöffnet. Nach Eingabe wird auch der gewünschte Wert eingefügt und die anderen Werte (alle Zahlen der Spalte die gleich oder größer sind werden um 1 eröht) neu berechnet. Danach ist allerdings Schluss. Eigentlich sollte sich doch dann die nächste Input-Box öffnen, solange bis alle #NV-Werte geändert wurden? Wo ist der Haken?
Danke,
Robert
Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
15.07.2012 17:30:37
Hajo_Zi
Hallo Robert,
Sprungmarken benutzt man eigentlich nicht mehr in VBA für
: GoTo Eingabe
schreibe
: Exit For
und lösche die Zeile Eingabe:

AW: "Datensätze" einsortieren und Reihenfolge neu
15.07.2012 17:46:03
onkelbobby
Hallo Hajo,
ich habs jetzt so:
Sub test2()
For Each cll In ActiveSheet.Range("C:C")
If IsError(cll) Then
cll.Select: Exit For
End If
Next
valPosition = Application.InputBox(prompt:="Test", Type:=1)
For Each cll In ActiveSheet.Range("C:C")
If IsNumeric(cll) Then
If cll >= valPosition Then
cll.Formula = cll + 1
End If
End If
Next
ActiveCell.Value = valPosition
End Sub
Allerdings hat das in meinem Beispiel keine Auswirkungen. Nach wie vor bleibt das Makro nach dem ersten #NV-Wert stehen.
Robert
Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
15.07.2012 17:53:20
Hajo_Zi
Hallo Robert,
versuch es so
Option Explicit
Sub test2()
Dim Cll As Range
Dim Cll2 As Range
Dim valPosition As Double
For Each Cll In ActiveSheet.Range("C:C")
If IsError(Cll) Then
valPosition = Application.InputBox(prompt:="Test", Type:=1)
For Each Cll2 In ActiveSheet.Range("C:C")
If IsNumeric(Cll2) Then
If Cll2 >= valPosition Then
Cll2.Formula = Cll2 + 1
End If
End If
Next
Cll = valPosition
End If
Next
End Sub

Ich baue keine Datei nach, die Zeit hat schon jemand investiert. Ein Link zur Datei wäre nicht schlecht.
Gruß Hajo
Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
15.07.2012 18:08:31
onkelbobby
Hallo Hajo,
danke für die schnelle Hilfe.
Dein Makro funktioniert. Die Beispiel-Datei hatte ich schon mal in einem Beitrag am Anfang hochgeladen. Im Anhang noch mal die Datei mit Deinem Makro.
https://www.herber.de/bbs/user/80997.xls
Das Einzige was ich noch gerne hätte ist, dass die jeweilige Zelle, die überschrieben werden soll sofort "angesprungen", also ausgewählt wird.
Danke!
AW: "Datensätze" einsortieren und Reihenfolge neu
15.07.2012 18:26:29
Hajo_Zi
Hallo Robert,
das trifft dann aber nur für die Letzte zu. Die anderen siehst Du nicht da zu schnell.
Vor
Cll = valPosition
schreibe
cll.select
Gruß Hajo
Anzeige
AW: "Datensätze" einsortieren und Reihenfolge neu
16.07.2012 08:32:10
onkelbobby
Hallo Hajo,
ich habe cll.select noch weiter nach vorne gesetzt:
...
If IsError(Cll) Then
Cll.Select
valPosition = Application.InputBox(prompt:="Test", Type:=1)
...
Damit funktioniert es so, wie ich es haben wollte.
Danke Dir und auch Detlef für die tolle und schnelle Hilfe!
Robert

226 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige