510 Aufrufe
Gefragt in Tabellenkalkulation von max19555 Einsteiger_in (91 Punkte)
Einen schönen Nachmittag zusammen,

ich habe ein mich für mich sehr großes und unlösbares Problem.

Ich würde gerne aus eingegebenen Suchdaten einen Wert aus einer Matrixtabelle wiedergeben.

In meiner Tabelle gebe ich in Zelle A1 ein Produkt ein, in Zelle A2 kommt dann die Hitzebeständigkeit (diese kann Variieren), in Zelle A3 kommt das zweite Medizinprodukt und in Zelle A4 die Hitzebeständigkeit (ebenfalls unterschiedlich) eines anderen Herstellers rein. Zum Schluss kommt noch unsere Reparaturgruppe die wir in Zelle A5 wählen. Als Ergebnis sollt e dann die Klassifizierung stehen...

Wie ihr seht habe ich viele Felder und zwei davon sind variabel.

In meinem anderen Tabellenblatt habe ich dann eine Matrixtabelle: In Spalte A befinden sich alle Produkte für Zelle A1, in Spalte B:C die Hitzebeständigkeit für Zelle A2, hier habe ich Ranges also Gruppen z.B. von 0 - 20 Grad, 21 - 30 Grad, etc..., in Spalte D befinden sich die zweiten Produktgruppen, in Spalte E:F die Hitzebeständigkeit dafür und in den Spalten G1 bis M1 als Überschrift die Reparaturangebote. Unter den Spalten G bis M sind dann die Zellen welche ich als Ergebnis im ersten Tabellenblatt brauchen würde.

Im Internet habe ich diese Formel hier gefunden:

{=INDEX(Tabelle2!A:M;VERGLEICH(Tabelle1!A1&A3;Tabelle2!A:A&Tabelle2!D:D;0);VERGLEICH(Tabelle1!A5;Tabelle2!A1:M1;0))}

Aktuell funktioniert es nur mit den Produktgruppen. Die variablen Werte kann ich nicht einfügen bzw. einbauen.

Lieber hätte ich es mit einem VBA Code aber hier kenne ich mich nicht aus. Also ein VBA das diesen Vergleich macht.

Ich hoffe ich habe es halbwegs verständlich aufgeschrieben und bedanke mich recht herzlich im Voraus und natürlich auch danach :)

Ich kann die Datei auch gerne hochladen aber ich finde die Funktion nicht dazu.

Liebe Grüße

Max

22 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
ausgewählt von max19555
 
Beste Antwort

Hallo Max,

hier die Datei mit der geänderten Suche: Download

Gruß

M.O.

0 Punkte
Beantwortet von max19555 Einsteiger_in (91 Punkte)

waaaaaaaaaaaaaaahnsiiiiiiiiiiiiiiiiiiin laugh

Ich freu mich so riesig das es klappt. M.O., ich Danke Dir so sehr für Deine Hilf bzw. Arbeityes

Ich werde es gleich mit Echtdaten testen.

Liebe Grüße

Max

0 Punkte
Beantwortet von max19555 Einsteiger_in (91 Punkte)
Hallo M.O.

nur für mein Verständnis: Wie wird denn eigentlich in den Spalten gesucht?

Ich kenne mich nicht aus aber vermutlich werden hier die Informationen mit der Tabelle2 verglichen aber wie machst Du das, das Excel erkennt in welcher Spalte sich die ausgewählte Serviceleistung befindet?

Der Code arbeitet so schnell das ist unglaublich.

LG

Max
0 Punkte
Beantwortet von max19555 Einsteiger_in (91 Punkte)

ich meinte hier wink

  For d = 1 To UBound(varDaten, 1)
     If varDaten(d, 1) = varSuch(z, 1) Then
       If varSuch(z, 2) >= varDaten(d, 2) And varSuch(z, 2) <= varDaten(d, 3) Then
          If varDaten(d, 4) = varSuch(z, 3) Then
             If varSuch(z, 4) >= varDaten(d, 5) And varSuch(z, 4) <= varDaten(d, 6) Then Exit For
          End If
       End If
     End If
  Next d

LG

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Max,

freut mich, dass der Code auch in deiner Echtdatei klappt.

Zur Erklärung:

Die Daten, die gesucht werden sollen werden in ein Array (=Feld) eingelesen, ebenso die Daten aus der Tabelle, in der gesucht werden soll (jeweils ohne Überschriften).

Der Codeteil, den du gepostet hast, vergleicht nun die Daten aus den einzelnen Arrays. Mit der Schleife werden die ganzen Daten vom 1. Datensatz bis zum letzten Datensatz (praktisch die jeweiligen Zeilen und Spalten) durchlaufen und auf Übereinstimmungen untersucht. Die Daten der beiden Felder wurden so eingelesen, dass die Spalte A der 1. Spalte des jeweiligen Feldes entspricht. Die Adressierung im Array sieht im Prinzip so aus: varDaten(Zeile,Spalte).

Dieser Codeteil sucht somit die Übereinstimmung bei dem Produkt

If varDaten(d, 1) = varSuch(z, 1) Then 

falls es hier eine Übereinstimmung gibt, dann wird geprüft ob die Hitze stimmt (liegt diese im entsprechenden Bereich?)

  If varSuch(z, 2) >= varDaten(d, 2) And varSuch(z, 2) <= varDaten(d, 3) Then

und falls das auch passt, wird das andere Produkt auf Übereinstimmung geprüft

If varDaten(d, 4) = varSuch(z, 3) Then

und auch hier wird natürlich noch einmal die Hitze überprüft, wenn das andere Produkt richtig ist

If varSuch(z, 4) >= varDaten(d, 5) And varSuch(z, 4) <= varDaten(d, 6) Then Exit For

Passt das alles, wird die Schleife verlassen (mit Exit For).

Damit steht in der Variable d die Position (Zeile), in der sich die gesuchten Daten befinden. Da sich das alles im Arbeitsspeicher abspielt, sind keine Zugriffe auf die Festplatte nötig, was zur Schnelligkeit des Codes beiträgt.

Nun wird nur noch überprüft, in welcher Spalte sich die Überschrift befindet, die der gesuchten Serviceleistung entspricht (hier wird allerdings auf die Festplatte zugegriffen). Dies geschieht hiermit:

 For s = 5 To UBound(varDaten, 2)
             If varSuch(z, 5) = wksDaten.Cells(1, s) Then .Cells(1 + z, 6) = varDaten(d, s)
 Next s

Ist diese Position gefunden, dann hast du auch die gesuchte Information gefunden. Das kannst du dir wie Längen- und Breitengrade vorstellen. Die Kombination aus Längen- und Breitengrad gibt dir eine genaue Position an.

Gruß

M.O.

0 Punkte
Beantwortet von max19555 Einsteiger_in (91 Punkte)
Danke für Deine Super Erklärung. Es ist echt super kompliziert. Ich habe mir ein Buch über VBA gekauft aber wenn ich das hier sehe, puuuuuuh dann weiß ich nicht ob ich das jemals lernen könnte :)

Könnte ich Dir vielleicht nur noch ein Anliegen senden oder nerve ich Dich? Ich habe ehrlich lange überlegt ob ich Dir das schreiben soll.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Max,

es freut mich, dass du VBA lernen willst. Ich habe es mir auch selber beigebracht und über Jahre geübtwink.

Du kannst ruhig Fragen stellen. Dafür ist das Supportnet ja da.

Falls deine neue Frage aber nichts mit der hier zu tun, solltest du einen neuen Thread eröffnen.

Gruß

M.O.

0 Punkte
Beantwortet von max19555 Einsteiger_in (91 Punkte)

Guten Morgen M.O.,

wie hast Du Dir das selbst beigebracht surprise. Machst Du das auch beruflich?​ 

Wie lange hat es gedauert bis Du das Profi-Wissen erlangt hast? Ich habe gestern nach Allem gegooglet, mit dem Ubound, Arrays aber die Verknüpfung so zu schaffen erscheint mir als unmöglich. 

Zum File:

Es bezieht sich noch auf dasselbe File. Es ist so das ich noch eine andere Excel-Datei für die erweiterte Klassifizierung nutze. Mit Deiner Lösung wäre das File dann hinfällig. 

Ich würde beide Mappen von Dir nutzen, einmal mit einer Abfrage und die Zweite mit der Schleife.

Ich habe die Klassifizierung in eine Spalte im Datensheet (grün) hinzugefügt. Ist es möglich die Klassifizierung neben dem Ausgabefeld aus der jeweiligen Zeile ebenfalls anzeigen zu lassen?

Wenn das ein neuer Thread ist, kann ich gerne eins aufmachen.

Version 1: http://supportnet.de/forum/?qa=blob&qa_blobid=2640638023234335484

Version 2: http://supportnet.de/forum/?qa=blob&qa_blobid=9956816883456886922

Liebe Grüße und sorry. Dieser Punkt ist mir später eingefallen. Es ist nur noch das :) Andere Files folgen sicherlich laugh

Max

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Max,

mit Excel arbeite ich - auch beruflich (als normaler Anwender) - schon seit mehr als 20 Jahren und mit der VBA-Programmierung beschäftige ich mich (glaube ich) seit gut 10 Jahren. Ich habe mir alles durch learning by doing beigebracht und mir dazu viele Codes z.B. in diesem Forum angeschaut. Man fängt klein an und nach und nach werden die Projekte größer und anspruchsvoller. Und wenn man sich damit noch seinen Arbeitsalltag erleichtern kann, lohnt sich die Mühe doppelt laugh.

Ich habe deine beiden Dateien angepasst:

Version I

Version II

Gruß

M.O.

0 Punkte
Beantwortet von max19555 Einsteiger_in (91 Punkte)

O man das funktioniert so toll :) und vor allem so schnell.

Ich habe immer alles mühsam über Formeln zusammenrechnen müssen. Es entstanden Fehler aufgrund der vielen Zeilen und dauerte z.T. Stunden... und jetzt auf Knopfdruck laughlaugh

Man muss aber sicherlich mathematisch ziemlich fit darin sein?

...