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:
- Identifiziert Zeilen, die mehreren Kriterien entsprechen (Year, Medic, ISERROR = FALSE ())
- Verwendet diese Zeilen, um die entsprechenden UniqueShift-Werte zu identifizieren
- Erstellt ein Array aus eindeutigen Werten der UniqueShift-Spalte which korrespondieren (dh Duplikate entfernen).
- Verwendet diese eindeutigen Werte (INDEX MATCH) in der ShiftValueT-Tabelle, um die entsprechenden Stunden pro UniqueShift-Typ zu ermitteln
- 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.
quelle
Antworten:
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
=VLOOKUP([@UniqueShift],ShiftValueT,2,FALSE)
=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)
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
=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", "")
=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))}
quelle
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:
Keine dieser Formeln entfernt Duplikate. Bitte kommentieren Sie, wenn Sie das brauchen.
Ich hoffe das hilft und viel Glück.
quelle