2017-05-04 53 views
1

我目前有一個工作表,其中數據正在輸入到特定列中。然後在彙總表中,我使用帶索引的數組公式來生成匹配特定字段的原始圖紙上的所有數據的列表。使用INDEX的Excel數組公式使用INDEX並取決於變量

彙總表上的每一列都有一個數組公式,並鏈接回數據表上的等效列。 A-> A,B-> B,C->ç等...

數組公式如下:

{=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))),"")} 

這個公式完美地工作,併產生所有行的實時更新列表表「數據」中的單元列「S」的值是「輸出」。

表「數據」:

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

在「摘要」片結果:

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

在片材的「數據」,然而,現在還用於數量的列,並且我希望嘗試將其反映在「摘要」表中。如下:

表「數據」:

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

在「摘要」片結果:

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

任何建議或關於如何導致此「環」的建議以與陣列將非常感謝。我通常會編寫一個宏來處理數據,並在需要時使用循環輸出的函數,但是我的目標是避免每次添加新數據時都必須運行宏。

謝謝你,至於

+0

我不認爲在這種情況下可以避免使用宏,因爲彙總列表工作表必須根據每張工作表上的輸出動態調整長度。此外,下一張表格的「摘要」必須在先前表格的摘要結束時開始。因此,下一張表的摘要的開始將與長度一樣動態,並且其結束(對於每張下一張都是如此)。所以,我看不到任何可能的方法來使這一點與公式有關。 – Ralph

回答

0

Excel公式都不錯,但我傾向於使用結合的UDF,在這種情況下,指定範圍。

使用UDF返回一個所有需要輸出字符串ONCE的數組,並放入命名範圍。然後在您命名的範圍上調用INDEX。

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 

命名範圍:

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

如果你想要的 '總結':

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

這減少了工作簿計算,因爲數組只是計算一次,而不是每個工作表公式(數組公式很昂貴)