eine vielleicht simple Frage, aber ich habe bei Google und in der
Excel-Hilfe keine Antwort auf meine Frage gefunden (oder mit fehlt das
richtige Suchwort): Ich möchte ein VBA-Makro schreiben, dass bspw.
folgendermaßen deklariert ist:
| public sub GROSS3(Byval Zellenname as String)
| end sub
Ich möchte, wie der Funktionsname schon andeutet, jeweils den ersten
Buchstaben eines jeden Wortes in einer Zelle groß schreiben,
allerdings möchte ich dazu ein paar Ausnahmen deklarieren. Ich bereite
gerade eine Personenliste für einen Import vor, die leider nur
komplett in Großschrift vorliegt (eine andere Liste kann uns leider
nicht zur Verfügung gestellt werden). Um die manuelle Nachbearbeitung
möglichst gering zu halten, möchte ich u.a. bei den Anreden häufig
vorkommende Wörter gleich richtig schreiben (GROSS2 würde aus DR. MED.
Dr. Med. machen, richtig wäre Dr. med., aus GMBH würde Gmbh, richtig
wäre GmbH). Deswegen möchte mit VBA die jeweils angegebene Zelle selbe
parsen und Wörter, wie die eben genannten schonmal korrekt schreiben.
Gibt es da eine Möglichkeit, in einer Formel eine VBA-Funktion mit
Parameter aufzurufen?
TIA + mfg
David Rummel
David Rummel schrieb in der newsgroup microsoft.public.de.excel:
GROSS2 lässt sich per VBA leicht in einer benutzerdefinierten Function
umsetzen:
Function gross3(Zellenname As Range)
Dim tmp As String
tmp = StrConv(Zellenname, vbProperCase)
If InStr(tmp, " Med ") > 0 Then _
tmp = Replace(tmp, "Med", "med")
If InStr(tmp, " Gmbh") > 0 Then _
tmp = Replace(tmp, "Gmbh", "GmbH")
gross3 = tmp
End Function
Replace gibt es erst ab XL2000. Es ginge ansonsten auch
WorksheetFunction.Substitute.
Gruß
stefan
--
Immer auf dem aktuellen Stand mit den Newsgroups von freenet.de:
http://newsgroups.freenet.de
Hallo Stefan,
danke für Deine Antwort, aber ich glaube, Du hast mich falsch
verstanden: Ich möchte eine selbstgeschrieben Funktion, wie z.B. die
von dir eben gepostede GROSS3 aus Excel heraus aufrufen wie eine
Formel. In deinem Beispiel würde, wenn z.B. in Zelle A2 der Wert "XYZ
GMBH" stünde, in Zelle A3 folgendes stehen, wenn ich dort die Formel
=GROSS3(A2) engeben würde:
"Xyz GmbH"
Problem ist wohl aber, dass man Makros und Formeln irgendwie nicht
vermengen kann, jedenfalls steht bei mir in Spalte A3 #NAME?
Ich hätte halt gerne eine Funktion, die ich in einer Formel nutzen
kann, weil das halt irgendwie flexibler ist, als dem Makro von Anfang
an zu sagen, welche Zellen es umwandeln muss.
Für weitere Tipps wäre ich sehr dankbar.
mfg + TIA
David.
wo hast du denn den Code für die Function stehen? Der muss in ein
Standardmodul (im VBA-Editor über Einfügen/Modul). Dann ist die Function
wie eine Tabellenfunktion verfügbar.
Gruß
stefan
David Rummel schrieb in der newsgroup microsoft.public.de.excel:
Hallo Stefan,
>wo hast du denn den Code für die Function stehen? Der muss in ein
>Standardmodul (im VBA-Editor über Einfügen/Modul). Dann ist die Function
>wie eine Tabellenfunktion verfügbar.
Tatsache, hatte die Funktion in "Tabelle1" stehen, im Modul
funktionierts jetzt aber. Danke für die Hilfe.
mfg
David.
Hallo David,
hier noch eine Möglichkeit, das ganze in einem Rutsch mit einem Makro zu
bewältigen.
Den Bereich, in dem die zu korrogierenden Daten stehen, bennenst Du mit
"Daten" (ohne die "").
In eine zweispaltige Tabelle schreibst Du die "falschen" und die
korrigierten Schreibweisen (z. B. D1 = DR. MED | E1 = Dr. med usw).
diese Tabelle benennst Du mit "Korrektur"
Option Explicit
Option Base 1
Sub Richtig()
Dim Ber As Range
Dim Zelle As Range
Dim Tmp As String
Dim Korr As Variant
Dim i As Byte, j As Byte
Korr = Range("Korrektur")
Set Ber = Range("Daten")
For Each Zelle In Ber
Tmp = Zelle.Value
For i = 1 To Range("Korrektur").Rows.Count
If InStr(1, Tmp, Korr(i, 1)) > 0 Then
Tmp = Replace(Tmp, Korr(i, 1), Korr(i, 2))
End If
Next
Tmp = Replace(Tmp, Left(Tmp, 1), UCase(Left(Tmp, 1)))
Zelle.Value = Tmp
Next Zelle
End Sub
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de