Großbuchstaben-Text in Groß-Kleinschreibung
#1
Hallo zusammen,

ich habe Artikeltexte, die ich in unseren Webshop importieren muss. Problem: unser Lieferant schreibt alles Groß, mein Chef möchte klassische Groß-kleinschreibung.

Beispiel:
HORNADY CUSTOM GRADE SERIES III 2-TLG MATRIZENSATZ 5,45X39/.221

Mit der Excel-Funktion löse ich das zumindest zum Teil:
HORNADY Custom Grade Series Iii 2-Tlg Matrizensatz 5,45X39/.221

Zum Teil weill natürlich die römische Ziffer hinter "Series" erhalten bleiben soll, auch im konvertierten Text soll
"Series III" stehen.

Irgendjemand eine Idee? Ich möchte nur ungern 180 Artikeltexte von Hand ändern Wink
Antworten Top
#2
Hallo,

in A1 steht dein Text: 
=LINKS(A1; FINDEN(" "; A1)-1) & GROSS2(WECHSELN(A1; LINKS(A1; FINDEN(" "; A1)-1); ""))

Gruß Sigi
Antworten Top
#3
Was ich vergessen hatte: Hinter "Series" können die römischen Ziffern "I" bis "V" stehen.
Antworten Top
#4
Hallo,

Excel kann Zahlen in römische Zahlen wandeln (=römisch(1;0)" und wieder zurück (=arabisch(B1)).

Eine recht sichere Variante ist, den gesamten Text in einzelne Worte zu splitten und jeweils zu prüfen, ob "=arabisch()" möglich ist.

Alternativ könnten "RegEx" gehen.

mfg
Antworten Top
#5
In Power Query gibt es dazu direkt eine Funktion. Aber egal, ob Formel, Makro oder Power Query, meist entsprechen die Ergebnisse nicht zu 100% den tatsächlichen Wunschergebnissen, da es Ausnahmen gibt. Denn "MODELLAUTO BMW X3 soll wohl kaum in "Modellauto Bmw X3" umgewandelt werden. Auch "200 CM" soll wohl kaum in "200 Cm" transformiert werden.

Das lässt sich aber in einem Makro oder einer Power Query recht gut regeln. Wobei ich es dann mit Power Query machen würde.

Zitat:... die ich in unseren Webshop importieren muss.

Vermutlich gibt es da noch einige zusätzliche Schritte der Datenaufbereitung, bis das Ergebnis für den Webshop importiert werden kann. Diese sollten sich auch alle in die Power Query integrieren lassen.
Antworten Top
#6
Ausprobiert, die römischen Ziffern hinter "Series" sind nach wie vor "komisch" also "Iii" oder "Iv"

Hmm... mit RegEx habe ich mich nie auseinandergesetzt ...
Antworten Top
#7
Hallo,

dieser Code wandelt alle römischen Zahlen von 1 bis 20 in Spalte "D" in Großbuchstaben:

Code:
Sub T_1()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim i As Integer

For i = 2 To 19
    y = Columns("D").Replace(WSF.Proper(WSF.Roman(i, 0)), UCase(WSF.Roman(i, 0)))
Next i
End Sub

mfg
Antworten Top
#8
Wenn es nicht zu viele Ausnahmen sind, könnte man folgenden VBA Code verwenden
Code:
Option Explicit

Function ProperCaseWithExceptions(inputStr As String) As String
    Dim words As Variant
    Dim i As Long
    Dim result As String
    Dim exceptions As Variant
    Dim word As String

    ' Define the words that should remain in upper case
    ' improvement: put values on a sheet for better maintenance ...
    exceptions = Array("BMW", "I", "II,", "III", "IV", "V")

    ' Split the input string into words
    words = Split(inputStr, " ")

    ' Loop through each word
    For i = LBound(words) To UBound(words)
        word = words(i)

        ' Check if the word is in the exceptions array
        If IsInArray(UCase(word), exceptions) Then
            result = result & word & " " ' Keep it in upper case
        Else
            ' Convert to Proper Case
            result = result & Application.WorksheetFunction.Proper(word) & " "
        End If
    Next i

    ' Remove trailing space and return the result
    ProperCaseWithExceptions = Trim(result)
End Function

Function IsInArray(val As String, arr As Variant) As Boolean
    Dim element As Variant
    IsInArray = False
    For Each element In arr
        If element = val Then
            IsInArray = True
            Exit Function
        End If
    Next element
End Function
Antworten Top
#9
Danke für eure Antworten.

Ich habe es jetzt so gelöst (anderer Text als oben):
HORNADY CUSTOM GRADE SERIES I 2-TLG MATRIZENSATZ .204 RUGER/.204

Formel
Code:
=VERKETTEN(LINKS(AM6;LÄNGE(Hersteller));" #";CB6;" ";GROSS2(TEXTNACH(TEXTVOR(AM6;" ";4);" ";1));" ";TEXTNACH(TEXTVOR(AM6;" ";5);" ";4);" ";GROSS2(TEXTNACH(AM6;" ";5)))

ergibt:
HORNADY #546201 Custom Grade Series I 2-Tlg Matrizensatz .204 Ruger/.204

Ja, ich habe noch die Hersteller-Artikelnummer eingefügt.
Antworten Top
#10
Jetzt ist die ursprüngliche "SERIE III" zur "Serie I" geworden und eigentlich sollte "2-TLG" nach "2-tlg." übersetzt werden.

Ich denke, auf Dauer wird dein aktueller Lösungsansatz nicht zielführend sein.

Hier mal ein Beispiel wie eine Lösung mit Power Query aussehen kann.


Angehängte Dateien
.xlsx   cef - Großbuchstaben-Text in Groß-Kleinschreibung (PQ).xlsx (Größe: 21,76 KB / Downloads: 4)
[-] Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:
  • Grosskranfan
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste