| |
| Xometry verstärkt sein Angebot für die Blechbearbeitung: Mehr Fertigungsoptionen und bessere Sofort-Angebote, eine Pressemitteilung
|
Autor
|
Thema: Sortieren A bis Z versus kleiner größer (493 / mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006
|
erstellt am: 03. Apr. 2022 11:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin in einem Makro, welches ich aus SolidWorks aus starte. Aus diesem Makro greife ich auf eine Excel-Tabelle zu, in der über 30.000 Zeilen enthalten sind. Um einen bestimmten Datensatz zu finden, verwende ich aus Geschwindigkeitsgründen die Biselection-Methode. Diese Methode erwartet eine sortierte Tabelle. Deshalb sortiere ich die Tabelle mit folgendem Befehl. Code:
xlWs.Range(strBereich).Sort Key1:=xlWs.Range(strSpalte & "1"), Order1:=1, Header:=1, DataOption1:=1
Was sortiert werden soll, seht ihr im angehängten Bild. Die beiden rot markierten Zeilen sind ein Problemfall. Das Sortierergebnis nach DataOption1:=1 oder DataOption1:=0 ist gleich. Nun verwende ich in der Biselection-Methode den <> Vergleich. Leider entspricht dies nicht der Sortierreihenfolge nach A bis Z. Ich bekomme zum Teil falsche Ergebnisse, weil die Sortierung nicht stimmt. Zum Test habe ich folgende Abfrage erstellt. Code:
If "01-10-04-001-102B-Rev-A-01" < "01-10-04-001-102-Rev-A-01" Then Debug.Print "01-10-04-001-102B-Rev-A-01 < 01-10-04-001-102-Rev-A-01" Else Debug.Print "01-10-04-001-102B-Rev-A-01 > 01-10-04-001-102-Rev-A-01" End If
Als Ergebnis bekomme ich folgenden Ausdruck: 01-10-04-001-102B-Rev-A-01 > 01-10-04-001-102-Rev-A-01 In der Sortierung ist aber der gesuchte Wert kleiner. (siehe Bild) Was nun, wie kann ich die Excel-Tabelle nach <> sortieren oder meine Abfrage so umgestalten, das nach der alphabetischen Reihenfolge gefragt wird? Für Ratschläge schon mal besten Dank, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 03. Apr. 2022 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Interessantes Phänomen, auch wenn ich Dir dazu keine Lösung anbieten kann. Habe mal verschiedene Test gemacht, komme aber immer auf die gleichen Ergebnisse wie Du. So wie es aussieht betrachtet Excel beim Sortieren das Zeichen "-" als Trennzeichen zwischen Ausdrücken, die für sich genommen zwischen Zahlen und Text einzeln sortiert werden. Einzige Möglichkeit wäre, Du tauscht vorab alle "-" gegen ein anderes Zeichen (z.B. "#" oder "."), lässt sortieren und tauscht wieder zurück. Nachdem Du es im Programm machst spielt es vom Aufwand her ja keine Rolle. Muss nur sichergestellt sein dass das Zeichen sonst nicht verwendet wird und es im Charcode auch unter 48 ( = 0) ist. Minus ist Chr(45), Komma = 44, Punkt = 46. Vielleicht hilft's Grüße Klaus [Edit]Was mir noch dazu einfällt: Warum verwendest du die Biselection-Methode und nicht Range.Find ? Find ist relativ schnell und Du sparst Dir das Sortieren [Diese Nachricht wurde von KlaK am 03. Apr. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006
|
erstellt am: 03. Apr. 2022 19:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, danke für deine Anregungen. Dein Vorschlag wäre ein Test wert. Ich habe mal von Hand den entsprechenden Bereich mit "#" ersetzt, und siehe da, Excel sortiert tatsächlich anders. Mal abwarten, ob noch weitere Vorschläge kommen. Besten Dank und einen schönen Restsonntag, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 03. Apr. 2022 19:32 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006
|
erstellt am: 03. Apr. 2022 19:39 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von KlaK:
[Edit]Was mir noch dazu einfällt: Warum verwendest du die Biselection-Methode und nicht Range.Find ? Find ist relativ schnell und Du sparst Dir das Sortieren ]
Weil ich sie nicht kannte, muss ich bei nächster Gelegenheit ausprobieren. Die Biselection -Methode hatte ich für eine einzelne Konfiguration (1-Mal Suchen) in SolidWorks vorgesehen. Für alle Konfigurationen (X-Mal Suchen) habe ich bereits die Dictionary-Methode aktiv. Allerdings dauert das einmalige einlesen aller Zeilen ca. 35 sec., was ich noch optimieren wollte. Dein Vorschlag scheint mir in die gleiche Richtung zu gehen, allerdings ohne das vorherige Einlesen. Danke für den Vorschlag, Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2580 Registriert: 02.10.2006 Firma: SW 2024-3.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2023-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 04. Apr. 2022 22:12 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Andi Beck: Weil ich sie nicht kannte, muss ich bei nächster Gelegenheit ausprobieren.
Hallo Klaus, wunderbar, funktioniert astrein und ist superschnell. Jetzt muss ich nicht mehr sortieren und das einlesen der ganzen Tabelle erübrigt sich auch. Somit muss das Eingangsproblem nicht mehr gelöst werden. Allerdings wäre es schon noch Interessant rauszufinden, ob es eine elegantere Methode gibt, außer dein vorheriges Umbenennen der "-" Zeichen. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 05. Apr. 2022 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, Da mußt Du Dich vermutlich direkt an Microsoft wenden. Meines Erachtens ignoriert Excel beim Sortieren einfach das Minuszeichen. Anders kann ich mir nicht erklären dass "102-", "102B-" richtig sortiert wird ( 102 < 102B ), "102-R", "102B-R" aber falsch ( 102BR < 102R ) Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 HP Z400 Workstaion CPU: Intel Xeon 6x 3,33GHz GPU: NVIDEA Quadro 2000 RAM: 12 GB DDR3 Win 7 x64 CAD Hauptberuflich -Solid Works 2015 SP4 -Creo Elements Direct Drafting (ME10) DMS/PDM -Pro.File V8 (8.4) Simulation -Simufact Forming 11.0 CAD Nebenberuflich -Pro Engineer WF 3+4 -Creo Parametric 2.0
|
erstellt am: 05. Apr. 2022 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo zusammen, FYI: Die MS Hilfe sagt zum Sotieren folgendes Zitat: Apostrophe (') und Bindestriche (-) werden bis auf eine Ausnahme ignoriert: Wenn zwei Textzeichenfolgen bis auf einen Bindestrich identisch sind, wird der Text mit dem Bindestrich an die letzte Stelle sortiert.
daher ist das wohl "Standard". Die Lösungen die ich dazu im www gefunden habe waren alle die auch von Klaus vorgeschlagene Methode mit Ersezen von "-" durch " ". Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |