2017-05-04 6 views
1

Ich habe derzeit ein Blatt, wo Daten in bestimmten Spalten eingegeben werden. In einem Übersichtsblatt verwende ich dann eine Array-Formel mit einem Index, um eine Liste aller Daten auf dem Originalblatt zu erzeugen, die einem bestimmten Feld entsprechen.Excel-Array-Formel mit Index und ist variabel

Jede Spalte im Übersichtsblatt hat eine Array-Formel, die mit der entsprechenden Spalte im Datenblatt verknüpft ist. A-> A, B-> B, C-> C etc ...

Die Array-Formel lautet wie folgt:

{=IFERROR(INDEX('data'!C$2:C$1168,SMALL(IF('data'!$S$2:$S$1168>='OUTPUT'!$A$2,ROW('data'!C$2:C$1168)-ROW('data'!C$2)+1),ROWS('data'!C$2:'data'!C2))),"")} 

Diese Formel funktioniert perfekt und erzeugt eine Live-Update-Liste aller Zeilen, in denen Der Wert der Zellenspalte "S" im Blatt "data" ist "OUTPUT".

Blatt „Daten“:

|Sample A|Result A|OUTPUT| 
|Sample B|Result B|0  | 
|Sample C|Result C|OUTPUT| 

Ergebnis auf dem „Zusammenfassung“ Blatt:

|Sample A|Result A| 
|Sample C|Result C| 

Im Blatt „Daten“ jedoch gibt es nun auch eine Spalte für Menge, und ich Ich möchte versuchen, das im "Summary" -Blatt widerzuspiegeln. Wie folgt:

Blatt „Daten“:

|Sample A|Result A|OUTPUT| 2 | 
|Sample B|Result B|0  | 5 | 
|Sample C|Result C|OUTPUT| 3 | 

Ergebnis auf dem „Zusammenfassung“ Blatt:

|Sample A|Result A| 
|Sample A|Result A| 
|Sample C|Result C| 
|Sample C|Result C| 
|Sample C|Result C| 

Ratschläge oder Empfehlungen, wie mit einer Reihe dieser „Schleife“ verursachen würde sehr geschätzt werden. Ich würde normalerweise ein Makro schreiben, um die Daten mit einer Funktion zu behandeln, die die Ausgabe bei Bedarf wiederholt, aber mein Ziel ist es, zu vermeiden, dass jedes Mal, wenn neue Daten hinzugefügt werden, ein Makro ausgeführt werden muss.

Danke und Grüße

+0

Ich glaube nicht, dass Sie Makros in diesem Fall vermeiden können, weil die Liste in der Zusammenfassung Das Blatt muss sich dynamisch an die Länge anpassen, basierend auf der Ausgabe auf jedem Blatt. Außerdem muss die "Zusammenfassung" für das nächste Blatt beginnen, wo die Zusammenfassung für das vorherige Blatt endet.Der Anfang für die Zusammenfassung des nächsten Blattes ist also genauso dynamisch wie die Länge und sein Ende (usw. für jedes folgende Blatt). Ich kann also keine Möglichkeit sehen, dies mit einer Formel zu erreichen. – Ralph

Antwort

0

Excel-Formeln sind nett, aber ich neige UDF in Verbindung mit benannten Bereichen in dieser Situation zu verwenden.

Verwenden Sie eine UDF, um ein Array aller gewünschten Out-Strings ONCE zurückzugeben und in einen benannten Bereich zu schreiben. Rufen Sie dann INDEX in Ihrem benannten Bereich auf.

UDF:

Public Function getResultArray(_ 
     sampleRange As Range, _ 
     isOutputRange As Range, _ 
     QuantityRange As Range, _ 
     str as string) As String() 

    'error handling for inputs here 
    Dim totalQuantity As Long 
    totalQuantity = Application.WorksheetFunction.SumIf(isOutputRange, str, QuantityRange) 

    Dim retArr() As String 
    ReDim retArr(1 To totalQuantity) 

    Dim ioArr As Variant, qArr As Variant, sampleArr As Variant 
    ioArr = isOutputRange.Value 
    qArr = QuantityRange.Value 
    sampleArr = sampleRange.Value 

    Dim i As Long, j As Long, counter as Long 
    For i = LBound(ioArr) To UBound(ioArr) 
     If ioArr(i, 1) = str Then 
       For j = 1 To qArr(i, 1) 
        counter = counter + 1 
        retArr(counter) = sampleArr(i, 1) 
       Next j 
     End If 
    Next i 

    getResultArray = retArr 
End Function 

benannten Bereich:

ResultArray = getResultArray(data!$A$2:$A$4, data!$C$2:$C$4, data!$D$2:$D$4, OUTPUT!$A$2)

Wo Sie die 'Zusammenfassung' wollen:

=INDEX(ResultArray, ROWS('data'!C$2:'data'!C2))

Dies reduziert die Arbeitsmappenberechnung, da die Arrays nur einmal berechnet werden und nicht für jede Arbeitsblattformel (Matrixformeln sind teuer)

Verwandte Themen