Excel 2016 数组公式
Posted
技术标签:
【中文标题】Excel 2016 数组公式【英文标题】:Excel 2016 Array formula 【发布时间】:2018-05-30 12:45:12 【问题描述】:我在excel中有以下公式(我过去创建的),
=IFERROR(INDEX(Tasks!$H$2:$H$65536;SMALL(IF(A2=Tasks!$A$2:$A$65536;ROW(Tasks!$A$2:$A$65536)-ROW(Tasks!$A$2)+1);ROW($1:$1)));"")
该公式按我的意愿工作,但每个月 a 列都在变化,例如,这里的“A”列可能是下个月的“C”列,因此行数正在变化。我正在尝试修改我不必逐月调整的公式。
为此,我首先在网上找到了一个 VBA 脚本:
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
因此,如果我输入例如:
=Col_Letter(COLUMN(Table8[[#Headers];[ID]]))
它会给我字母“B”,因为这个标题可以在“B”列中找到。
因此,利用这个 VBA 脚本的优势,我试图创建一个公式,每次都会调整原始公式中的列字母。
所以这个公式:
=("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & "2" & ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1) is giving me this as the result Tasks!$H$2:$H$65536.
什么是公式的一部分,所以我认为它很好。
这是我试图以这种方式重新创建的整个公式:
=Index((("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & ROW() & ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1);SMALL(IF((((Col_Letter(COLUMN(Table8[[#Headers];[ID]])) & ROW()) & "=" & (("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & "2"& ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1))));Row((("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & "2"& ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1)))-ROW(("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & "2"))+1);ROWS($1:$1))))
【问题讨论】:
公式有什么问题?你有错误吗?它返回的内容是否与预期不同? 我已经添加了错误信息 【参考方案1】:Excel 表格具有轻松解决此类问题的潜力。由于列可以通过它们的名称来引用,因此您不必担心它们的位置。同样,由于您按列名而不是行号引用数据,因此您的引用将涵盖该表中的所有行,无论添加或删除多少行。
因此,首先,通过选择并使用 Insert / Table 尝试将您的范围转换为表格。在此之后,您应该将公式转换为包含表格引用而不是单元格引用。
【讨论】:
以上是关于Excel 2016 数组公式的主要内容,如果未能解决你的问题,请参考以下文章