【问题标题】:Return array from INDEX function in Excel?从 Excel 中的 INDEX 函数返回数组?
【发布时间】:2018-06-19 13:49:09
【问题描述】:

我正在尝试在 Excel 中以数组格式使用 INDEX,但遇到了问题。

从这个问题:Return array from INDEX function?,似乎“INDEX(如 VLOOKUP)不返回值数组(某些复杂情况除外)”

所以我想知道有什么替代方案。

我正在尝试这样做:

=qlTimeSeries( ,
               INDEX({39618,39619,39638,39639},{2,3,4}),
               INDEX({18,19,38,39},{2,3,4})
               )

并且 Index 没有返回一个数组。

任何其他想法如何获得我试图通过 INDEX({39618,39619,39638,39639},{2,3,4}) 获得的结果? 即从 {39618,39619,39638,39639} 得到 {39619,39638,39639} 回来?

注意:实际上,我的电子表格使用的是动态日期数组,而不是 INDEX({39618,39619,39638,39639},{2,3,4}),目标是删除数组的第一个元素 { 39618,39619,39638,39639} 这就是我使用 INDEX 的原因。

编辑:寻找避免使用 VBA 的解决方案

【问题讨论】:

  • 如果日期在工作表中,您可以使用 INDEX 作为ref 开始和结束。比如:=INDEX(A:A,3):INDEX(A:A,7) 将是范围 (A3:A7)。但是,如果值是在数组内部生成的,那么更改公式或使用 VBA 会更容易,因为您需要整个数组在公式中多次获取 {39618,39619,39638,39639}
  • 日期不在工作表中,它们来自公式。我试图避免使用 VBA,只想使用公式来做到这一点。完整的公式是 INDEX(qlTimeSeriesDates(A1),ROW(INDIRECT("2:"&qlTimeSeriesSize(A1)))) 其中 A1 是一个句柄, ROW(INDIRECT("2:"&qlTimeSeriesSize(A1))) 只是 {2 ;3;4;...;N}
  • 然后要么使用辅助单元格,要么使用完全不同的方法,或者使用 vba...
  • 只有当订单总是像你的例子({smallest number, < x1 <, < x2 <, biggest number})时,你才能使用类似:SMALL({39618,39619,39638,39639},{2,3,4})...
  • 谢谢。我使用的第一个索引函数将始终是有序的(即 INDEX({39618,39619,39638,39639},{2,3,4})),但第二个(INDEX({18,19,38,39}, {2,3,4})) 不一定。不过,要提取的元素 {2,3,4} 将始终相同。

标签: excel excel-formula quantlib


【解决方案1】:

试试这个数组公式:

= INDEX({39618,39619,39638,39639},N(IF({1},{2,3,4})))

这将返回您想要的:{39619,39638,39639}

注意,这是一个数组公式,因此您必须在输入此公式后按键盘上的 Ctrl+Shift+Enter,而不仅仅是按 Enter

(另请注意,这适用于动态范围,而不仅仅是硬编码数组。)

【讨论】:

  • @jsamler 请在此答案旁边打勾,将其标记为正确。
  • 聪明,我什至不知道N() 公式...谢谢分享!
  • 那里需要使用If({1},{2,3,4}),还是写成N({2,3,4})?似乎删除 if 语句允许相同的行为。
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2021-09-15
  • 2015-02-09
  • 2015-10-12
相关资源
最近更新 更多