簡體   English   中英

Excel數組公式使用INDEX並且是變量相關的

[英]Excel Array formula using INDEX and is variable dependant

我目前有一張表格,其中數據被輸入特定列。 然后在摘要表中,我使用帶索引的數組公式來生成與特定字段匹配的原始工作表上的所有數據的列表。

摘要表上的每列都有一個數組公式,鏈接回數據表上的等效列。 A-> A,B-> B,C-> 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”的值在“數據”表中為“OUTPUT”。

表“數據”:

|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|

關於如何使用數組引起這種“循環”的任何建議或建議將非常感激。 我通常會編寫一個宏來處理數據,該函數可以在需要時循環輸出,但我的目標是避免每次添加新數據時都必須運行宏。

謝謝你,問候

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))

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM