Clever-Excel-Forum

Normale Version: Spalte A durch Werte in Spalte B "bereinigen"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!

Hoffe es geht euch allen gut (nach diesem historischen Sonntag)!

Die passiven Jahre sind vorbei, jetzt wird wieder in die Hände gespuckt ... und das in Corona Zeiten ...

Ich habe Spalte A Namen in inter(-nationaler) Schreibweise

Vorname
Vorname Nachname
Vorname Vorname Nachname Nachname
VORNAME Nachname
Vorname NACHNAME
VORNAME NACHNAME
Laura L\u00f3pez
G\u00f6khan Sar\u0131gil
usw.

... wobei

\u00f3 = ó
\u00f6 = ö
\u0131 = ı

Ich würde diese Namen gerne bereinigen:

Die "Übersetzungen" wie \u00f3 = ó würde ich gerne in spalte C und D schreiben und das Ergbenis sollte direkt gut vergleichbar in Spalte B stehen:

Also 
Laura López statt Laura L\u00f3pez und
Gökhan Sarıgil statt G\u00f6khan Sar\u0131gil

In einem zweiten, eventuell direkt darauf folgenden Durchlauf sollten die GROSS klein varianten auf ersten Buchstabe GROSS rest klein geändert werden.

Ich habe eine minimierte Liste zum Testen erstellt.

Wenn jemand mehr Daten braucht einfach Bescheid sagen.

Danke und Gruss
Hola,
so?

Code:
=GROSS2(KLEIN(WECHSELN(WECHSELN(WECHSELN(A1;"\u00f3";"ó");"\u00f6";"ö");"\u0131";"ı")))
Gruß,
steve1da
Klappt super!

Danke!

Nur ... habe ich ich Spalte C und D ein paar mehr Werte (1369) zum Abgleichen als in der Testdatei.

Da könnte die Formel etwas zu lang werden oder?
Danke für den Hinweis ...

... kann man diesen VBA-Code auch mit einem VBA-Code für Bereinigung Gross/Kleinschreibung kombinieren?

Also 2 in 1 sozusagen ... ?
Hi!

ich komme mit dem VBA-Code leider nicht weiter ...

Kann mir jemand verraten auf wie viele Zeichen die Zeichenlänge bei dieser Formel beschränkt ist?

Dann würde ich so viel wie geht in dem fett markiertem Bereich nutzen ...

=GROSS2(KLEIN(WECHSELN(WECHSELN(WECHSELN(A1;"\u00f3";"ó");"\u00f6";"ö");"\u0131";"ı")))
Hi,

wenn das eine einmalige Aktion ist, dann geht auch folgender Formelworkaround.

1.
Dupliziere Spalte A in Spalte E mit Formel in E1:
=A1
und so weit runterkopieren, wie es Einträge in Spalte A gibt (in Deinem Beispiel bis Zeile 9 - aber in Deiner realen Mappe dann eben weiter runter)

2.
In F1 schreibst Du nun die Formel
=WECHSELN(E1;INDEX($C:$C;SPALTEN($A:A));INDEX($D:$D;SPALTEN($A:A)))
Kopiere sie ebenfalls so weit runter, wie es Einträge in Spalte A gibt. Zusätzlich kopierst Du sie so weit nach rechts, wie es gewünschte Änderungen in Spalten C und D gibt (in Deinem Beispiel sind es 3 - da würde es bis Spalte H reichen - aber in Deiner realen Mappe sind es sicher mehr).

Deine Wunschergebnisse stehen dann in der ganz rechten Spalte. Im Beispiel wäre das - wie gesagt - Spalte H.
Diese Einträge kannst Du dann kopieren und als reine Werte wieder einsetzen.

GROSS2 / KLEIN etc. kann man natürlich bei Bedarf noch ergänzen.
Hallo Michael, 19 

so: 21
[attachment=40397]

Welche Änderungen du vornehmen musst, steht im Code. Dodgy
Hi Case!

Danke für den Code ...

Wenn ich Dein Dateiformat öffne kommt die Meldung "Unlesbarer Inhalt" Entfernter Teil: Teil /xl/styles.bin. (Formatvorlagen)

Kannst Du mir die Datei bitte noch mal in einem anderen Format (ohne Fehlermeldung) schicken?

Danke
Hallo Michael, 19

hier als "xlsm" und der Code: 21
[attachment=40398]

Der Code ist auf deine Beispieldatei bezogen: Dodgy
Code:
Option Explicit
Public Sub Main()
    Dim strArrQ As Variant
    Dim strArrU As Variant
    Dim strRange As String
    Dim lngTMP As Long
    ' Range A1:A9 anpassen!!!!!!!!!!!!
    strRange = "A1:A9" ' Die Begriffe die bereinigt werden sollen
    With ThisWorkbook.Worksheets("Tabelle1") ' Der Tabellenblattname gegebenenfalls anpassen!!!!!!!!!!!
        strArrQ = .Range("C1:D3") ' Hier stehen die Suchen(Spalte C)/Ersetzen(Spalte D) - Begriffe anpassen!!!!!!!!!!!!!
        For lngTMP = 1 To UBound(strArrQ)
            .Range(strRange).Replace What:=(strArrQ(lngTMP, 1)), Replacement:=strArrQ(lngTMP, 2), LookAt:=xlPart
        Next lngTMP
        strArrU = .Range(strRange)
        For lngTMP = 1 To UBound(strArrU)
            strArrU(lngTMP, 1) = Application.Proper(strArrU(lngTMP, 1))
        Next lngTMP
        .Range(strRange) = strArrU
    End With
End Sub
Seiten: 1 2