Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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

VBA spezieller Range vergleich

VBA spezieller Range vergleich
26.02.2021 14:17:40
Dennis
Hallo zusammen,
ich beiße mir momentan an einem VBA Code die Zähne aus und bräuchte mal professionelle Hilfe obwohl ich kein Laie bin und eigentlich doch recht fortgeschrittene Kenntnisse habe.
Also folgendes ist gegeben: Eine Excel Datei mit drei Blättern die jeweils schon einen gewissen Inhalt haben (mehr dazu später) und jeweils Export-Dateien eines anderen Programms (txt Files).
Die Textdateien sollen eingelesen werden. Diese Enthalten immer Parametersätze beispielsweise wie folgt:
D43.p9611   := N/A;
D43.p9563.0 := 2;
D43.p9799   := 16#CE6E0773;
D43.p9899   := 16#770D4497;
D43.p9729.0 := 16#F7E7E475;
D43.p9729.1 := 16#C5F38C1D;
D43.p9729.2 := 16#00000000;
D43.p9399.0 := 16#E0F222BC;
D43.p9399.1 := 16#AAAD7973;
D43.p9610   := 16#000000C6;
D43.p9601   := 16#0000000C;
D43.p9533   := 100;
D11....
...
In der Excel Datei gibt es bereits ein Blatt auf dem bereits bekannte Parametersätze in ähnlicher Form drin stehen, etwa so:
	A	B	C		D
Motor	Variant	Parameter	Value
1	D11	D	p9399.0		16#5AF72D9A
2	D11	D	p9399.1
3	D11	D	p9533		100
4	D11	D	p9563.0		2
5	D11	D	p9601		16#0000000C
6	D11	D	p9610		16#000000C0
7	D11	D	p9611
8	D11	D	p9729.0		16#F7E7E475
9	D11	D	p9729.1		16#C1545DFF
10	D11	D	p9729.2		16#00000000
11	D11	D	p9799		16#F72A8D76
12	D11	D	p9899		16#E3FCFFA6
13	D43	A ....

Die Liste geht noch um ein Vielfaches weiter, aber ein kompletter Parametersatz sind jeweils immer 12 Zeilen
Es geht sich jetzt darum zu schauen, ob sich die Parametersätze jeweils gleichen zwischen Textdatei und Excel Datei. Dabei muss logischerweise die Spalte "Variant" ignoriert werden. Achtung, in der Excel Tabelle kann Motor D11 in mehreren Varianten vorkommen, aber die Quelldatei (Txt) beinhaltet diese Information nicht.
Was habe ich bis jetzt programmiert:
1. Logische Sortierung zu Beginn für Motor, Variante und Parameter.
2. Zeilenweises Einlesen der Quelldatei
2.a. Entfernung unnötiger Zeichen und Normierung.
2.b. Speicherung jeder Zeile in separatem Arbeitsblatt ("Schmiertabelle").
2.c. Sortierung dieses eingelesenen Bereichs wie in #1
2.d. Wenn aktueller Motor abgearbeitet ist, löschen des separaten Arbeitsblattes.
Was fehlt? Nun es fehlt im Grunde, dass ich die beiden Tabellen miteinander vergleiche. Also die Schmiertabelle mit der gegebenen Tabelle unter Außerachtlassung der Spalte "Variant". Die Subroutine spuckt idealerweise ein Bool aus, ob jetzt der Datensatz gefunden wurde oder nicht ("found") und weiterhin die Information, elche Variante das nun jetzt ist.
Kann mir da jemand helfen?
Gruß,
Dennis

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA spezieller Range vergleich
26.02.2021 16:55:03
ChrisL
Hi Dennis
Power-Query kann wunderbar transformieren, vergleichen und die Datenquelle kann direkt die TXT-Datei sein:
https://www.herber.de/bbs/user/144270.xlsx
(Quelldaten wurden zur Vereinfachung als Tabelle anstelle externe Quelle dargestellt)
Oder als Makro
https://www.herber.de/bbs/user/144271.xlsm
(Ich habe mich auf den Vergleich beschränkt. Die Quelldaten in einer Schleife abzuarbeiten traue ich dir zu ;)
Sub t()
MsgBox MotorExists("D43.p9799   := 16#CE6E0773;")
End Sub

Private Function MotorExists(strInput As String) As Boolean
Dim str1 As String, str2 As String
str1 = Left(strInput, InStr(strInput, ".") - 1)
str2 = Trim(Split(strInput, ":=")(0))
str2 = Right(str2, Len(str2) - Len(str1) - 1)
With Worksheets("Parameter")
If WorksheetFunction.CountIfs(.Columns(1), str1, .Columns(3), str2) Then MotorExists = True
End With
End Function
cu
Chris

Anzeige
AW: VBA spezieller Range vergleich
27.02.2021 09:24:33
Dennis
Hallo Chris,
Vielen Dank für deine prompte Hilfe!
Deine Dateien habe ich gerade gesichtet, aber das bringt mich dennoch nicht wirklich weiter.
Ich hab vor drei Jahren ungefähr ein Jahr lang beruflich in gewisser weise VBA gemacht, aber diesen
Da mir komischerweise gestern der Dateiupload verweigert wurde, habe ich hier die Datei für dich hochgeladen.
https://www.herber.de/bbs/user/144288.xlsm
Und darüber hinaus so eine Import Datei (Export von anderem Programm)
https://www.herber.de/bbs/user/144289.txt
Weiterhin, es geht sich ja darum. Die immer Stückweise aus der Import-Textdatei gezogenen 12 Zeilen sollen ja in einem Stück in der Tabelle gefunden werden (oder eben nicht).
Ein echter Treffer (Fund) ist, wenn die 12 Funde hintereinander kommen und den Gleichen Typ "Variant" haben.
Ich stehe momentan wirklich total auf dem Schlauch, ich hab das mal für eine Zeit lang fast professionell gemacht.
Bitte um Hilfe, drehe mich seit Tagen im Kreis und mache nichts anderes mehr.
Gruß,
Dennis

Anzeige
AW: VBA spezieller Range vergleich
01.03.2021 09:43:29
ChrisL
Hi Dennis
"N/A" habe ich durch null ersetzt
p9399.1 habe ich ignoriert, weil es sonst keine Treffer geben würde
https://www.herber.de/bbs/user/144329.xlsx
(Quelldaten noch auf externe Datei anpassen)
Power-Query Lösung im Anhang. Ab XL-2016 integriert, vorher ein gratis Add-On.
Bitte Power-Query Intro-Video/-Tutorial schauen und versuchen die Einzelschritte im Anhang nachzuvollziehen. Mit konkreten Fragen gerne melden.
PQ hat wie bereits erwähnt den Vorteil, dass du direkt auf die externen Quelldaten zugreifen kannst (Copy/Paste via Clipboard ist nicht empfehlenswert) und die Transformation (Split in Spalten, Glätten etc.) benötigt nur ein paar Klicks. Zudem sollte PQ für den Datenvergleich eine gute Performance bringen.
cu
Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige