ich habe eine recht komplexe Anforderung die ich wahrscheinlich in professionelle Hände in Form einer Auftragsprogrammierung legen muss. Habe recht stümperhaft das Ganze mal über den Makrorekorder versucht.. Falls es doch weniger komplex ist als ich denke freue ich mich über jegliche Hilfestellungen =)
Ich habe zwei Dateien zwischen denen in per VBA einen sVerweis machen muss (und das einmal pro Monat). ich würde gerne die erste Datei (Name der Datei ist über die Monate nicht gleichbleibend, ich nenne Sie mal Datei(x1)) mittels eines Dialoges auswählen. In dieser Datei müsste ich nach der Spalte S, 5 neue Spalten einfügen, den Reiter "Klassifizierung" aus der Datei(x2) in die Datei(x1) kopieren. Die Spaltenüberschriften der 5 neuen Spalten ergeben sich aus dem kopierten Reiter "Klassifizierung" aus dem Bereich T6:X6. Zudem müssten nach der Spalte AA in der Datei(x1) zwei neue Spalten eingefügt werden und die mit "Teilbereich A" und "Teilbereich B" benannt werden (Bezeichnungen stehen aber auch in Datei(x2) im Bereich AB6:AC6.
Jetzt kommt der schwierige Teil:
Der sVerweis der die Spalteninhalte aus Datei(x2) ab T7:X7 in die Datei(x1) übergeben soll muss aus drei Suchkriterien bestehen, weil sonst keine Eindeutigkeit zwischen den beiden Dateien besteht=verketten(Datei(x1)B7_D7_E7). Die Inhalte aus Datei(x2) aus dem Bereich T7:Xn sollen per Sverweis/ index+Vergleich.. in den Bereich T7:Xn der Datei(x1) eingefügt werden.
Die in Spalte T in Datei(x1) übertragenen Daten sollen als Werte eingefügt werden. Zellen in dieser Spalte die nicht in Datei(x2) vorkamen müssten ein Dropdown hinterlegt bekommen. Aus dem Reiter Klassifizierung A3:A12.
Die Spalten U und V referenzieren anhand der Matrix des Reiters Klassifizierung auf den Output der Spalte T (sVerweis auf den Reiter Klassifizierung in der Datei(x1)).
Die Spalte W muss als Wert eingefügt werden. Die Spalte X auch als Wert allerdings als Datum formatiert.
Anbei mal beide Dateien stark vereinfacht. Evtl ist ja einer von euch wie ich bei der Sonne trotzdem am PC und hat Lust =)
mal stark vereinfacht geantwortet erst mal zwei recht simple Ansätze.
Ansatz 1) Um mit direkt SVERWEIS nach mehrspaltigen Kriterien zu suchen bräuchtest Du in der Quelle eine Hilfsspalte wo DU die Spalteneinträge zusammenfasst. Wäre das möglich? Dann bräuchte man nur beim Dateiwechsel mit Suchen & Ersetzen den Dateinamen zu ändern - auch per Makro anhand einer auszuwählenden Datei
Ansatz 2) Mehrspaltige Suchkriterien bekommt man ohne Hilfsspalte mittels INDEX und Vergleich gezogen. Allerdings muss dafür die Quelle geöffnet sein. Dateiwechsel - siehe 1)
Ansatz 3) Per VBA die Quelle öffnen, die INDEX-Formeln im Ziel eintragen, Berechnen und die INDEX-Formeln mit den Ergebnissen ersetzen
Wegen dem Ersatz der Formeln durch Werte und dem flexibel einzusetzendem DropDown wäre dann wohl die Variante 3) vorzuziehen.
Was bedeutet denn einmal pro Monat? Kommen die im Vormonat gezogenen Daten weg und nur die aktuellen rein oder werden die Daten erweitert?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Leonhard
die Datei(x1) wird am Monatsanfang aus dem System erzeugt. Die Kollegen haben bis zu diesem Tag mit der vorherigen Systemversion -Datei(x2) gearbeitet und dort Ihre Kommentare eingearbeitet, die müssten dann auf den aktuellen Stand der Systemdatei übertragen werden. Es kann gut sein das Zeilen die in der Datei(x2) vorhanden waren, in der neuer (am Monatsanfang gezogenen Datei(x1) nicht mehr drinnen sind, dafür aber neue Zeilen hinzugekommen sind.
Variante 3 ist glaube die Variante die es zur Umsetzung bräuchte. In meinem Versuch das mit dem Makrorekorder umzusetzen hatte ich mir eine Hilfsspalte mit den Suchkriterien aufgebaut aber das Ergebnis war Kraut und Rüben (was mit Sicherheit an meinen Fähigkeiten und nicht an dem Lösungsansatz mittels einer Hilfsspalte per se gelegen hat )
ich habe es nochmal mit dem Makrorekorder und einer Hilfsspalte gelöst die danach wieder gelöscht wird. Durch das ganze Select und Acivate braucht es leider doch recht lange diese, eigentlich simple Anforderung umzusetzen.
Uuund.. leider werden nur die ersten 3 Zellen in der Spalte T mit dem gewünschten Dropdown hinterlegt, sonst macht es das was es tun soll :17: :17:
Falls einer von euch das Ganze noch ein wenig schneller & stabiler umschreiben mag, ich würde mich sehr freuen =)
nochmal überarbeitet und die (Reiter)- Bezeichnungen des Originals im Code. ich hoffe das es einer von euch evtl doch noch robuster und schneller machen mag
hier ist das Makro mal "wild" reduziert. Musst mal schauen, ob es noch läuft. Prinzipiell hast DU einige Sachen mehrfach drin, Select kann man vermeiden und zusammenfassen, wie ich schon schrieb, wobei da sicher noch einige zu viel drin sind, z.B. Range(Selection, Selection.End(xlDown)).Select, einiges Scrollen muss auch nicht sein, und wenn Deine Daten mal anders kommen könnte auch das Eine oder Andere nicht mehr laufen ... …
Code:
Sub Makro1() ' Application.Run "Test_V2.xlsm!Dialog" With Rows("1:3") .HorizontalAlignment = xlGeneral .VerticalAlignment = xlTop .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlLTR .MergeCells = False .UnMerge End With
ich habe mir deinen Rat zu Herzen genommen und alles soweit wie möglich eingestampft und es läuft immer noch =) Würde den Stand jetzt erstmal so beibehalten, habe es mit neuen x1 Dateien versucht und es funktioniert (zwar nicht unbedingt schnell) gut.
Besten Dank für deine Hilfe, ich werde jetzt versuchen den Code immer weiter zu verfeinern =)