excel-starter
Goto Top

Excel - Suchen und Ersetzen in verschiedenen Dateien

Hallo an ALLE

Ausgangslage.
- Einige Hundert Excel-Dateien in verschiedenen Ordnern in einem gemeinsamen Überordner
- Dateinamen immer unterschiedlich
- Tabellen immer gleich aufgebaut, z. Bsp: Anschrift Straße in Zelle " E20 " und Anrede in Zelle " G30 "

Derzeitiger Zellinhalt in verschiedenen Schreibweisen
" G30 " Hr. ; Herr; Fr.; Frau

" E20 " Münchner Str. ; Münchner Straße ; Hauptstr. ; Hauptstraße; xxxx Str. ; xxxxstr.

Aufgabe:
In allen Zellen " G30 " soll immer Herr und Frau ausgeschrieben sein
Ersetzen von Hr. ; Hr ; Fr. ; Fr ; durch Herr oder Frau

In allen Zellen " E20 " soll Straße immer ausgeschrieben sein
Ersetzen von xxx Str. ; xxx Str ; xxxxstr. ; xxxstr ; in xxx Straße und xxxstraße


Es soll somit die Funktion "Suchen und Ersetzen" auf mehrere Dateien erweitert werden

Es kann in allen Zellen gesucht und ersetzt werden, besser wäre es aber nur genau in bestimmten Zellen zu ersetzen (G30)

Hat jemand hierzu eine Lösung

Vielen Dank im Voraus

Content-Key: 169016

Url: https://administrator.de/contentid/169016

Printed on: April 18, 2024 at 09:04 o'clock

Member: bastla
bastla Jul 03, 2011 at 11:27:06 (UTC)
Goto Top
Hallo Excel-Starter und willkommen im Forum!

Du könntest es mit folgendem Batch (speichern als Textdatei mit dem Typ ".cmd") versuchen:
@echo off & setlocal
set "Ordner=D:\XL"  
set "Dateien=*.xls"  

set "R=%temp%\ReplaceInXL.vbs"  
 >%R% echo Set oXL=CreateObject("Excel.Application")  
>>%R% echo oXL.Workbooks.Open WScript.Arguments(0)
>>%R% echo Set Anrede=oXL.ActiveSheet.Range("G30")  
>>%R% echo Set Strasse=oXL.ActiveSheet.Range("E20")  
>>%R% echo If Anrede.Value="Hr" Or Anrede.Value="Hr." Then Anrede.Value="Herr"  
>>%R% echo If Anrede.Value="Fr" Or Anrede.Value="Fr." Then Anrede.Value="Frau"  
>>%R% echo Von="str" :Nach="straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo Von="str.":Nach="straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo Von="Str" :Nach="Straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo Von="Str.":Nach="Straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo oXL.ActiveWorkbook.Close True
>>%R% echo oXL.Application.Quit

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /s /b /a-d %Dateien%') do (  
    echo Bearbeite "%%i"  
    cscript //nologo %R% "%%i"  
)
popd
Gesucht und bearbeitet werden die Dateien im in Zeile 2 festgelegten Ordner und in dessen Unterordnern.
Die Ersetzung für die Anrede wird für den kompletten Zellinhalt vorgenommen, für die Straße wird immer nur das Ende des in der Zelle enthaltenen Textes berücksichtigt.

Bitte zuerst mit Kopien testen!

Grüße
bastla
Member: Excel-Starter
Excel-Starter Jul 03, 2011 at 14:34:00 (UTC)
Goto Top
Hallo bastla,

ich habe es ausprobiert und das sieht super aus - vielen herzlichen Dank!

Jetzt hätte ich noch eine Bitte, könntest Du noch den Scripttext schreiben, wenn ganz allgemein xxxxstr. oder Str, in allen Zellen einer Datei durch xxxxstraße oder Straße ersetzt werden soll.

Wenn also keine bestimmte Zelle bekannt ist wo xxxxstr. oder Str. vorhanden ist, aber auch wieder in verschiedenen Dateien / Ordern.

Nochmals vielen Dank im Voraus

Der Excel-Starter
Member: bastla
bastla Jul 03, 2011 at 19:17:06 (UTC)
Goto Top
Hallo Excel-Starter!

Versuch es damit:
@echo off & setlocal
set "Ordner=D:\XL"  
set "Dateien=*.xls"  

set "R=%temp%\ReplaceInXL.vbs"  
 >%R% echo Set oXL=CreateObject("Excel.Application")  
>>%R% echo oXL.Workbooks.Open WScript.Arguments(0)
>>%R% echo With oXL.ActiveSheet.Cells:Set Strasse=.Find("str")  
>>%R% echo     If Not Strasse Is Nothing Then
>>%R% echo         firstAddress=Strasse.Address
>>%R% echo         Do
>>%R% echo             Von="str" :Nach="straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo             Von="str.":Nach="straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo             Von="Str" :Nach="Straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo             Von="Str.":Nach="Straße":If Right(Strasse.Value,Len(Von))=Von Then Strasse.Value=Left(Strasse.Value,Len(Strasse.Value)-Len(Von))^&Nach  
>>%R% echo             Set Strasse=.FindNext(Strasse)
>>%R% echo         Loop While Not Strasse Is Nothing And Strasse.Address^<^>firstAddress
>>%R% echo     End If
>>%R% echo End With
>>%R% echo oXL.ActiveWorkbook.Close True
>>%R% echo oXL.Application.Quit

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /s /b /a-d %Dateien%') do (  
    echo Bearbeite "%%i"  
    cscript //nologo %R% "%%i"  
)
popd
Grüße
bastla
Member: Excel-Starter
Excel-Starter Jul 05, 2011 at 18:44:46 (UTC)
Goto Top
... das Script funktioniert tadellos!

Nochmals vielen herzlichen Dank

Excel-Starter