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

VBA: Teil eines Zell-Eintrages in Array

VBA: Teil eines Zell-Eintrages in Array
19.03.2004 18:43:53
Christian
Hallo zusammen,
"VBA gut" ist bei mir bestimmt übertrieben, aber "VBA-mit-Recorder" stimmt genausowenig.
Ich habe ein riesige Tabelle (ca. 20000 Einträge) mit Namen und hierbei sind auch etliche Namen mit Adelstitel versehen.
(Bsp: "de", "von", "von der", "van", ..., "Graf", "Graf von", etc.)
Teilweise sind diese Adeltitel am Anfang des Namens eingetragen und teilweise hinten. Daher möchte ich diese Titel aus dem Namen separieren und suche hierfür ein geeigneten Code.
Meine Idee:
Gebe diese Titel in einen Array ein und suche in den Zell-Einträgen nach den einzelnen Array-Werten. Dabei scheitere ich allerdings kläglich. Ich schaff es noch nicht mal:
Dim arrAdel() As String
arrAdel() = "de", "von", ...
richtig zu formulieren.
schon mal vielen Dank bei allen, die sich dieses Problems annehmen.
Gruß
Christian.
mein bisheriger Code:

Sub Adel()
Dim strName As String, strAdel As String, i As Long, lR As Long
lR = Cells(Rows.Count, 5).End(xlUp).Row
For i = 2 To lR
strName = Cells(i, 5).Value
If Left(strName, 3) = "de " Then
strAdel = "de"
ElseIf Left(strName, 4) ="von " Then
strAdel = "von"
'...usw.
Else: strAdel = ""
End If
If strAdel <> "" Then
strName = Mid(strName, Len(strAdel) + 2, Len(strName) - Len(strAdel)-1)
End If
Next i
End Sub

und anschließend nochmal das ganze für rechts...

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 18:54:57
Ulf
Schau mal bei www.excelformeln.de vorbei, die haben eine Formellösung.
Ulf
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 19:06:56
Christian
Hallo Ulf,
Danke für den Tipp,
aber ich fürchte, dass ich bei ca. 20 verschiedenen Suchkriterien, jeweils von links und von rechts im Zell-Eintrag mit diesen Formeln:
{=VERGLEICH("e";LINKS(RECHTS(A1;SPALTE(1:1));1);0)}
und
{=MAX((TEIL(A1;SPALTE(1:1);1)="e")*SPALTE(1:1))}
auch nicht weiter komme.
Zumal ich diesen Teil in weitere Makro-Routinen einbauen will (muss).
Gruß
Christian
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 19:10:53
Bert
Was willst du denn mit den separierten Textteilen anstellen?
Ist nicht ganz klar rübergekommen.
Bert
Anzeige
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 19:22:29
Christian
Hallo Bert,
ich möchte diese "Adelstitel" bei allen Einträgen einheitlich darstellen (also z.B.: alle ans Ende des Namens stellen). So dass aus "Graf von der Name" anschließend: "Name Graf von der" wird.
Um sicherzustellen, dass grade bei mehreren Namenszusätzen wie im Bsp. oben, die richtige Reihenfolge dieser Teilstrings eingehalten wird, wollte ich zunächst alle "separieren" und in einer weiteren Spalte (bsp. Spalte 6) darstellen.
Danke für deine Hilfe
Gruß
Christian
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 19:51:50
Bert
Sehr schön erläutert, poste doch mal eine Liste der möglichen
Strings, dann versuch ich mal was zu basteln.
Bert
Anzeige
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 19:04:25
ChrisL
Hi Christian
Falls doch mit Makro würde ich es etwa so lösen...
Dim iZeile As Long
For iZeile = 1 To Range("A65536").End(xlup).Row
Cells(iZeile, 1).Value = WorksheetFunction.Substitute(Cells(iZeile, 1).Value, "de ", "")
Cells(iZeile, 1).Value = WorksheetFunction.Substitute(Cells(iZeile, 1).Value, "van ", "")
Cells(iZeile, 1).Value = WorksheetFunction.Substitute(Cells(iZeile, 1).Value, "von ", "")
' etc.
Next iZeile

Die Sache mit dem Array kannst du ja trotzdem noch einbauen.
Gruss
Chris
Anzeige
AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 19:13:44
Christian
Hi Chris,
Danke für den Tipp.
Die Idee mit dem "WorksheetFunction.Substitute" ist schon mal nicht schlecht. Aber ich will den Titel ja nicht verlieren, sondern sozusagen ausschneiden und sagen wir mal in der nächsten Spalte einfügen.
wie füllt man denn einen Array mit verschiedenen "Teilstring"?
kannst du mir da helfen.
ArrAdel = ???
wie geht das?
Gruß
Christian

AW: VBA: Teil eines Zell-Eintrages in Array
19.03.2004 20:03:09
NE
Hi Christian,
suchst Du sowas in der Art, als Beispiel?
BTW das Leerzeichen ist default, kannst auch ein eigenes verwenden

Sub adlig()
Dim a$, b, i&
a = Cells(1, 1).Value
b = Split(a) 'oder eben split(a, "-")
For i = LBound(b) To UBound(b)
If b(i) = "von" Or b(i) = "van" Or b(i) = "Graf" Then _
Cells(1, i + 1) = b(i)
Next
End Sub

lg Nancy
Anzeige
Das ist sehr gut, aber...
19.03.2004 20:31:21
Christian
Hi Nancy,
gerade hast du mir 'ne neue Funkion gezeigt. (split kannte ich noch nicht)
Das funktioniert fast perfekt.
Ist es auch möglich dem "split" beizubringen, dass z.B: "von der" oder "Graf von der" nicht gesplittet werden sollen?
Ansonsten gefällt mir dein Code hervorragend.
Gruß
Christian
AW: Das ist sehr gut, aber...
19.03.2004 21:00:18
NE
Hi Christian,
hm, gefangen is gehangen, gesplittet is 'sch... ;-)
Nee Du, glaube das geht nicht, mit join(b) kannst den String zwar wieder zammensetzen,
aber eben wieder nur den ganzen, bzw. weiss ichs nicht besser :-(
Etwas umwegig evtl. noch so in etwa, ist jetzt auch nicht perfekt durchdacht,
nur mal als Ansatz:

Sub adlig()
Dim a$, b, i&, z%
a = Cells(1, 1).Value
b = Split(a)
z = -1
For i = LBound(b) To UBound(b)
If b(i) = "von" Or b(i) = "der" Or b(i) = "Graf" Then
z = z + 1
Cells(1, 2) = Cells(1, 2) & " " & b(z)
End If
Next
End Sub

cu Nancy
Anzeige
äh,
19.03.2004 21:13:54
NE
eh' jetzt irgendwelche Kommentare kommen ...
ich verbessere meine Idee ;;-))
Kaum schwört man sich kein y mehr zu verwenden, wird das z überflüssig ;;-))

Sub adlig()
Dim a$, b, i&
a = Cells(1, 1).Value
b = Split(a)
For i = LBound(b) To UBound(b)
If b(i) = "von" Or b(i) = "der" Or b(i) = "Graf" Then
Cells(1, 2) = Cells(1, 2) & " " & b(i)
End If
Next
End Sub

Perfekt !
19.03.2004 21:33:49
Christian
Hi Nancy,
vielen vielen Dank.
das ist genau das, was ich gesucht habe. Selbst wäre ich da wohl nie drauf gekommen.
Was Arrays und noch so paar andere Spielereien betrifft, werden meine grauen Zellen noch einiges aufzuholen haben.
viele Grüße
Christian
Anzeige
AW: Perfekt? --> weit entfernt ;-)
19.03.2004 21:40:41
NE
neenee, perfekt isses sicher nicht,
wenn ich mir den ganzen Thread so durchles' kommt da noch einiges auf dich zu ;-)
aber freut mich dasses Dir erstmal weiterhilft :-)
cu Nancy
ich will ja selbst auch noch was zu tun haben;-)
19.03.2004 22:01:13
Christian
Hi Nancy,
ich bin sehr froh, wenn ich hier in diesem tollen Forum Lösungen erhalte, die ich dann selbst auf meine konkrete Tabelle anwenden kann.
Ich denke nur so lern ich was dabei und kann das nächste Mal bei ähnlicher Aufgabenstellung darauf zurückgreifen.
Das Problem ist meistens, die Aufgabe hier im Forum so zu formulieren, dass jeder weiß, was gemeint ist, ohne die eifrigen Leser zuzutexten.
vielen Dank nochmals
cu
Christian
Anzeige
AW: VBA: Teil eines Zell-Eintrages in Array
20.03.2004 10:04:25
ChrisL
Hi Christian
Also Nancy hat dir ja schon gut geholfen, aber etwas fällt mir trotzdem noch ein...
Dim iZeile As Long
For iZeile = 1 To Range("A65536").End(xlup).Row
If InStr(Cells(iZeile, 1), "de ") > 0 Then
Cells(iZeile, 2).Value = Cells(iZeile, 2).Value & "de "
Cells(iZeile, 1).Value = WorksheetFunction.Substitute(Cells(iZeile, 1).Value, "de ", "")
End If
' usw
Next iZeile

Auch hier wäre ein Array natürlich elegant.
Gruss
Chris

321 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige