Wie rekursive Berechnungen in Excel durchführen?

20978
Walter Cecil Worsley IV

Ich habe ein umfangreiches Tabellenkalkulationsdokument und möchte ein Master-Arbeitsblatt, das Felder aus allen Arbeitsblättern berechnet. Ich weiß, dass ich einfach eine Zelle aus einem Arbeitsblatt auswählen kann, indem ich das Arbeitsblatt und dann die Zeile, an der ich interessiert bin, explizit benennt. Es gibt jedoch eine Möglichkeit, eine Zelle rekursiv auszuwählen, sodass sie automatisch hinzugefügt wird, wenn ich weitere Arbeitsblätter hinzufüge im berechneten Feld des Master-Arbeitsblatts enthalten?

4
Bist du okay mit VBA? Excellll vor 11 Jahren 0
Kannst du noch etwas genauer angeben, was du brauchst? Was meinen Sie mit "Berechnet Felder aus allen Arbeitsblättern"? Möchten Sie Zellen in allen Arbeitsblättern zusammenfassen? Welche Berechnung meinst du? Peter Albert vor 11 Jahren 0
Sie meinen wahrscheinlich Schleife und nicht Rekursion. Ganz andere Ansätze. Lee Taylor vor 11 Jahren 2

1 Antwort auf die Frage

2
Excellll

Eine Möglichkeit wäre die Verwendung einer VBA-Funktion, die Sie in einer Formel aufrufen können. Die folgende Funktion gibt den Inhalt einer Zellenadresse (dies funktioniert nicht für Bereiche in ihrer aktuellen Form) über alle Arbeitsblätter außer der aktiven Tabelle zurück.

Public Function AcrossSheets(rngAddress As String, Optional includeThisSheet As Boolean = False, Optional wText As String) As Variant Application.Volatile Dim tmpResults As String, ws As Worksheet If includeThisSheet Then For Each ws In Worksheets If wText <> "" Then If InStr(ws.Name, wText) <> 0 Then tmpResults = tmpResults & ws.Range(rngAddress).Value & ", " End If Else tmpResults = tmpResults & ws.Range(rngAddress).Value & ", " End If Next ws Else For Each ws In Worksheets If ws.Name <> ActiveSheet.Name Then If wText <> "" Then If InStr(ws.Name, wText) <> 0 Then tmpResults = tmpResults & ws.Range(rngAddress).Value & ", " End If Else tmpResults = tmpResults & ws.Range(rngAddress).Value & ", " End If End If Next ws End If tmpResults = Left(tmpResults, Len(tmpResults) - 2) AcrossSheets = Split(tmpResults, ", ") End Function 

Um diesen Code zu verwenden, drücken Sie in Excel Alt+ F11, fügen ein neues Modul ein und fügen den Code ein.

Wenn Sie beispielsweise die Werte B2von jedem Blatt außer dem aktiven Blatt summieren möchten, verwenden Sie die folgende Matrixformel (die Sie durch Drücken von Ctrl+ Shift+ eingeben Enter):

=SUM(VALUE(AcrossSheets("B2"))) 

Um den Wert von B2in das aktive Blatt aufzunehmen, verwenden Sie die Matrixformel:

=SUM(VALUE(AcrossSheets("B2",TRUE))) 

B2Verwenden Sie die Matrixformel, um nur die Werte von auf Blättern zu summieren, die "Monatlich" im Blattnamen enthalten (nicht das aktive Blatt).

=SUM(VALUE(AcrossSheets("B2",FALSE,"Monthly"))) 

Beachten Sie zwei Dinge:

  1. AcrossSheetsgibt ein Array von Werten zurück. Aus diesem Grund sollte es nur in Arrayformeln verwendet werden.
  2. Das von zurückgegebene Array AcrossSheetsenthält Werte als Zeichenfolgen (Text). Wenn Sie erwarten, dass numerische Daten von der Funktion zurückgegeben werden (wie in den obigen Beispielen), müssen Sie den Funktionsaufruf einschließen VALUE(). Dadurch werden die Zeichenfolgendaten in numerische Daten umgewandelt.