3.3k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich habe in einer Spalte verschieden lange Zeichenfolgen und suche die Zeichenfolge mit der größten Läne. Ich wollte dabei eine Schleife umgehen, mit der ich für jede Zelle die Länge einzeln bestimmen muss... Mein Versuch

intMax = Application.Max(Len(Range("B1:B100")))

klappt aber nicht. Hat jemand einen Tipp?
Danke und Gruß
Andreas

12 Antworten

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

ich möchte dann zu jeder str-Variablen in B1:B100 einen Zusatztext (..& "xxxx") eingeben und zwar so, dass dieser Zusatztext immer erst nach der Stelle beginnt, die ich vorher mit der Formel berechnet habe, so dass im Ergebnis alle Einträge die gleiche Länge haben.
Gruß
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

vielleicht so :-)

gruss nighty

Sub Text()
Dim Dat As Variant
Dim Daten As Variant
Dim LText As String, Lleer As String, StrLänge As String
Dat = Range("A1:A10")
LText = "Hallo"
Lleer = " "
For Each Daten In Dat
If Len(Daten) > StrLänge Then StrLänge = Len(Daten)
Next
For Daten = 1 To UBound(Dat)
If Dat(Daten, 1) <> "" Then Dat(Daten, 1) = Dat(Daten, 1) & Mid(Lleer, 1, StrLänge - Len(Dat(Daten, 1))) & LText
Next
Range("A1:A10") = Dat
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all

korrigiert

gruss nighty

Sub Text()
Dim Dat As Variant, Daten As Variant
Dim LText As String, Lleer As String
Dim StrLänge As Integer
Dat = Range("A1:A10")
LText = "Hallo"
Lleer = " "
For Each Daten In Dat
If Len(Daten) > StrLänge Then StrLänge = Len(Daten)
Next
For Daten = 1 To UBound(Dat)
If Dat(Daten, 1) <> "" Then Dat(Daten, 1) = Dat(Daten, 1) & Mid(Lleer, 1, StrLänge - Len(Dat(Daten, 1))) & LText
Next
Range("A1:A10") = Dat
End Sub
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo nighty,

danke für deine Antwort - wie immer von dir perfekt!!!!
Das blöde dabei ist nur, dass durch die unterschiedliche Zeichenbreite der einzelnen Buchstaben die Zeichenfolgen nach der "Behandlung" (Auffüllen mit Leerzeichen) immer noch unterschiedliche Längen haben.

BANTLEON OPPORTUNITIES L (PA) Hallo
ACATIS - GANÉ VALUE EVENT FONDS UI A Hallo
CARMIGNAC EMERGING PATRIMOINE A EUR Hallo
BANTLEON OPPORTUNITIES L (PA) Hallo

Aber das kann man sicher nicht ändern, außer man benutzt eine neue Spalte für das "Hallo", was ich aber vermeiden wollte, da es nicht in die bestehen Dateistruktur passt. Oder hast du hier auch noch eine Idee?
In jedem Fall - Danke und Gruß.
A.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

bei solcher Darstellung sollte auch der richtige Zeichensatz genutzt werden

Fonts mit gleicher Zeichenbreite waere bei deinem anliegen optimal fuer eine exakte darstellung

Fonts werden mittlerweile in Familien unterteilt
5 der bekanntesten familien
Zeichensatz mit festem Zeichenabstand, mit oder ohne Serifen wie z.B. Courier New
Zeichensatz mit proportionalem Zeichenabstand und Serifen wie z.B. Times New Roman
Zeichensatz mit Handschrift ähnlichem Aussehen wie z.B. Script
Zeichensatz mit proportionalem Zeichenabstand und ohne Serifen wie z.B. Arial
Zeichensatz wenn keine Daten über den Zeichensatz existieren oder aber die Daten beliebig sind

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

jetzt heisst es nur noch den richtigen font finden

gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

ja, super das ist die Lösung. War mir gar nicht klar, dass es einen Zeichensatz mit fester Zeichenbreite gibt....
Danke und Gruß.
Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein vorhandener font waere courier

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

courier wuerde also zur nicht proportionalem Familie gehören einer sechsten Familie nach obigen Beispiel

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi andres ^^

ein kleiner Automatismus

Abtastung der fontgröße(erste zelle deines bereiches)
der Bereich bekommt courier mit der azuvor festgestellten größe zugewiesen

der Bereich ist an einer stelle anzupassen

gruss nighty

Sub Text()
Dim Dat As Variant, Daten As Variant
Dim LText As String, Lleer As String
Dim StrLänge As Integer
Dim Bereich As Range
Set Bereich = Range("A1:A10")
Bereich.Font.Name = "Courier"
Bereich.Font.Size = Range(Cells(Bereich.Row, Bereich.Column), Cells(Bereich.Row, Bereich.Column)).Characters(Start:=i, Length:=1).Font.Size
Dat = Bereich
LText = "Hallo"
Lleer = " "
For Each Daten In Dat
If Len(Daten) > StrLänge Then StrLänge = Len(Daten)
Next
For Daten = 1 To UBound(Dat)
If Dat(Daten, 1) <> "" Then Dat(Daten, 1) = Dat(Daten, 1) & Mid(Lleer, 1, StrLänge - Len(Dat(Daten, 1))) & LText
Next
Bereich = Dat
End Sub
...