[英]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.