Suchen Sie ein Feld basierend auf zwei oder mehr Spalten

697
Sokunthaneth

Ich möchte das professorFeld basierend auf der Eingabe in den gelben Feldern ausgeben . Die Eingabe ist die Möglichkeit sub_codevon column DODER column G. Ich habe versucht, VLOOKUP(...)und INDEX(...,MATCH(...)), aber ich stecken, wenn auszuführen versuchen: either column D or column G.

Zum Beispiel möchte ich Johnbei der Eingabe in E7 Ag1oder Ps1in E8 gedruckt werden .

Wie könnte ich eine Funktion für diesen Fall schreiben?

Tabellenkalkulationstabelle

1
@ fixer1234 Im Grunde möchte ich, dass 'John' im gelben Cursor-Feld gedruckt wird, wenn ich 'Ag1' oder `Ps1 'in dieses Feld eingebe. Ich bin nicht sicher, welche Formel ich verwenden soll. Sokunthaneth vor 5 Jahren 0
Nur um zu klären, ist es eine Anforderung, dass die Eingabe und das Ergebnis in derselben Box sein müssen? In diesem Fall benötigen Sie VBA, da die Eingabe alle Funktionen in der Zelle ersetzen würde. fixer1234 vor 5 Jahren 0
@ fixer1234 Entschuldigung, es ist eine andere Box. Keine Notwendigkeit, dieselbe Box zu verwenden. Nehmen wir an, ich gebe es in das graue Feld aus, wenn ich in das gelbe Feld "sub_code" eingebe. Sokunthaneth vor 5 Jahren 0
Gibt es für mehr als einen Professor die Möglichkeit, denselben Subcode zu verwenden? fixer1234 vor 5 Jahren 0
@ fixer1234 ein Professor kann einen oder mehrere `sub_code` haben, aber keinen gleichen` sub_code`. Jeder "sub_code" ist einzigartig. Sokunthaneth vor 5 Jahren 0
Eigentlich war meine Frage mehr, könnten John und Phillip denselben Subcode haben. fixer1234 vor 5 Jahren 0
@ fixer1234 Nein, sie können nicht denselben "sub_code" haben. Sokunthaneth vor 5 Jahren 0

3 Antworten auf die Frage

1
Rajesh S

Option 1:

Um das Problem zu lösen, benötigen Sie eine HELPER-Zelle, um festzulegen, welchen Code Sie verwenden möchten.

Schreiben Sie diese Formel in eine Zelle F10.

=IFERROR(INDEX($A$3:$A$6,IF($C$9=1,MATCH($D$10,$D$3:$D$6,0),IF($C$9=2,MATCH($D$10,$G$3:$G$6,0)))),"Wrong Code") 

Wie es funktioniert:

  • C9Schreiben Sie in Helper Cell entweder 1 oder 2.
  • Schreiben Sie Sub Codein Zelle D10.
  • Formel sucht Sub Codein Column Dwenn C9 has 1, sonst überprüfen Sie die Sub CodeinColumn G.
  • Wenn Sie eine falsche Kombination in Zellen C9und D10dann festgelegt haben, gibt die Formel einen falschen Codefehler aus.

Bearbeitet:

Option 2:

Diese Array-Formel kann auch in Cell verwendet werden F10.

{=IFERROR(INDEX($A$3:$A$6,MATCH(1,($D$3:$D$6=$D$10)+($G$3:$G$6=$D$10),0)),"Wrong Code")} 

Hinweis,

  • Beenden Sie die oben beschriebene Formel mit Ctrl+Shift+Enter.
  • Bei der Arbeit mit OPTION 2 müssen Sie nicht in die Hilfszelle schreiben, sondern C9nur Sub Codein die Zelle D10.

Passen Sie die Zellverweise in der Formel nach Bedarf an.

Ich denke, das Problem des OPs ist, dass der Subcode in beiden Spalten stehen könnte und Sie nicht wissen, welcher. Die Aufgabe besteht also darin, einfach in mehreren Spalten danach zu suchen (anstatt jede Spalte manuell auszuprobieren, bis Sie die Übereinstimmung finden). fixer1234 vor 5 Jahren 0
@ fixer1234, jetzt habe ich den Beitrag bearbeitet und eine Array-Formel eingefügt, die den Sub-Code in beiden Spalten automatisch durchsucht! ☺ Rajesh S vor 5 Jahren 0
Option 2: viel besser! :-) Die Beispiele haben keine Zeilen- oder Spaltenreferenzen, daher etwas schwer zu folgen. Sollte wahrscheinlich auch erwähnen, dass Groß- und Kleinschreibung beachtet wird, und ein paar Sätze hinzufügen, die erklären, wie es funktioniert. +1 (Und einfach Option 1 löschen, damit geht es direkt zur Lösung.) fixer1234 vor 5 Jahren 0
@ fixer1234 ,, Die Formel macht nichts aus, da sowohl Upper als auch Lower berücksichtigt wird, 1 steht für Ture, was also in Col D oder G der Fall ist. Rajesh S vor 5 Jahren 0
In LO Calc stimmte es nicht überein, es sei denn, der Fall stimmte überein. Vermutlich haben wir ein anderes Beispiel gefunden, bei dem sich Excel und Calc unterscheiden. In meiner Lösung funktionierte das Match für beide Fälle. Ihr verwendet eine Gleichheit und Calc benötigt dafür einen passenden Fall. fixer1234 vor 5 Jahren 0
0
fixer1234

Für VLOOKUP muss die Spalte ganz links durchsucht werden, damit dies nicht funktioniert. INDEX + MATCH funktioniert, aber MATCH kann nicht mehrere oder zweidimensionale Bereiche durchsuchen. Eine Problemumgehung besteht darin, mehrere MATCHes für die verschiedenen Bereiche zu kombinieren.

Das Ergebnis der Suche in E7 verwendet diese Formel:

=IFERROR(INDEX(A2:A5,IFERROR(MATCH(E8,D2:D5,0),0)+IFERROR(MATCH(E8,G2:G5,0),0)),"Invalid Sub_code") 

Jede Spalte hat einen eigenen MATCH. Die Übereinstimmung wird nur in einer Spalte vorkommen. IFERROR gibt also Null zurück, wenn die Spalte keine Übereinstimmung hat. Durch das Hinzufügen der Übereinstimmungswerte wird ein Ortsindex für die Spalte mit der Übereinstimmung und Null für alle weiteren gesuchten Spalten kombiniert. Der Fragentitel sagt "zwei oder mehr Spalten". Dies kann durch Hinzufügen eines weiteren MATCH-Ausdrucks für jede weitere Spalte erweitert werden.

INDEX wird mit einem eigenen IFERROR umhüllt, falls ein falscher Subcode eingegeben wird. Bei MATCH wird nicht zwischen Groß- und Kleinschreibung unterschieden. Es wird also immer noch eine Übereinstimmung gefunden, wenn nur die Groß- und Kleinschreibung nicht gleich ist.

Natürlich können Sie mehrere Eingabezellen und entsprechende Ergebniszellen haben.

Alternative

@Rajesh S hat festgestellt, dass dies auch umstrukturiert werden kann:

=IFERROR(INDEX(A2:A5,MATCH(E8,D2:D5,0)),IFERROR(INDEX(A2:A5,MATCH(E8,G2:G5,0)),"Invalid Sub_code")) 

Dabei wird jeder MATCH-Ausdruck mit INDEX verwendet. Der IFERROR auf dem INDEX kümmert sich auch um MATCH-Fehler. Die IFERRORS werden dann geschachtelt, sodass ein Fehler beim ersten Lookup beim zweiten Lookup auftritt und ein Fehler bei der fehlerhaften Warnung Sub_code. Es endet dieselbe Länge, da die Anzahl der INERX-Funktionen steigt, während die Anzahl der IFERROR-Funktionen abnimmt. Dies kann durch zusätzliche Verschachtelung für zusätzliche Spalten vergrößert werden.

Verwenden Sie die Version, die am intuitivsten erscheint.

Um die Struktur und Logik zu vergleichen, werde ich die Formeln aufschlüsseln.

Alternative 1:

=IFERROR( INDEX(A2:A5, IFERROR( MATCH(E8,D2:D5,0) ,0) + IFERROR( MATCH(E8,G2:G5,0) ,0) ) ,"Invalid Sub_code") 

Alternative 2:

=IFERROR(  INDEX(A2:A5, MATCH(E8,D2:D5,0) ) ,IFERROR( INDEX(A2:A5, MATCH(E8,G2:G5,0) ) ,"Invalid Sub_code") ) 
0
Geza Kerecsenyi

=IFERROR(INDIRECT("A"&IF(SUMPRODUCT(--($D$2:$D$5=$E$8),ROW($A$2:$A$5))=0, SUMPRODUCT(--($G$2:$G$5=$E$8),ROW($A$2:$A$5)), SUMPRODUCT(--($D$2:$D$5=$E$8),ROW($A$2:$A$5)))), IF(E8="","","Invalid code"))

Ich gebe zu, es ist nicht das kürzeste, aber meiner Meinung nach das stabilste. Fixer1234 gibt zu, dass er nicht zu elegant ist, während Rajesh Helfer-Zellen verwendet, was keine bewährte Methode ist, da Excel nicht für sie vorgesehen war und bei komplexeren Projekten zu Zirkelreferenzen führen könnte.

Zurück zu meiner Formel.

Wie es funktioniert

SUMPRODUCT(--($D$2:$D$5=$E$8),ROW($A$2:$A$5): Überprüft, ob Spalte D eine Übereinstimmung enthält. Wenn ja, wird die Zeilennummer der Übereinstimmung zurückgegeben. Wenn keine Übereinstimmung gefunden wird, wird 0 zurückgegeben.

SUMPRODUCT(--($G$2:$G$5=$E$8),ROW($A$2:$A$5): Überprüft, ob Spalte G eine Übereinstimmung enthält. Wenn ja, wird die Zeilennummer der Übereinstimmung zurückgegeben. Wenn keine Übereinstimmung gefunden wird, wird 0 zurückgegeben.

IF(...=0, ..., ...): Überprüft, ob die Suche in Spalte D 0 ergab, dh keine Übereinstimmung. In diesem Fall wird das Ergebnis für Spalte G zurückgegeben. Andernfalls wird nur das Ergebnis von Spalte D zurückgegeben.

INDIRECT("A"&...): Die Zeilennummer der SUMPRODUCTs (oder die 0, falls keine Übereinstimmung besteht) wird mit "A" kombiniert - dem Buchstaben der ersten Spalte. Die INDIRECT Funktion findet dann die Zelle mit dieser Referenz. Es könnte zum Beispiel die Zelle 'A3' oder, wenn keine Übereinstimmung gefunden wurde, 'A0' gefunden werden - eine nicht vorhandene Zelle.

IFERR(..., ...): Überprüft und behandelt Fehler. Wenn Spalte D keine Übereinstimmung enthält, wird die Suche nach Spalte G zurückgegeben. Wenn Spalte G jedoch auch nichts enthält, wird "A0" nur an die INDIRECT Funktion übergeben, die keine echte Zelle ist. Daher wird ein Fehler ausgegeben, und es wird der Fehlerbehandler ausgeführt, anstatt den Fehler anzuzeigen.

IF(E8="","","Invalid code")): Behandelt den Fehler. Wenn die Eingabezelle leer ist, bleibt sie auch leer, da kein Aufwand erforderlich ist. Wenn es jedoch nicht leer ist, aber immer noch ein Fehler auftritt, wird 'Invalid Code' zurückgegeben , da dies nur bedeuten kann, dass etwas eingegeben wurde und dass etwas ungültig war.

Beispiele

Funktionell:

'He1' steht in E8, E7 gibt 'Phillip' zurück.

'Kh1' steht in E8, E7 gibt 'Deav' zurück.

Leere Eingabe:

Sowohl E7 als auch E8 sind leer

Ungültige Eingabe:

'Rn1' wird in E8 geschrieben, E7 gibt 'Ungültiger Code' zurück

Dies funktioniert und demonstriert einen anderen Ansatz, aber ich denke, es ist eher komplizierter als eleganter oder stabiler. Es ist auch nicht sauber skalierbar, wenn das OP zusätzliche Spaltengruppen hinzufügen muss (der Titel sagt "zwei oder mehr Spalten", daher wird dies erwartet). Die Formel ist doppelt so lang und ich vermisse, welchen Vorteil sie hat. Aber es ist ein gültiger Ansatz und die Antwort ist sehr gut geschrieben. Sie haben gut erklärt, wie es funktioniert. fixer1234 vor 5 Jahren 0