Wie kürze ich Text in Excelzellen mit Visual Basic

Hallo Experten!

Ein wenig kenne ich mich mit VBA aus und bis jetzt hat mir mein Buch MSExcel97 -Visual Basic, Schritt für Schritt von Reed/Jacobson immer wieder weitergeholfen. Was ich jetzt suche, habe ich leider nicht finden können und zwar:
In Zellen steht Text (Namen), wobei dieser jeweils unterschiedliche Anzahlen von Zeichen hat, welchen ich auf die ersten 12 Zeichen kürzen möchte. Das Ganze in Analogie zur Funktion LINKS, jedoch in einem Makro eingebunden, um es automatisch ablaufen lassen zu können.

Besten Dank im Voraus für eure Tipps und
fröhliche Weihnachten
wiedhalm

Hallo,

die Funktion heißt in VBA auch LINKS bloß auf englisch.

Du kannst mittels einer Schleife alle Felder Deiner Liste durchlaufen
überprüfe einfach, ob Text in der Zelle drin steht.
Ich hab leider kein Excel zur Hand darum kann ich Dir keinen Code schicken.

In etwa so:
Dim Cnt as long

Cnt=1
Do while not [Zelle]+Cnt=""
[Zelle]+Cnt=left([Zelle]+Cnt,12)
Cnt=Cnt+1
loop

Du kannst übrigens auch die Makroaufzeichnung nehmen um VBA Code zu produzieren und z.B. raus zu finden, wie Du eine Zelle im Excel auswählen kannst. Oder Formatieren. Ich nutze das auch häufig :wink:
Gutes Gelingen!

Ich hoffe, Dir geholfen zu haben

LG Cornelia

Hallo Wiedhalm,
Im folgenden Beispiel werden die Texte in Spalte 1 für die ersten 100 Zeilen im aktiven Tabellenblatt auf maximal 12 Zeichen gekürzt:

Sub TextKuerzer
 Dim ze%
 For ze = 1 to 100
 Cells(ze, 1) = Left(Cells(ze, 1), 12)
 Next
End Sub

Ich hoffe, das hilft Dir weiter.
Gruß Dieter

Hallo Dieter!
Zunächst ein herzliches Danke für die rasche Antwort.
Ich habe dein Makro, sowie von dir geschrieben in meinen VBA Modul hineinkopiert, dann im Arbeitsblatt eine Zelle mit langem Namen aktiviert und danach im Schrittmodus das Makro abgearbeitet. Es kommt keine Fehlermeldung von meinem VBA, ver 6.5, aber auch keine Wirkung in der Zelle. Muß ich vielleicht noch etwas tun, was du vorausgesetzt hast, ich aber in meiner Ahnungslosigkeit nicht weiß?
Grüße
wiedhalm

Sub TextKuerzer
Dim ze%
For ze = 1 to 100
Cells(ze, 1) = Left(Cells(ze, 1), 12)
Next
End Sub

Sub TextKuerzer
Dim ze%
For ze = 1 to 100
Cells(ze, 1) = Left(Cells(ze, 1), 12)
Next
End Sub

Hallo Dieter!

Große Entschuldigung ist angesagt!

Weiß nicht warum, habe deinen Sub ein zweites Mal probiert, funktioniert 100%ig.
Nochmals besten Dank - PROBLEM GELÖST!!!

Frohe Weihnachten und herzliche Grüße
wiedhalm

Hallo,
lässt sich die Funktion LINKS nicht im Makro verwenden? Ansonsten kann ich auch nicht weiterhelfen…

Grüße
Andreas

…hätt’ mich auch gewundert.

Frohe Weihnacht und viele Grüße
Dieter

Hallo wiedhalm,

das hört sich für mich an nach einer Zuweisung mittels „left“ (zugehörig zu „right“ und „mid$“).
Im Prinzip läuft das so ab:
orig=cells(x,y).value
neu = left(orig,12)

Schönen Gruß und noch schöne Feiertage,

Martin

