komplexe Excel-Double-INDEX-MATCH-Formel, die ein eindeutiges Wertzusammenfassungsarray zurückgibt und verwendet

-1

Ich habe eine Erste-Hilfe-Aufzeichnung in Excel und versuche, einige Berechnungen zu automatisieren, die jedes Jahr durchgeführt werden.

Ich habe eine Beispieldatei (ohne Bezeichner) angehängt, um das Problem zu veranschaulichen. Eine Dropbox Link ist hier .

Ich versuche, die von jedem Arzt pro Jahr geleistete Gesamtarbeitszeit im Arbeitsblatt "Statistik" anhand der Daten der anderen Arbeitsblätter zu berechnen.

Die von jedem Arzt beobachteten Fälle werden im Arbeitsblatt "Zusammenfassung" in einer Tabelle mit dem Namen "Aufzeichnung" aufgezeichnet. Für jeden Fall werden das Jahr, die Schicht, der Name des Arztes und die Fehler in der Aufzeichnung aufgelistet.

Jede Schicht hat eine eindeutige Kennung, die im Arbeitsblatt "TimeIndex" in einer Tabelle mit dem Namen "ShiftValueT" aufgeführt ist.

Ich versuche, eine Formel zu schreiben, die Folgendes bewirkt:

  1. Identifiziert Zeilen, die mehreren Kriterien entsprechen (Year, Medic, ISERROR = FALSE ())
  2. Verwendet diese Zeilen, um die entsprechenden UniqueShift-Werte zu identifizieren
  3. Erstellt ein Array aus eindeutigen Werten der UniqueShift-Spalte which korrespondieren (dh Duplikate entfernen).
  4. Verwendet diese eindeutigen Werte (INDEX MATCH) in der ShiftValueT-Tabelle, um die entsprechenden Stunden pro UniqueShift-Typ zu ermitteln
  5. Summiert alle Stunden, die den identifizierten UniqueShifts entsprechen

Ich bin so weit gekommen (als Array-Formel):

=SUM(INDEX(ShiftValueT[[Value]:[Value]],MATCH(INDEX(Record[[UniqueShift]:[UniqueShift]],MATCH(B$1&FALSE()&$A2,Record[[Year]:[Year]]&Record[[ISERROR]:[ISERROR]]&Record[[Medic]:[Medic]],0)),ShiftValueT[[UniqueShift]:[UniqueShift]],0)))

Dies gibt jedoch nur die erste Instanz von UniqueShift und die Einzelstundenreferenz in ShiftValueT zurück.

Wie kann ich meine Formel ändern, um die Summe aller Stunden zurückzugeben?

Hinweis: Ich würde VBA lieber nicht verwenden.

Vinciture
quelle
Wie wollen Sie mit den Schichten vor und nach der Schicht umgehen, in denen keine Stunden in der Schichtwert-Tabelle aufgeführt sind?
Bandersnatch
Warum sollten Sie in Schritt 3 Duplikate entfernen? Wenn sich eine Schicht im Array befindet, liegt dies daran, dass eine Kombination aus Jahr, Sanitäter und keinem Fehler gefunden wurde, und es könnte leicht viele davon in einem Jahr geben. Vermutlich möchten Sie die Stunden für alle Fälle eines bestimmten Arztes während dieser Schicht in einem Jahr summieren.
Bandersnatch
Das Schaublatt enthält eine Referenz für den behandelnden Arzt pro gesehenem Patienten. Daher wird bei jeder Patientenakte angezeigt, ob sie gerade im Dienst sind. Wenn Sie jede Schicht aufsummieren, erhalten Sie ein Vielfaches der tatsächlich geleisteten Arbeitsstunden. Daher müssen doppelte Einträge entfernt werden.
Vinciture

Antworten:

1

Zunächst würde ich empfehlen, für diese Art von Operation eine Pivot-Tabelle zu verwenden. Wenn ein Pivot-Tisch keine Option ist, könnte dies folgendermaßen gelöst werden

  1. Ändern Sie das '-' für PRE und POST in der 'ShiftValueT'-Tabelle auf 0.
  2. Fügen Sie der Tabelle 'Record' eine Spalte mit dem Namen Time Index value hinzu und verwenden Sie ein Vlookup, um den entsprechenden Zeitwert für jeden Datensatz abzurufen.

