Per VBA in Zeile suchen und String ersetzen
#1
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
Top
#2
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • Excelbeginner
Top
#3
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
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • Excelbeginner
Top
#4
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
Top
#5
PS:

Das Datum steht in dem Excelsheet in der Formatierung TT.MM.JJJJ hh:mm
Top
#6
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
Top
#7
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
Top
#8
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
Top
#9
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
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Excelbeginner
Top
#10
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
Top


Gehe zu:


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