Hallo
ich kann dir leider bei deinem problem nicht helfen. Ich war bis vor ein paar jahren ein Spezialist in VBA für Excel. Leider habe ich jetzt lange jahre nichts mehr gemacht, so dass ich das meiste vergessen habe.
ich werde mich hier als spezilalist dafür austragen.
Sorry und viel glück

Wolfgang

Hallo wiedhalm,

Hier mal ein Beispielcode. Der kürzt die Spalte B auf 12 Zeichen (Ausser B1):

Sub ZellenKuerzen()
Dim zelle As Range
For Each zelle In Range(„B2:B“ & Cells(Rows.Count, 2).End(xlUp).Row)
zelle = Left(Trim(zelle), 12)
Next
End Sub

Gruß
Mathias Sahm

Hallo wiedhalm,

ich weiß nicht genau wo es jetzt genau bei dir hakt.

Suchst du die Funktion, mit der man die ersten 12 Zeichen eines Strings in VBA erhalten kann? Das geht mit Left(Eingabetext,Anzahl_Zeichen). Weitere ähnliche Funktionen sind Right(…) für „die letzten x Zeichen“ der übergebenen Zeichenkette oder Mid(…) um eine Anzahl Zeichen ab einer bestimmten Position in einem String zurückgegeben zu bekommen.

Oder wolltest du wisssen, wie man die Excel Funktion „=LINKS(A1;12)“ mit Visual Basic Makro nachbauen kann, so dass man deinen eigenen Code wie eine Excel Funktion benutzen kann?

Das ginge in etwa so:

Public Function meinLinks(strText As String, intAnzahl As Integer) As String
meinLinks = Left(strText, intAnzahl)
End Function

Dieser Code müsste in einem Modul in der jeweiligen Excel Arbeitsmappe abgelegt werden, damit von Excel aus darauf mit „=meinLinks(A1,12)“ darauf zugegriffen werden kann.

Ich hoffe, ich konnte dir helfen.

Gruß

Manuel

Die Funktion LINKS heißt bei VBA Left(, ). Man kann aber auch mit mid(…) arbeiten. Da Namen auch unterschiedlich lang sein können, kann man mit instr(…) nach bestimmten Zeichen Suchen, z.B. Leerzeichen, um die Position des Leerzeichens zu bestimmen. So kann man die Left-Funktion z.B. auf die Vornamen beschränken.
Beispiel: In Zelle A1 steht „Max Mustermann“
Sub Vorname()
Vorname = Left(Range(„A1“).Value, Instr(1, Range(„A1“).Value, " ") -1 )
End Sub

Die Minus 1 steht dafür, dass das Leerzeichen nicht benötigt wird. Hinweis: In den Zeichenketten sollte auch immer ein Leerzeichen sein, damit dies funktioniert. Andernfalls muss das Vorhandensein des Leerzeichens vorher abgeprüft werden (z.B. If Instr(…) > 0 Then).

Hallo!

Besten Dank für die Bemühungen, Problem bereits gelöst!
Grüße
wiedhalm

Hallo!

Besten Dank für die Bemühungen, Problem bereits gelöst!
Grüße
wiedhalm

.

Hallo!

Besten Dank für die Bemühungen, Problem bereits gelöst!
Grüße
wiedhalm.

Hallo!

Besten Dank für die Bemühungen, Problem bereits gelöst!
Grüße
wiedhalm…

Hallo!

Besten Dank für die Bemühungen, Problem bereits gelöst!
Grüße
wiedhalm…

Hallo,

prinzipiell funktioniert sowas so:

Sub kuerzen()
 Dim i As Integer
 Const cLen = 12

 For i = 1 To 6
 Cells(i, 2) = Left(Cells(i, 1), cLen)
 Next i
End Sub

Hi,

versuchs mal mit

Mid(String, 1, 12)

wobei String eine Variable ist, die den aktuellen Zelleninhalt (Value-Property) enthält.

Gruß
Cas

Hallo!

Besten Dank für die Bemühungen, Problem bereits gelöst!
Grüße
wiedhalm