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