Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Suchen und Ersetzen mit Bedingungen in Schleife

Suchen und Ersetzen mit Bedingungen in Schleife
22.06.2018 10:06:11
Rilana
Guten Morgen liebe Excelprofis,
ich habe ein für mich sehr komplexes VBA-Problem, bei dem ich mit meinen Kenntnissen (auch mit der Suche im Forum) nicht weiter komme und daher euch um Hilfe bitte:
Zum Problem:
Ich habe eine Excel Mieterliste die wie folgt aufgebaut ist:
Spalte A: Mietername
Spalte B: Angabe ob Wohnungs- oder Gewerbemieter
(Innnerhalb der Spalten können auch Leerzeilen enthalten sein.)
Durch die neue Datenschutzverordnung ist es nun notwendig, dass ich zumindest die Wohnungsmieter anonymisiere. Statt dem Namen (z.B. Max Mustermann usw.) möchte ich nun fortlaufend nummeriert 'Mieter 1', 'Mieter 2' usw. in der Spalte A stehen haben. Die Namen der Gewerbemieter sollen unverändert bleiben. Es kann jedoch sein, dass ein Mietername mehrmals in Spalte A auftaucht (da er z.B. auch noch separat einen Stellplatz angemietet hat), der soll dann zwecks Zuordnung jeweils die gleiche Mieternummer erhalten.
Als Beispiel:
vorher:
Spalte A - Spalte B
M. Mustermann - Wohnungsmieter
F. Meier - Wohnungsmieter
ABC GmbH - Gewerbemieter
C. Schuster - Wohnungsmieter
F. Meier - Wohnungsmieter
nachher:
A - B
Mieter 1 - Wohnungsmieter
Mieter 2 - Wohnungsmieter
ABC GmbH - Gewerbemieter
Mieter 3 - Wohnungsmieter
Mieter 2 - Wohnungsmieter
Von der Theorie habe ich es mir so vorgestellt:
- in einer Schleife soll für die Zellen 1 bis 500 in Spalte A geprüft werden ob ein Mieter eingetragen ist, ob es sich um einen Wohnungsmieter handelt und ob der Beginn des Mieternamens ungleich 'Mieter' ist.
- wenn dem so ist, soll der Mieter wie oben beschrieben umbenannt werden, und es muss geprüft werden, ob der Mieter in Spalte A noch einmal auftaucht und entsprechend mit gleicher Mieternummer bezeichnet werden muss.
Leider habe ich bei der Umsetzung in VBA nicht einmal einen Ansatz, so dass ich für jede Hilfe und jeden Tip sehr dankbar wäre.
Viele Grüße
Rilana
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ansatz
22.06.2018 11:23:13
Fennek
Hallo,
teste diesen Code (an einer Kopie)

Sub T_1()
Dim Nm As Name
On Error Resume Next
With ThisWorkbook
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
If Cells(i, 2) = "Mieter" Then
ll = Len(.Names(Cells(i, 1).Text).Comment)
If Err.Number  0 Then
m = m + 1
.Names.Add(Cells(i, 1), "_", False).Comment = "Mieter " & m
Debug.Print .Names.Count, .Names(Cells(i, 1).Text).Name, .Names(Cells(i, 1).Text). _
Comment
Err.Clear
End If
End If
Next i
For Each Nm In ThisWorkbook.Names
ActiveSheet.Cells.Replace Nm.Name, Nm.Comment
Next Nm
End With
End Sub
Der Code kann auch tückisch sein ...
mfg
Anzeige
AW: Ansatz
22.06.2018 12:37:51
Rilana
Hallo Fennek,
vielen Dank für die schnelle Antwort, leider hat es bei mir allerdings nicht funktioniert.
Ich habe mal die Beispieldatei hochgeladen:
https://www.herber.de/bbs/user/122247.xlsm
Vielleicht fällt Dir ja noch was anderes ein?!
Gruß Rilana
Anzeige
AW: VBA, besser als xlsx
22.06.2018 14:53:47
Fennek
Hallo,
hier der angepasste Code, der in der Bsp-Datei läuft:

Private Sub cmd_anonym_Click()
Dim Nm As Name
Dim lr As Long
Dim m As Integer
Dim Tx As String
On Error Resume Next
With ActiveWorkbook
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
If Cells(i, 2) = "Wohnungsmieter" Then
Tx = Replace(Cells(i, 1), " ", ""): Cells(i, 1) = Tx
ll = Len(.Names(Tx).Comment)
If Err.Number  0 Then
m = m + 1
.Names.Add(Tx, "_", False).Comment = "Mieter " & m
Debug.Print .Names.Count, .Names(Tx).Name, .Names(Tx).Comment
Err.Clear
End If
End If
Next i
For Each Nm In ThisWorkbook.Names
ActiveSheet.Columns(1).Replace Nm.Name, Nm.Comment
Next Nm
End With
End Sub
Es ist besser, den Code entweder in ein anderes Workbook oder aus einer Text-Datei nur wenn er gebraucht wird einzufügen und die Datei als XLSX (also ohne Makros) zu speichern.
mfg
(lr muss asl interger oder long dimensioniert sein)
Anzeige
AW: VBA, besser als xlsx
22.06.2018 15:14:32
Rilana
Hallo Fennek,
funktioniert einwandfrei - hammer!!!
Hab 1000 Dank und ein schönes Wochenende !!!
Viele Grüße
Rilana
AW:Korrektur
22.06.2018 15:40:49
Fennek
Hallo,
hier eine kleine Verbesserung, wenn Monate später Mieter wechseln bzw Alt-Mieter etwas dazu mieten:

