Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
400to404
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
400to404
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Verzwicktes Sortierproblem

Verzwicktes Sortierproblem
24.03.2004 11:28:51
Armin
Hallo allerseits,
ich suche nach einer Möglichkeit, um mit Excel eine Terminologie-Liste zu sortieren, in der Datensätze abgebildet sind. Jeder Datensatz wird durch zwei Sternchen eingeleitet. Beispiel:
**
[Term]Grapefruit
[Synonym]Pampelmuse
[Verallgemeinerung]Zitrusfrucht
[Verallgemeinerung]Frucht
[Verallgemeinerung]Obst
**
[Term]Kartoffel
[Synonym]Krumbirne
[Synonym]Erdapfel
[Verallgemeinerung]Knollenfrucht
usw.
Mir geht es jetzt darum, INNERHALB jedes Datensatzes bestimmte Feldinhalte alphabetisch zu sortieren. Am Ende soll das Ganze so aussehen:
**
[Term]Grapefruit
[Synonym]Pampelmuse
[Verallgemeinerung]Frucht
[Verallgemeinerung]Obst
[Verallgemeinerung]Zitrusfrucht
**
[Term]Kartoffel
[Synonym]Erdapfel
[Synonym]Krumbirne
[Verallgemeinerung]Knollenfrucht
Wie könnte man so etwas z. B. mit einer einspaltigen Excel-Tabelle erledigen?
Bin für jeden Tipp dankbar.
Gruß
Armin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzwicktes Sortierproblem
24.03.2004 13:35:44
JörgB
Hallo Armin,
versuchs mal damit.
Voraussetzung, die Daten stehen in Spalte A und es gibt keine zweistelligen Zeilen außer ** und am Ende steht kein **
Ciao Jörg

Sub Makro4()
Columns("A:A").Select
Selection.Replace What:="??", Replacement:="##", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "zz"
Cells.Find(What:="##", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
Dim wert1 As String
Zeile1:
ActiveCell.Offset(1, 0).Select
wert1 = ActiveCell.Address
Cells.Find(What:="##", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
ActiveCell.Offset(-1, 0).Select
Dim wert2 As String
wert2 = ActiveCell.Address
Range(wert1, wert2).Select
Selection.Sort Key1:=Range(wert1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range(wert1).Select
ActiveCell.Offset(-1, 0).Select
ActiveCell.FormulaR1C1 = "aa"
Cells.FindNext(After:=ActiveCell).Activate
On Error GoTo Zeile2
GoTo Zeile1
Zeile2:
wert4 = ActiveCell.Address
Cells.Find(What:="zz", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
ActiveCell.Offset(-1, 0).Select
Dim wert3 As String
wert3 = ActiveCell.Address
Range(wert4, wert3).Select
Selection.Sort Key1:=Range(wert4), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range(wert1).Select
ActiveCell.Offset(-1, 0).Select
ActiveCell.FormulaR1C1 = "aa"
Columns("A:A").Select
Selection.Replace What:="aa", Replacement:="**", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Range("A65536").Select
Selection.End(xlUp).Select
Selection.ClearContents
Range("A1").Select
End Sub

Anzeige
AW: Verzwicktes Sortierproblem
24.03.2004 14:48:53
Armin
Hallo Jörg,
vielen Dank! Leider geht damit jedoch die Struktur der Datensätze verloren. Ich bekomme zwar die Liste als Ganzes sortiert, nur sind eben die durch ** begrenzten Datensätze nicht mehr als solche erkennbar. Die Inhalte zwischen den einzelnen ** sollen nicht verändert werden, lediglich alphabetisch sortiert, und zwar "gruppenweise", also alle [Verallgemeinerung] im ersten Datensatz von A bis Z, dann alle [Verallgemeinerung] im zweiten Datensatz von A bis Z und so weiter bis ans Ende der Liste.
Gruß
Armin
so verzwickt auch wieder nicht...
25.03.2004 00:24:49
joel
hallo armin
falls die daten in tabelle1 in der zelle a1 beginnen und in einer spalte stehen, kopiere folgenden code und lass es laufen, ich habs bei mir getestet, sollte trotzdem was schiefgehen, schick mir doch dein file.
gruss joel

Private Sub Sortiere()
Dim i As Integer, j As Integer
Dim index1 As Integer
Dim index2 As Integer
Dim s As String
i = 1
'für alle zeilen
Do While i < Tabelle1.UsedRange.Rows.Count
'suche den ersten, resp. nächsten block
Do
If Cells(i, 1).Value = "**" Then
index1 = i + 1
End If
i = i + 1
Loop Until Cells(i, 1).Value = "**"
index2 = i
'im block zeilen suchen, die gleich beginnen (erste 3 zeichen)
'und diese alphabetisch sortieren
s = ""
For j = index1 To index2
'falls die aktuelle zeile nicht mit den gleichen drei
'buchstaben beginnt, sortiere die vorangehenden
If s <> Left(Cells(j, 1).Value, 3) Then
'falls es sich um den ersten eintrag im block handelt, oder
'nur eintrag mit den gleichen anfangszeichen existiert,
'kann  nicht sortiert werden
If j > index1 + 1 Then
Tabelle1.Range(Cells(index1, 1), Cells(j - 1, 1)).Sort _
key1:=Cells(index1, 1), Order1:=xlAscending, _
header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End If
'start des nächsten blocks merken
index1 = j
'erste drei zeichen merken
s = Left(Cells(j, 1).Value, 3)
End If
Next j
Loop
End Sub

Anzeige
AW: so verzwickt auch wieder nicht...
25.03.2004 11:22:41
Armin
Hallo Joel,
vielen Dank! Ich bin leider eine völlige VBA-Flasche und bekomme den Makro nicht zum Laufen. Das beste Ergebnis bisher war "Laufzeitfehler 1004", immerhin wurde ja versucht, den Code auszuführen. Wenn ich den Code in den VBA-Editor einfüge, bekomme ich den Makro in Excel nicht angezeigt. Was mache ich bloß falsch? Ich lade mal die Datei hoch, ist leider ein ziemlicher Brocken...

Die Datei https://www.herber.de/bbs/user/4644.xls wurde aus Datenschutzgründen gelöscht

Gruß
Armin
AW: so verzwickt auch wieder nicht...
25.03.2004 13:50:21
joel
hallo armin
ok... da hab ich noch ein paar andere annahmen gemacht.
1. jeder block beginnt UND endet mit "**" (konkret: zuoberst und zuunterst eine zeile einfügen, die den beginn, resp. das ende des blocks markiert)
2. ich dachte, die einträge in <>-klammern wären in der richtigen reihenfolge, also z.B. zuerst alle "term", dann alle "verallgemeinerung",...
hier habe ich das makro so geändert, dass nun der ganze block alphabetisch geordnet wird (einiges einfacher). falls du eine bestimmte reihenfolge der <>-wörter möchtest, wirds einiges aufwändiger..
wenn du beispielsweise einfach immer term zuerst möchtest, wirds aufwändiger, hält sich aber noch im rahmen...
ich schick dir hier das geänderte file wieder.. die einträge sind jetzt sortiert (hat ganz schön lange gedauert...)
https://www.herber.de/bbs/user/4652.xls
also, falls du noch weitere pläne hast, lass hören. evtl. wer ich jedoch erst heute abend dahinter sitzen..
gruss joel
Anzeige
AW: so verzwickt auch wieder nicht...
25.03.2004 14:56:32
Armin
Hallo Joel,
ich erstarre immer wieder in Ehrfurcht, wenn ich sehe, was ein richtiger VBA-Crack alles zustande bringt! Das ist eigentlich genau das Ergebnis, das ich brauche. Allerdings spielt die Reihenfolge der <>-Wörter leider doch eine Rolle. Es müsste zumindest sichergestellt sein, dass nach den beiden Sternchen das Feld "Term" erscheint. Streng genommen, wird darüber hinaus folgende Reihenfolge benötigt:
Term
Standardbenennung
Datenquelle
Produktgruppe
Produktklassifizierung
easy link Suchkategorie
Variantentyp
Bezeichnung im Sortiment
Die anderen Felder dürfen sich in beliebiger Reihenfolge daran anschließen. Da ich das Makro wahrscheinlich auch in Zukunft öfters gebrauchen kann, können wir daraus auch gerne einen kleinen Auftrag machen. Lass' mich doch bitte wissen, wie hoch Du den Aufwand einschätzt und was mich das so Pi mal Daumen kosten würde.
Vielen Dank + Grüße
Armin
Anzeige
AW: so verzwickt auch wieder nicht...
25.03.2004 16:32:03
joel
hallo armin
"[...] was so ein richtiger VBA-Crack [...]"... wem das nicht schmeichelt!
es freut mich, dass ich dir helfen konnte. die erweiterung auf die von dir gewünschte reihenfolge ist möglich. ich denke, das ganze in 2h realisieren zu können. ich hab da schon ne idee.
es gibt jetzt zwei möglichkeiten:
1. ich sitze heute abend hin und programmiere ein wenig, schicke dir dann das file. falls der code funktioniert, darfst du mir gerne eine postkarte schicken.
2. du kannst dir vorstellen, dass an diesem file noch so einiges vereinfacht werden könnte (z.B. sortieren per knopfdruck, formular, um die datensätze nach bestimmten kriterien zu filtern, etc.). dann liesse sich evtl. ein kleiner auftrag daraus machen. dafür müsste ich aber mehr infos haben.
gib mir doch bitte bescheid (am besten per mail an joel.thommen@bluewin.ch)
gruss joel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige