Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellen vergleichen für Wörterbücher

Tabellen vergleichen für Wörterbücher
01.10.2016 17:02:24
Heinz
Hallo Leute
Ich bin neu hier und wende mich an Euch mit der Bitte mir bei einem Problem zu helfen bei dem meine VBA Kenntnisse etwas überfordert sind.
Es handelt sich um verbundene spzifische Wörterbücher mit immer gleichem Aufbau, die synchronisiert werden sollen:
Es gibt dazu folgende Dateien:
Basis-Dictionary mit allen Begriffen in mehreren Sprachen wobei die Referenz immer die Spalte "Deutsch" ist.
Subtabellen für die einzelnen Sprachen in denen die Begriffe übersetzt sind.
Die Zusammenführung der Subtabellen in das Dictionary erfolgt halbautomatsich und funktioniert.
Arbeitstabellen, die eine Teilmenge des Dictionaries enthalten, nämlich nur die Begriffe die auch gebraucht werden. Über einen Wverweis weren die ausgewählten Sprachen den Namensfelder zugespielt.
Das Problem entsteht bei der Verknüpfung des Dictionaries mit den Arbeitstabellen.
In den Arbeitstabellen wird mit Namen gearbeitet (um automatisch die Sprachen umschalten zu können) und ständig kommen neue Begriffe dazu die ins Dictionary übernommen werden müssen, damit es dann übersetzt werden kann. Gleichzeitg müssen Übersetzungen aus dem Dictionary in die Arbeitstabellen rückübertragen werden.
Das Problem besteht daher in der gegenseitigen Synchronisation der Arbeitstabellen mit dem Dictionary. Als Master fungiert die Arbeitstabelle. Hierin muss die Spalte "Deutsch" abgefahren werden. Wird der Begriff im Dictionary gefunden sind die jeweiligen Übersetzungen in die weiteren Spalten des Masters zu übertragen. Wird der Begriff nicht gefunden, dann muss er ans Ende des Dictionaries angehängt werden damit er dann später in die Übersetzungstabelle angehängt wird, demnächst übersetzt und wieder zurückkopiert wird. Das Ganze soll auf Befehl laufen damit das Dictionary nicht immer geöffnet sein muss. Das ist aber sekundär.
Leider verzweifel ich an dem Weg wie der Abgleich mit VBA zu realisieren ist. Ich würde mich über Eure Hilfe freuen. Die Dateien habe ich als Muster mal angehängt, bestehende Verknüpfungen können ignoriert werden.
Danke vorab für die Hilfe.
Heinz
Dictionary: https://www.herber.de/bbs/user/108542.xlsm
Übersetzungstabelle: https://www.herber.de/bbs/user/108543.xlsx
Arbeitstabelle: https://www.herber.de/bbs/user/108544.xlsm

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 15:54:11
Armin
Hallo Heinz,
also ich fürchte, da wirst Du ziemlich viel Geduld haben müssen, wenn Du das über Excel-Dateien realisieren willst. Denn das Einlesen und Schreiben dürfte eine Weile brauchen. Es handelt sich hier um einen ganz klareren Fall, für die Anwendung einer Datenbank.
Gruß Armin
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 16:01:24
Fennek
Hallo,
die Laufzeit sollte bei Verwendung eines Dictionary eigentlich kein Thema sein.
mfg
(PS: ich öffne kein fremden xlsm-Dateien, kenne also die genutzten Makros nicht)
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 19:16:56
Michael
Hi zusammen,
@Heinz: erst Mal danke für die Daten: ich beschäftige mich gerade mich Buchhaltung, und da läuft mir die Übersetzung von Fachbegriffen grade gut rein.
Ich möchte mich sowohl Armin als auch Fennek anschließen:
a) gehört sich etwas "datenbankmäßige Denke" in Dein Projekt gegossen: mehrfaches Vorhalten "gleicher" Daten nennt sich "Redundanz", und das führt quasi IMMER zu ähnlichen Problemen, wie Du sie hast.
Abhilfe: alle Arbeiten sollten IMMER auf nur EINEM Datenbestand vorgenommen werden
b) ein "Dictionary" ist immer gut: lies mal http://www.snb-vba.eu/VBA_Dictionary_en.html zur Inspiration.
Um beurteilen zu können, wie man da "einen Schuh draus macht", müßte man Deine Arbeitsabläufe kennen.
Ich könnte mir vorstellen, daß eine fertige "Arbeitsdatei" an Externe weitergegeben wird. Dann würde ich es z.B. so angehen: die "Arbeitsdatei" ist zunächst ein Tabellenblatt in der Dictionary-Datei, und sobald es fertig ist, wird es auf Knopfdruck nur mit den gewünschten Sprachen und nur mit den benötigten Wörtern in eine eigene Datei gesteckt.
Die Benutzung von "Namen" finde ich für derartige Zwecke etwas holprig und unflexibel. Ich würde eine kleine UDF bevorzugen, so daß Du etwa in eine Zelle statt "=Erfolg" schreibst:
=myUDF("Erfolg";"Sprache"), wobei die Sprache ja in B4 (oder so) hinterlegt war, also so:
=myUDF("Erfolg";B4)
Damit myUDF auf die Übersetzungen zugreifen kann, könnte ich mir ein Dictionary vorstellen, das als Schlüssel (key) nur die deutschen Begriffe enthält (die sind ja die Referenz) und als Wert (item) nur die Nr. des entsprechenden Eintrags.
Diese Nr. kann die Zeilennummer in DEINEM Dictionary sein, aber auch die Index-Nr. eines zuvor eingelesenen Arrays, das alle Daten enthält: das geht ratz-fatz.
Schöne Grüße,
Michael
Anzeige
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 19:49:23
Heinz
Hallo Michael
Sicher, die Arbeitsorganisation ist hier ganz wichtig.
Es geht so:
Wir haben ein zentrales Dictionary mit insgesamt 10 Sprachen und etwa 2.500 Begriffen.
- Wäre sicher auch anstelle Ecvel gut in einer Datenbank aufgehoben - ist aber nun mal Excel :)
- Dieses wird durch einzelne Sub-Tabellen für die jeweiligen Sprachen gefüttert, da wir meherere Übersetzer haben die parallel arbeiten und nicht immer das ganze Dictionary brauchen. Diese Subtabellen werden immer gleich in das Dictionary eingefügt. Geht easy.
In jedem Businessplan/Arbeitstabelle gibt es eine Referenz-Tabelle (laguages) mit den in diesem BP verwendeten Begriffen, also einer Teilsumme des Dictionaries. Deutsch ist immer die Referenz.
In einem Abgleichslauf werden hier die Sprachen je nach Bedarf aus dem Dictionary eingefügt, damit das Dictionary nicht immer mitlaufen muss und wir nur den BP weitergeben können. Neue Begriffe laufen rückwärts ins Dictionary und dann in die Übersetzungsdateien. - Schraipföhler, die so mit übernommen werden.... lösen damit natürlich immer neue Datensätze aus. - :(
Da nie klar ist, welche Sprache die Kunden haben wollen, haben wir es so gemacht, dass immer alle Sprachen verfügbar sind und im BP ausgewählt werden können. Die Sprachzuodnung geschieht in der Sprachtabelle im BP über einen einfachen WVerweis und einem Dropdownfeld. In den BP/Arbeitsdateien sind Namen vergeben die darauf referenzieren.
Als wir das Projekt angefangen haben, hatten wir auch eine UDF gedacht. Allerdings war die Verwendung von Namen schneller zu realisieren, da diese fast automatsich vorgeschlagen werden wenn man die Namensfelder berabeitet.
Im Nachhinein ist es nur schwierig mit den Namen konsequent weiter zu arbeiten, weil diese sich beim kopieren mit VBA nicht mit übertragen. :( Weiß jemand wie man FeldNamen aus einer Tabelle auslesen und ändern kann ?
Gruß
heinz
Gruß
Heinz
Anzeige
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 19:29:40
Heinz
Schönes Wochenende
Ich habe das jetzt mal, sicher zu umständlich, selber gelöst.
Das Tempo hält sich in Grenzen. 2.500 Datensätze brauchen so ca. 5 min incl. der Kopiererrei.
Da das ja nur ab und zu passieren muss ist das alles halb so wild.
Das Makro läuft, braucht durch das von mir gewählte Kopierverfahren allerdings richtig Speicher.
Ich hatte die Methode Range.Copy versucht, bin da aber an den Zuordnungen verweifelt.
Falls ihr eine Idee hab wie es eleganter geht, nehme ich das gerne an.
Gruß
Heinz
Mein Arbeitsmakro, einige Zeilen sind noch richtig optimierungsbedürftig, sieht so aus:
Sub Tabellen_Vergleichen()
Dim WB As Workbook
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim Found As Object
Dim Zaehler As Long
Dim LetzteZeileWS1 As Long
Dim LetzteZeileWS2 As Long
Dim NaechsteZeile As Long
Dim Dateiname1 As String
Dim Dateiname2 As String
Dim Suche As String
Dim Suchbegriff As Variant
Dim Suchoffset As Object
Dim RngCopy As Range
Dim RngPaste As Range
Dim aWerte()
Dim varDatei As Variant
Dim i As Long
Dim Zeit As Double
Dateiname1 = "dictionary.xlsm"
Dateiname2 = "BP_Master.xlsm"
Set WS1 = Workbooks(Dateiname1).Sheets("languages")
Set WS2 = Workbooks(Dateiname2).Sheets("languages")
LetzteZeileWS1 = WS1.Cells(WS1.Rows.Count, 4).End(xlUp).Row
LetzteZeileWS2 = WS2.Cells(WS2.Rows.Count, 4).End(xlUp).Row
' Felder im BP_Master löschen um zu schauen wie das Makro arbeitet
WS2.Range("F6:N600").ClearContents
For Zaehler = 6 To LetzteZeileWS2 ' Spalte Deutsch im Master abfahren ab Zeile 6 bis zum  _
letzten Datenfeld '
' Statusbar
Application.StatusBar = "Bearbeitet " & Format(Zaehler / LetzteZeileWS2, "0%") & "   " &  _
WorksheetFunction.Rept("X", 20 * Zaehler / LetzteZeileWS2)
Zeit = Timer + 0.1
Do Until Timer > Zeit
Loop
If Not IsEmpty(WS2.Cells(Zaehler, 4)) Then  'And IsEmpty(WS2.Cells(Zaehler, 8))'
Suchbegriff = WS2.Cells(Zaehler, 4)
Set Found = WS1.Columns(4).Find(Cells(Zaehler, 4), LookIn:=xlValues, LookAt:= _
xlWhole)
If Found Is Nothing Then
' Wenn Begiff in Master vorhanden, aber nicht in Dictionary, dann im Dictionary  _
unten hinzufügen
MsgBox "Wert " & Suchbegriff & "  -> Zeile : " & Zaehler & " nicht gefunden,  _
in Dictionary Hinzugefügt !", vbInformation, "Meldung"
' neue Zeile in WS1 einfügen und Suchbegriff reinschreiben '
' nochmal nachzählen ob nicht inzwischen eine Zeile dazugekommen ist '
LetzteZeileWS1 = WS1.Cells(Rows.Count, 4).End(xlUp).Row
' Folgezeile berechnen '
NaechsteZeile = LetzteZeileWS1 + 1
' Alten Breich markieren
Set RngCopy = WS2.Range("D" & Zaehler & ":E" & Zaehler)
' Zielbereich auswählen
Set RngPaste = WS1.Range("D" & NaechsteZeile & ":E" & NaechsteZeile)
' übernehmen
aWerte() = RngCopy
' einfügen
RngPaste = aWerte()
Else
' wenn gefunden im Master aktualisieren
' Bereich Dictionary u.Master D:N = 4:14
' Zeile im Master = Zaehler
' Zeile im Dictionary = Found.offset
Set RngCopy = WS1.Range("E" & Found.Row & ":N" & Found.Row)
' Zielbereich auswählen
Set RngPaste = WS2.Range("E" & Zaehler & ":N" & Zaehler)
' übernehmen
aWerte() = RngCopy
' einfügen
RngPaste = aWerte()
End If
End If
Next
' Statusbar aus
Application.StatusBar = False
' Dictionary schließen
MsgBox "Dictionary wird geschlossen!", vbInformation, "Meldung"
Workbooks("dictionary.xlsm").Close
End Sub

Anzeige
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 20:10:43
Daniel
Hi
ich finde das System, für jeden Begriff einen Namen zu erstellen ziemlich umständlich.
folgendes wäre wahrscheinlich einfacher:
1. die Wörterbuchliste ist so aufgebaut, dass die Referenzsprache "Deutsch" vorne steht.
2. die Anzeige kannst du dann mit dem SVerweise machen (hier für deine Tabelle)
=SVerweis("deutsches Wort";Languages!$D:$I;Vergleich(C2;Languages!$D$5:$I$5;0);0)
um eine neue Mastertabelle zu übernehmen reicht ein einfaches Copy-Paste
wenn aus den Arbeitslisten neue Begriffe hinzugekommen sind, die noch in andere Sprachen übersetzt werden müssen, kopierst du die Arbeitsliste unter die Basistabelle so dass die Referenzsprache auf jeden Fall in der gleichen Spalte steht.
Dann führst du ein Duplikateentfernen mit der ganzen Tabelle und der Referenzspalte als Kriterium aus. im unteren Teil der Tabelle wo du die Arbeitsliste einkopiert hast, sollten dann nur die neuen Begriffe übrig bleiben.
Gruß Daniel
Anzeige
AW: Tabellen vergleichen für Wörterbücher
02.10.2016 21:19:44
Heinz
@Daniel
Das ginge natürlich auch. Wie immer gibt es ein ... nur....
Die Arbeitstabellen haben ca. 25 Einzeltabellen mit zum Teil 100 und mehr Zeilen.
Beim sverweis wird der Referenzname in der Formel eingebaut oder in einer zweiten Spalte (die man dann nicht mitdruckt oder ausblendet)gepflegt. Zudem gibt es bei der Erweitereung des Dictionaries bei sverweis das Problem, dass dort keine dynamische Range möglich ist wenn die Uropsungstabelle größer wird. Von den Fehler bei der Schreibweise will ich gar nicht reden.
Wir haben bei der Umstellung auf Namen festgestellt, dass wir x Begriffe ähnlich oder sogar nur unterscheidlich geschrieben, mal mit Doppelpount, mal ohne in den bisherigen Tabellen verwendet hatten. Sobald man einen neuen Namen vergeben will, zeigt Excel an anhand der Schreibweise an,ob es den Begriff oder zumindest einen ähnlichen schon gibt. Das erleichert eine Umstellung extrem. Das war letzlich der Ausschlag warum wir uns für Namen enschieden haben. Sobald ich jetzt eine neue Tabelle anlegen will, kopiere ich mir aus dem Dictionary eine Gruppe mit passenden Namen (z.b. Buchhaltung) und habe gleich fast alle relavanten Begriffe als Namen definiert und kann die im Arbeitsblatt einfach auswählen.
Namen haben viele Vorteile, leider aber auch etliche NAchteile, wie so alles im Leben.
Gruß
Heinz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige