Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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
Antworten 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
Antworten Top
#5
PS:

Das Datum steht in dem Excelsheet in der Formatierung TT.MM.JJJJ hh:mm
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten Top


Gehe zu:


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