Clever-Excel-Forum

Normale Version: Per VBA in Zeile suchen und String ersetzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebe Forumsmitglieder,

ich benötige einen VBA-Kode, um eine große Tabelle zeilenweise zu durchsuchen

und in der Spalte x den Namen x durch den Namen y zu ersetzen, sofern das Datum in Spalte b derselben Zeile größer ist als der 31.12.2016.

Kann mir da jemand helfen? Huh

Im Voraus herzlichen Dank!

Excelbeginner
Hallo,

warum Zeilenweise? Es gibt in VBA Funktionen (Find-Methode, Match), mit denen das schneller geht, als alles Zeilenweise abzuklappern. Für einen konkreten Vorschlag müsste man aber etwas mehr über deine Datei wissen.
Hallo,

z.B. so:
Code:
Public Sub Ersetzen()
Dim loLetzte As Long, raBereich As Range, raZelle As Range

Application.ScreenUpdating = False

With Worksheets("Tabelle1") 'Tabellennam anpassen
   loLetzte = .Cells(.Rows.Count, 2).End(xlUp).Row
   Set raBereich = .Range(.Cells(2, 2), .Cells(loLetzte, 2))
       For Each raZelle In raBereich
           If CDate(raZelle) > "31.12.2016" Then
               raZelle.Offset(, 22).Replace What:="Name1", Replacement:="Excelbeginner", LookAt:=xlPart
           End If
       Next raZelle
End With

Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub



Gruß Werner
Hallo Klaus-Dieter,

bin halt Excelbeginner und kenne die Finessen nicht.


Hallo Werner,

vielen Dank für die rasche Antwort.

Bei  

      If CDate(raZelle) > "31.12.2016" Then

bekomme ich einen Laufzeitfehler 13, Typen unverträglich.

Habe das etwas modifiziert, da das Datum in Spalte 10 steht und der zu ändernde Name in Spalte 2. Weiß aber nicht, ob ich das richtig gemacht habe Huh :

Public Sub Ersetzen_Deutsche_BKK_ab_1_1_2017()
Dim loLetzte As Long, raBereich As Range, raZelle As Range
Application.ScreenUpdating = False
With Worksheets("Entl") 'Tabellennamen anpassen
    loLetzte = .Cells(.Rows.Count, 10).End(xlUp).Row
    Set raBereich = .Range(.Cells(2, 10), .Cells(loLetzte, 10))
        For Each raZelle In raBereich
            If CDate(raZelle) > "31.12.2016" Then
                raZelle.Offset(, -8).Replace What:="BKK Deutsche_BKK", Replacement:="Barmer", LookAt:=xlPart
            End If
        Next raZelle
End With
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub

Vielleicht kannst Du nochmal schauen?

Vielen Dank

Excelbeginner
PS:

Das Datum steht in dem Excelsheet in der Formatierung TT.MM.JJJJ hh:mm
Hallo,

wie kommt das Datum und die Uhrzeit in die Zelle, Formel? Wenn ja, dann zeig mal die Formel.
Ich vermute mal, dass du Text in der Zelle stehen hast.
Das kannst du mal testen.
Gib mal in eine freie Zelle deiner Tabelle folgende Formel ein:
Code:
=ISTZAHL(J10)
Für J10 in der Formel eine Zelle einsetzen, in der in deiner Tabelle ein Datum mit Uhrzeit vorhanden ist.

Ist das Formelergebnis FALSCH dann steht in der Zelle kein Datum.


Gruß Werner
Hallo Werner,

der Formeltest ergibt WAHR. Das Datum ist nicht über eine Formel generiert.

Der Eintrag ist z.B.: 24.06.2014  06:36:00 

in der Formatierung TT.MM.JJJJ hh:mm

Wenn ich das als Zahl formtiere ergibt sich 41814,28.

Habe ich bei der Umschreibung (s.o.) vielleicht einen Fehler gemacht?

Viel Grüße

Excelbeginner
Hallo,

kann ich so nicht nachvollziehen. Lade mal bitte die Mappe hoch in der es nicht funktioniert. Aber bitte als .xlsx, also ohne Makros. Ich kann Dateien mit Makros im Moment nicht herunterladen.

Gruß Werner
Hallo Excelbeginner

@Hallo Werner.

ja ja das Datum oder Datumformat, damit hatte ich auch öfters Probleme:  Vielleicht klappt eine andere Variante problemlos??  
Probier es aus ....   eine Variante wird sicher klappen.

1. Variante nur das Jahr als Zahl >2016 auswerten = grösser 31.12.2016 !!
        For Each raZelle In raBereich
            If Year(raZelle) > 2016  Then                 'oder alternativ:                 (nur eine Variante benutzen !!)
            If Year(CDate(raZelle)) > 2016  Then      'Jahr über Date ermitteln       (oder mehrere mit OR verknüpfen)
            If Cint(Right(raZelle, 4))  > 2016 Then    '4 Stellen Rechts auswerten
                raZelle.Offset(, -8).Replace What:="BKK Deutsche_BKK", Replacement:="Barmer", LookAt:=xlPart
            End If
        Next raZelle

Der Code und die Idee stammt aber bitte von Werner, ich suche bei solchen Problemen mur gerne nach "Ersatzlösungen".  

mfg  Gast 123
Hallo Gast 123,

vielen Dank, leider haut keine der Alternativen hin.

Frage mich, ob ich 2016 oder "2016" eingeben muss. Klappt aber mit beiden Varianten nicht.

Ihre Variante 3 dürfte problematisch sein, weil ja auch noch die Uhrzeit drinsteht und die rechten 4 Stellen die Uhrzeit greifen.

Gibt es Variante 3 zur Auswertung auf das 7.-10. Zeichen?

Viele Grüße

Excelbeginner
Seiten: 1 2