# VBA: suchen ersetzen aus 2 tabellen



## RedoXXX (17. Juli 2007)

Hallo

also ich habe eine excell datei, die englische wörter enthält die will ich in deutsch umwandeln. Die deutsche Übersetzung steht in eine andere datei. Wie mach ich das am besten also zB.: wenn ich im ersten Excel Dokument SUPPRESS find muss ich das ersetzen mit "UNTERDRÜCKEN" die wiederum in eine andere Datei steht. Ich hoffe ich hab es halbwegs verständlich ausgedrückt. 

Ich hab mir bis jetzt überlegt ich lese die Dateien von der Übersetzungstabelle ein in ein Array oder so und dann such ich in Excell Dokument nach dem Wort wenn ich finde ersetze ich es. Aber das Problem ist ich hab überhaupt keine Erfahrung mit VBA und bräuchte ein bisschen Hilfe. Kann man überhaupt 2 Dateien irgendwie miteinander kombinieren? wenn ja wie mach ich das am besten mit dem Array. Ich hoff ihr könnt mir helfen, hab gerade damit angefangen also seid nicht so streng wenn ich mich nicht gut ausgedrückt habe.
Danke schon mal im vorauss


----------



## d2wap (17. Juli 2007)

http://www.leo.org
http://www.woerterbuch.info

Übersetzungsprogramme Online En Mass 

Ersten heisst es nicht 2 Tabellen sondern 2 Spalten. 2 Tabellen wären entweder 2 Sheets oder gar 2 verschiedene Dateien die per Identifyer für logische Abfragen verbunden sein müssten.
*klugscheissermodus aus


Nun mal im Ernst:
Du musst ein Compare erfragen.
Alles in einen Array laden und dann vergleichen ist bei 64000+ Vokabeln ein bisschen RAM-lastig...
Generell solltest du Zeile für Zeile durchsuchen lassen (Deutsch oder Englisch).
Sobald er den jeweiligen Begriff gefunden hat, soll er die Zeilennummer nehmen und dann eine Spalte vor oder zurück gehen - und voila - schon hast du die deutsche oder englische Übersetzung.

In VB würde das mit INStr oder LIKE funktionieren...

Des Weiteren:
VB 6.0
VB .NET
oder "VBA" aus Excel heraus?


----------



## RedoXXX (18. Juli 2007)

Danke für die Antwort erstmals. Also es sind wirklich 2 unterschiedliche Dateien, also nicht spalten und es is kein Wörterbuch im sinne von alles ersetzen sondern nur die Schlüsselwörter die ersetzt gehören werden ersetzt. Also es sind nicht mehr als 30 Wörter und die sind eingespeichert in einer anderen Tabelle (tabelle2). Und ich hab jetzt eine andere Tabelle(tabelle1) die die Wörter enthält die ersetzt gehören und die Übersetzung is in der anderen Tabelle(tabelle 2).


----------



## d2wap (18. Juli 2007)

Aber woher weißt du (oder vielmehr das Programm) welche Vokabeln zusammen gehören?
Und warum fügst du nicht alles in eine Tabelle ein.
So wäre auch der Pflegeaufwand einfacher.

Sollte sich der Vokabelbestand nicht erweitern und es würde bei nur 30 Wörtern blieben, könntest du die 2 x 30 Wörter auch in 2 Arrays einlesen… was aber nie jemand tu würde, der bei Verstand ist – außer mir vielleicht


----------



## DrSoong (19. Juli 2007)

@d2wap: Moment Moment, bei der Liste der Leute, die nicht bei Verstand sind muss ich widersprechen, da ich sicher der einzige bin, der bei 35 Grad mit Vliesjacke und bei - 10 Grad mit kurzem Hemd geht, falle ich sicher auch diese Kategorie.


Der Doc!


----------



## RedoXXX (20. Juli 2007)

Ich hab es so gemacht:


```
Sub translation()
    pfad = InputBox("Bitte geben sie den Pfad für die Übersetzungstabelle ein")
    Workbooks.Open (pfad)
    
    Dim ArrD()
    Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    aName = ActiveWorkbook.Name
        
    For x = 1 To Zeilenanzahl
        ReDim Preserve ArrD(x)
        ArrD(x) = Range("A" & x)
    Next x
    
    Dim ArrE()
    Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
        
    For x = 1 To Zeilenanzahl
        ReDim Preserve ArrE(x)
        ArrE(x) = Range("B" & x)
    Next x
    
    bName = ThisWorkbook.Name
    
    For iAnz = 0 To UBound(ArrD)
    With Workbooks(bName).Worksheets("Tabelle1").Range("A1:X200")
    
        Set c = .Find(ArrD(iAnz), LookIn:=xlValues)
        If Not c Is Nothing Then
                
                Workbooks(bName).Worksheets("Tabelle1").Range(c.Address) = ArrE(iAnz)
                Set c = .FindNext(c)
        
        End If
    
    End With
    
    Next iAnz
    speicherort = Application.GetSaveAsFilename("", fileFilter:="Microsoft Excel-Arbeitsmappe(*.xls), *.xls")
    ThisWorkbook.SaveAs Filename:=speicherort
    Workbooks(aName).Close
End Sub
```
 
Aber es funktioniert nicht wirklich, wie meinst du wie ich es mit Tabelle machen könnte? Es ist ja schon in einer Excel Tabelle, und du meinst ich soll es in eine Matrix einlesen. Wie spreche ich dann die Übersetzung an? Wäre super wenn ihr mir helfen könntet


----------