=VLOOKUP([@UniqueShift],ShiftValueT,2,FALSE)

  1. Dann haben Sie auf der Registerkarte "Statistiken" je nach Excel-Jahr zwei Optionen. Für 2016 können Sie eine Summenproduktformel verwenden (Dies ist in der Zelle Stats! B2).

=SUMPRODUCT((Record[Medic]=Stats!$A2)*(Record[Year]=Stats!B$1)*(Record[ISERROR]=FALSE)*Record[Time Index Value])

oder wenn Sie Vorgängerversionen von Excel haben (um {} zu erhalten, drücken Sie Strg + Umschalt + Eingabetaste beim Verlassen der Zelle)

{=SUM(IF(Record[Medic]=Stats!$A2,IF(Record[Year]=Stats!B$1,IF(Record[ISERROR]=FALSE,Record[Time Index Value],0),0),0))}

Hinweis: Wenn Sie keine Duplikate einfügen müssen, entfernen Sie die Duplikate aus den Tabellendaten, bevor Sie die Formeln verwenden. Oder befolgen Sie die folgenden Schritte

  1. Fügen Sie der 'Records'-Tabelle eine weitere Spalte mit dem Namen "Duplicates" hinzu (diese sollte sich in Spalte F befinden) und fügen Sie diese Formel in F2 ein. Hinweis Für diese Marke ist Excel 2016 erforderlich

=IF(COUNTIFS($A$2:$A3,$A3,$B$2:$B3,$B3,$B$2:$B3,$B3,$C$2:$C3,$C3,$D$2:$D3,$D3,$E$2:$E3,$E3) >1, "Duplicate row", "")

  1. Formeln aktualisieren auf

=SUMPRODUCT((Record[Medic]=Stats!$A2)*(Record[Year]=Stats!B$1)*(Record[ISERROR]=FALSE)*(Record[Duplicate]<>"Duplicate row")*Record[Time Index Value])

oder

{=SUM(IF(Record[Medic]=Stats!$A2,IF(Record[Year]=Stats!B$1,IF(Record[ISERROR]=FALSE,IF(Record[Duplicate]<>"Duplicate row",Record[Time Index Value],0),0),0),0))}

Dude_Scott
quelle
0

Das Hinzufügen einer Hilfsspalte, wie in der anderen Antwort vorgeschlagen, vereinfacht das Problem erheblich. Wenn Sie das können, empfehle ich es.

Die Spalten müssen jedoch in der Formel gesperrt sein:

=SUMPRODUCT((Record[[Medic]:[Medic]]=Stats!$G2)*(Record[[Year]:[Year]]=Stats!H$1)*(Record[[ISERROR]:[ISERROR]]=FALSE)*Record[[Hours]:[Hours]])

Ich habe die neue Spalte "Stunden" genannt, wie Sie sehen können.

Wenn Sie keine Hilfsspalte hinzufügen können, erfordert die Lösung das sehr seltsame de-referenziert INDEX () -Formel , über die Sie in der verlinkten Frage mehr erfahren können.

=SUM(IFERROR(INDEX(ShiftValueT[Value],MATCH(INDEX(Record[UniqueShift],N(IF(1,AGGREGATE(15,6,ROW(A$1:A$350)/((Record[Year]=Stats!B$1)*(Record[Medic]=Stats!$A2)*(Record[ISERROR]=FALSE)),ROW(A$1:A$70))))),ShiftValueT[UniqueShift],0)),0))

Seltsamerweise müssen die Spalten in dieser Formel nicht gesperrt werden. Diese beiden Formeln gaben die gleichen Antworten, die in der nachstehenden Tabelle aufgeführt sind:

enter image description here

Keine dieser Formeln entfernt Duplikate. Bitte kommentieren Sie, wenn Sie das brauchen.

Ich hoffe das hilft und viel Glück.

Bandersnatch
quelle
Hallo, danke, dass du dir die Zeit genommen hast zu antworten. Wie in Punkt 3 meiner Frage ausgeführt, muss eine Lösung Duplikate entfernen. Ich liebe die de-referenzierte INDEX () -Formel, nur im Allgemeinen.
Vinciture
Ich habe eine Art Hassliebe damit. Ich werde morgen versuchen, Duplikate zu entfernen.
Bandersnatch