Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1672to1676
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

Werte aus Quelldateien in Matrix zuordnen

Werte aus Quelldateien in Matrix zuordnen
13.02.2019 08:54:26
Nilo
Hallo zusammen,
ich benötige Eure Hilfe da meine Matrixformel etwas "schwerfällig" ist :)
Was habe ich:
Eine Quelltabelle mit Nummern in A:A und Werkstoff in D:D und Beschreibung in F:F
Nummern sind als Text formatiert
Werkstoff ist ebenfalls Text und Beschreibung ist alphanummerisch.
Vertikal aufgebaut
Nummer|Werkstoff  |Beschreibung        |usw.
123456|AV_OMF_07  |Stark_Druckbeständig|
123456|LG_OMD_07  |I=5,15 HF86         |
123456|SDF_OMG_07 |D51-DSS-FF          |
123558|OEM_OMF_225|27.00 KG            |
usw.  |
Meine Matrix soll so aufgebaut werden:

Nummer|AV_OMF_07           |LG_OMD_07  |SDF_OMG_07|OEM_OMF_225
123456|Stark_Druckbeständig|I=5,15 HF86|D51-DSS-FF|
123558|                    |           |          |27.00 KG
Meine Formel der Matrix beginnend in A2 nach rechts zu ziehen:
  • {=Wennfehler(INDEX(Sheet1!$F:$F;VERGLEICH(LINKS($A2;8)*1&D1;LINKS(Sheet1!$A:$A;8)*1&Sheet1!$D:$D;0); 1);"")}

  • Das klappt auch ganz gut aber die Matrix ist ca. 1000 Spalten (Werkstoffe) breit und bei ca. 30000 Nummern tief ausgelegt, in denen ich die Werte aus der Quelle zuordnen möchte.
    Mit der Formel komme ich da nicht weit.
    Könnt Ihr da was mit machen in richting ScriptingDict oder VBA?
    Vielen Dank und Gruß
    Nilo

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

    Betreff
    Datum
    Anwender
    Anzeige
    AW: hierzu ...
    13.02.2019 14:20:52
    neopa
    Hallo Nilo,
    ... eine Matrixformel sollte bzgl. Ihres Auswertungsbereiches immer nur auf den max notwendigen Datenbereich beschränkt werden. Also hier z.B. ... LINKS(Sheet1!$A1:$A30000;8)*1&Sheet1!$D1:$D30000;0) ...
    Allerdings 30000 Datensätze mit einer derartigen Matrixformel auszuwerten braucht auch seine Zeit, vor allem wenn Du diese 1000 mal einsetzen willst. Hier würde sich bei einer reinen Formellösung eine Hilfsspaltenaufbereitung in Sheet1 anbieten und diese dann mit einer Standardformel auszuwerten.
    Gruß Werner
    .. , - ...
    AW: Werte aus Quelldateien in Matrix zuordnen
    13.02.2019 14:33:59
    Daniel
    Hi
    1. Hilfsspalte einfügen , in welcher du Nummer und Werkstoff zu einem Begriff zusammenfasst.
    2. sortiere die Tabelle nach dieser Hilfsspalte
    dann kannst du die Begriffe einfach über den kombinierten Wert mit dem SVerweis suchen und dabei den SVerweis mit 4. Parameter = WAHR verwenden.
    dieser ist wesentlich schneller als sein "falscher" Bruder.
    da du jetzt keinen Fehler mehr bekommst, wenn die Kombination nicht vorhanden ist, musst du den SVerweis so aufbauen (ich gehe mal davon aus, dass die Hilfsspalte in A steht, und dann die Auswertespalte um 1 versetzt in G:
    
    =Wenn(SVerweis(Links($A2;8)&D$1;Sheet1!$A:$A;1;wahr)=Links($A2;8)&D$1;SVerweis(Links($A2;8)&D$1; Sheet1!$A:$G;7;wahr);"") 
    
    alles andere ist bei der genannten Datenmenge nicht praktikabel.
    Den geschwindigkeitsunterschied in der Berechnung zwischen den beiden SVerweis-Varianten kannst du so abschätzen
    die Datenmenge (anzahl Zeilen) ist sei in etwa x = 2^n
    dann ist die Suchzeit für den SVerweis mit 4. Parameter = falsch bzw den Vergleich mit 3. Parameter = 0 proportional x/2
    die Suchzeit für den SVerweis mit 4. Parameter = Wahr ist proportional n
    Gruß Daniel
    Anzeige
    AW: vielen Dank mal ihr beiden. Ich...
    13.02.2019 16:17:54
    Nilo
    ...habe mit den Vorschlag zu Herzen genommen und Daniel seinen Anstatz ausprobiert.
    Das funktioniert schon sehr gut. Viele Dank.
    Ich werde mir gedanken dazu machen mehr Hilfsspalten zu nutzen, weitere Felder Verketten und über diese suchen.
    Das mit dem "falschen" Bruder hatte ich gar nicht so "richtig" auf dem Schirm ;)
    Viele Grüße
    Nilo
    AW: könnt Ihr nochmal draufgucken bitte...
    13.02.2019 17:37:02
    Nilo
    Hi nochmal,
    ich versuche das setzen der Formel per VBA einfach laufen zu lassen, hänge aber an der finalen Umsetzung :)
    Wenn ich die Formel nur in eine Zeile schreibe dann so, danach Werte übernehmen, klappt!
  • 
    Sub einzeiler()
    Dim Arr
    Dim i As Integer
    For i = 7 To 1000
    Sheets("Tabelle1").Cells(2, i).FormulaR1C1 = "=IFERROR(IF(VLOOKUP(LEFT(RC1,8)&R1C,Sheet1!C1,1, _
    TRUE)=LEFT(RC1,8)&R1C,VLOOKUP(LEFT(RC1,8)&R1C, Sheet1!C1:C7,7,TRUE),""""),"""")"
    Next i
    With Range("G2:ALR" & Cells(Rows.Count, "A").End(xlUp).Row)
    Arr = .Value2
    .Value2 = Arr
    End With
    End Sub
    

  • Jetzt möchte ich aber wenn er fertig ist in die nächste Zeile springen und wieder laufen lassen bis letzte Zeile, da haperts noch!
    also:
    .Cells(3, i)
    .Cells(4, i)
    usw bis letzte Zeile
    Könnt Ihr da mal draufgucken:
    Viele Dank noch einmal im Voraus
    Gruß
    Nilo
    Anzeige
    AW: Kommando zurück! Habs doch geschaft :)
    13.02.2019 17:45:14
    Nilo
  • 
    Sub formeln()
    Dim i As Integer
    Dim leZeile As Long
    Dim WkSh_Z As Worksheet
    Set WkSh_Z = ActiveSheet
    For i = 7 To 30
    For leZeile = 2 To WkSh_Z.Cells(Rows.Count, 7).End(xlUp).Row
    Sheets("Tabelle1").Cells(2, i).FormulaR1C1 = "=IFERROR(IF(VLOOKUP(LEFT(RC1,8)&R1C, _
    Sheet1!C1,1,TRUE)=LEFT(RC1,8)&R1C,VLOOKUP(LEFT(RC1,8)&R1C, Sheet1!C1:C7,7,TRUE),""""),"""")"
    Next leZeile
    Next i
    End Sub
    

  • AW: Kommando zurück! Habs doch geschaft :)
    13.02.2019 18:11:24
    Daniel
    Hi
    das WENNFEHLER brauchst du beim SVERWEIS mit 4. Parameter = WAHR nicht mehr.
    da bekommst du nur dann einen Fehler, wenn du nach einem begriff suchst, der kleiner ist als erste (kleinste) Wert in der Liste.
    und diesen Fehler kannst du einfacher vermeiden, in dem du der durchsuchten Liste am Anfang eine Zeile hinzufügst und dort in die erste Zelle 0 hineinschreibst.
    solange du nicht nach negativen Zahlen suchst, ist das der kleinstmögliche Wert.
    Weiterhin: warum schreibst du die Formel per Scheife einzeln in jede Zelle?
    macht man doch von Hand auch nicht.
    du kannt die Formel auch gleich in den ganzen Zellbereich schreiben, so wie wenn du von Hand so vorgehst:
    1. alle Zellen markieren
    2. Formel in die aktive Zelle eingeben
    3. Eingabe mit STRG+ENTER abschließen
    braucht keine Schleife und ist viel schneller.
    Sheets("Tabelle1").Cells(2, 7).Resize(1, 994).FormulaR1C1 = "=...."
    
    Gruß Daniel
    Anzeige
    AW: Dinge die man nicht weiß bekommt man gesagt :)
    14.02.2019 08:46:43
    Nilo
    Vielen Dank Daniel, das läuft jetzt wirklich schneller!
    Gruß

    308 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige