expertenaustausch > microsoft.* > microsoft.excel

Erik Harren (20.03.2008, 17:12)
Tachchen!

Ich versuche mich garade daran, per Verketten eine Art Kürzelsystem zu
erstellen:

B2: Vo-Rname-Wennda
B3: Nachn-Ame

Schlimmsten Fall soll das Ergebnis nun ergeben: VRWNA

Mit VERKETTEN und SUCHEN (nach '-') komme ich bis jetzt nur zum Teil weiter.

Hat jemand eine Idee für mich?

Gruß,
Erik.
Martin Hentrich (20.03.2008, 17:47)
On Thu, 20 Mar 2008 16:12:20 +0100, Erik Harren
<erik_nurfuerspam> wrote:

>Ich versuche mich garade daran, per Verketten eine Art Kürzelsystem zu
>erstellen:
>B2: Vo-Rname-Wennda
>B3: Nachn-Ame
>Schlimmsten Fall soll das Ergebnis nun ergeben: VRWNA
>Mit VERKETTEN und SUCHEN (nach '-') komme ich bis jetzt nur zum Teil weiter.
>Hat jemand eine Idee für mich?


Erkläre erst einmal dein "Kürzelsystem" (Ich getraue mich gar nicht
nach dessen Sinnhaftigkeit zu fragen...). Nach deinem obigen Beispiel
wären es offensichtlich alle Großbuchstaben. Oder die
Anfangsbuchstaben und die nach einem "-" folgenden Zeichen.

Erst wenn du deine schlüssige Systematik verbal eindeutig beschreibst,
kann man sich an einen VBA-Algorithmus machen.

Martin
Erik Harren (20.03.2008, 18:36)
Tachchen!

Martin Hentrich wrote:
> Erkläre erst einmal dein "Kürzelsystem" (Ich getraue mich gar nicht
> nach dessen Sinnhaftigkeit zu fragen...). Nach deinem obigen Beispiel
> wären es offensichtlich alle Großbuchstaben. Oder die
> Anfangsbuchstaben und die nach einem "-" folgenden Zeichen.


Da Deine Glaskugel zu funktionieren scheint, erübrigt sich die
weiterführende Erklärung doch, oder =;-) ?
Du hast das schon ganz richtig erfasst:
Alle Großbuchstaben sollen erfasst werden - auch ohne vorstehendem
Bindestrich. Beim ersten Buchstaben der Zelle ist es einfach - Links(B2;1).

Gruß,
Erik.
Peter Schleif (20.03.2008, 19:07)
Erik Harren schrieb am 20.03.2008 16:12:
> B2: Vo-Rname-Wennda
> B3: Nachn-Ame
> Schlimmsten Fall soll das Ergebnis nun ergeben: VRWNA


Du könntest untenstehende Code in ein eigenes Modul kopieren und dann
die Funktion "kuerzel" aufrufen. In ihrer jetzigen Form verarbeitet
sie Zellen oder verkette Zellen. Zum Beispiel:

C2 =kuerzel(B2)
D2 =kuerzel(B2&B3)
E2 =kuerzel(B2)&kuerzel(B3)

Falls Du gleich ganze Bereiche übergeben willst, melde dich bitte nochmal.

Peter

Public Function kuerzel(text As Variant) As String
Dim treffer As Variant

With CreateObject("VBScript.RegExp")
.Pattern = "([A-ZÄÖÜ])"
.Global = True
For Each treffer In .Execute(text)
kuerzel = kuerzel & treffer.SubMatches(0)
Next
End With
End Function
Martin Hentrich (20.03.2008, 19:08)
On Thu, 20 Mar 2008 17:36:29 +0100, Erik Harren
<erik_nurfuerspam> wrote:

>Alle Großbuchstaben sollen erfasst werden - auch ohne vorstehendem
>Bindestrich. Beim ersten Buchstaben der Zelle ist es einfach - Links(B2;1).


Was hältst du davon, in jeder Zeichenfolge jedes Zeichen nacheinander
abzufragen, ob es zur Menge {A..Z} gehört und falls "ja", dann wird
das Zeichen an die Ergebniszeichenkette angehängt?

Kommt natürlich die Frage wie performant dies sein soll, also wie
viele abzufragende Zeichenketten es gibt.

Martin
Bernd P (21.03.2008, 17:45)
Hallo Erik,

eine scheußliche Matrixformel (mit STRG + SHIFT + ENTER eingeben):
=multicat(TEIL(WIEDERHOLEN("-";B2<>"")&B2&"-"&B3;ZEILE(INDIREKT("1:"&LÄNGE(WIEDERHOLEN("-";B2<>"")&B2&"-"&B3)));--
("-"=TEIL("
"&WIEDERHOLEN("-";B2<>"")&B2&"-"&B3;ZEILE(INDIREKT("1:"&LÄNGE(WIEDERHOLEN("-";B2<>"")&B2&"-"&B3)));
1))))

Die benutzerdefinierte Funktion multicat findest Du hier:


Melde Dich, falls Du eine saubere VBA Lösung haben möchtest...

Viele Grüße,
Bernd
Ähnliche Themen