Private Sub cmd_anonym_Click()
Dim Nm As Name
Dim lr As Long
Dim m As Integer
Dim Tx As String
On Error Resume Next
With ActiveWorkbook
m = .Names.Count
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
If Left(Cells(i, 1), 6)  "Mieter" And Cells(i, 2) = "Wohnungsmieter" Then
Tx = Replace(Cells(i, 1), " ", ""): Cells(i, 1) = Tx
ll = Len(.Names(Tx).Comment)
If Err.Number  0 Then
m = m + 1
.Names.Add(Tx, "_", False).Comment = "Mieter " & m
Debug.Print .Names.Count, .Names(Tx).Name, .Names(Tx).Comment
Err.Clear
Else
Cells(i, 1) = .Names(Tx).Comment
End If
End If
Next i
For Each Nm In ThisWorkbook.Names
ActiveSheet.Columns(1).Replace Nm.Name, Nm.Comment
Next Nm
End With
End Sub
Noch einmal: speichere die Daten und den VBA-Code getrennt!
mfg
Anzeige
AW: AW:Korrektur
25.06.2018 11:50:30
Rilana
Guten Morgen,
besten Dank für die Verbesserung, wobei der Fall wahrscheinlich nicht auftauchen wird.
Viele Grüße und eine schöne Woche...
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Suchen und Ersetzen von Mietername mit VBA in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei mit der Mieterliste.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:

    Private Sub cmd_anonym_Click()
       Dim Nm As Name
       Dim lr As Long
       Dim m As Integer
       Dim Tx As String
       On Error Resume Next
       With ActiveWorkbook
           m = .Names.Count
           lr = Cells(Rows.Count, 1).End(xlUp).Row
           For i = 2 To lr
               If Left(Cells(i, 1), 6) <> "Mieter" And Cells(i, 2) = "Wohnungsmieter" Then
                   Tx = Replace(Cells(i, 1), " ", ""): Cells(i, 1) = Tx
                   ll = Len(.Names(Tx).Comment)
                   If Err.Number <> 0 Then
                       m = m + 1
                       .Names.Add(Tx, "_", False).Comment = "Mieter " & m
                       Debug.Print .Names.Count, .Names(Tx).Name, .Names(Tx).Comment
                       Err.Clear
                   Else
                       Cells(i, 1) = .Names(Tx).Comment
                   End If
               End If
           Next i
           For Each Nm In ThisWorkbook.Names
               ActiveSheet.Columns(1).Replace Nm.Name, Nm.Comment
           Next Nm
       End With
    End Sub
  5. Speichere deine Datei als .xlsm, um die Makros zu aktivieren.

  6. Schließe den VBA-Editor und gehe zurück zu Excel.

  7. Führe das Makro aus:

    • Drücke ALT + F8, wähle cmd_anonym_Click und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 1004"

    • Lösung: Stelle sicher, dass die Mieter in Spalte A korrekt eingetragen sind und die zweite Spalte tatsächlich "Wohnungsmieter" enthält.
  • Fehler: Makro funktioniert nicht

    • Lösung: Überprüfe, ob die Datei im richtigen Format (.xlsm) gespeichert ist und ob die Makros aktiviert sind.
  • Fehler: Doppelte Mieter werden nicht korrekt ersetzt

    • Lösung: Achte darauf, dass der Code den Namen korrekt speichert und bei doppelten Einträgen richtig ersetzt.

Alternative Methoden

Wenn VBA nicht Dein bevorzugtes Werkzeug ist, kannst Du auch die Suchen und Ersetzen-Funktion in Excel verwenden, allerdings ist dies weniger flexibel.

  1. Wähle die Zellen in Spalte A aus.
  2. Drücke Strg + H, um das Dialogfeld Suchen und Ersetzen zu öffnen.
  3. Gib den Namen des Mieters in das Feld Suchen nach ein.
  4. Gib die gewünschte Bezeichnung in das Feld Ersetzen durch ein.
  5. Klicke auf Alle ersetzen.

Dies ist jedoch nicht für eine große Anzahl von Namen optimal, da es manuell durchgeführt werden muss.


Praktische Beispiele

Angenommen, Deine Liste sieht folgendermaßen aus:

A B
Max Mustermann Wohnungsmieter
F. Meier Wohnungsmieter
ABC GmbH Gewerbemieter
C. Schuster Wohnungsmieter
F. Meier Wohnungsmieter

Nach dem Ausführen des Codes wird die Liste so aussehen:

A B
Mieter 1 Wohnungsmieter
Mieter 2 Wohnungsmieter
ABC GmbH Gewerbemieter
Mieter 3 Wohnungsmieter
Mieter 2 Wohnungsmieter

Tipps für Profis

  • Fehlerbehandlung: Verwende On Error Resume Next, um unerwartete Fehler zu vermeiden, aber sei vorsichtig, da dies auch andere Fehler ignorieren kann.
  • Modularität: Teile deinen Code in kleinere, wiederverwendbare Funktionen auf, um die Lesbarkeit und Wartbarkeit zu verbessern.
  • Dokumentation: Kommentiere Deinen Code ausgiebig, damit Du und andere Nutzer ihn später besser verstehen.

FAQ: Häufige Fragen

1. Wie viele Mieter kann ich mit diesem Code anonymisieren?
Der Code ist darauf ausgelegt, bis zu 500 Einträge in Spalte A zu verarbeiten. Du kannst die Schleife anpassen, um mehr Zeilen zu berücksichtigen.

2. Funktioniert der Code in Excel 2016 und älter?
Ja, der VBA-Code sollte in Excel 2016 sowie in älteren Versionen problemlos funktionieren.

3. Was passiert mit den Gewerbemietern?
Die Namen der Gewerbemieter bleiben unverändert, da der Code nur auf "Wohnungsmieter" reagiert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige