Excel 相当于 Python 的 MAP

Excel's equivalent of Python's MAP

我正在尝试找到一种方法自动将公式应用于数组中的所有单元格(无需为第一个单元格编写公式然后将其向下拖动/使用键盘快捷键将其复制到下面细胞)。 这与 python 的“map”函数非常相似,它在概念上与 python 中的“reduce”和“filter”函数相关联。

由于excel中有一个FILTER函数,它的作用和python的FILTER一样,我想知道是否有一个函数和python的作用一样“地图”。

实际上,我可以写“=FILTER(name;condition on the name)”,但我找不到任何实用的方法来写“=MAP(name;function on the name)”,其中名称在名称管理器中定义并关联到一定范围(例如:姓名= A1:A10


这是一个小的示例

我有这个 table:

table01

A B
1 Office Notes
2 Rome
3 Milan
4 Milan
5 Turin
6 Rome note

有一个名为“offices”的名称与范围 A2:A6 相关联,还有一个名为“notes”的名称与范围 B2:B6 相关联。

我也有这个路由table(为简单起见,在同一个sheet)

table02

C D E F
7 Person Giovanni Marco Carlo
8 Office Rome Milan Turin

我想获取一个新数组,其中包含与“offices”数组相关的联系人,唯一的例外是如果 office 是 ROME 并且没有注释,那么联系人将是米兰办公室的联系人(Marco ):

table03

G
1 Contact
2 Marco
3 Marco
4 Marco
5 Carlo
6 Giovanni

我已经准备好必须应用于单个单元格(G2)的功能:

funct01(colnum=2)=IF(AND(A2="Rome";ISBLANK(B2));OFFSET($E;-1;0);OFFSET($B;0;MATCH(A2;$D:$F)))

如果我将其向下拖动 4 个单元格(或使用键盘快捷键来做同样的事情),我将获得正确的输出,因此您可以将其视为“黑盒函数”。

问题是,当办公室数组 (table01) 更新时,插入一个包含新办公室的新行,输出数组 (table03) 不会自动更改其大小:我必须从 G2 重新启动并再次向下拖动 5 个单元格而不是 4 个。我希望这是自动的。

因为我可以在 G2 上输入类似的内容:

funct02 "=FILTER(offices;NOT(offices="Rome"))" 并且自动 returns:

table04

G
1 Contact
2 Milan
3 Milan
4 Turin

我期待一些有用的东西 比如:

funct03

"=MAP(offices;**funct01(offices)**)"

到return正好table03。 请注意,即使在一般情况下,funct01 是“offices”和“notes”的函数,在这种特殊情况下,“notes”可以直接由 offices 派生(只需使用OFFSET(offices;0;1)) 所以它实际上只是“办公室”的一个功能。


感谢您的时间和关注,如果我的问题已经在别处得到解答或者解决方案显而易见,我深表歉意。我试图在互联网上查找并找到了一些解决方法,但我从未找到我正在寻找的确切内容。

在 G2 中输入:

=IF((Offices="rome")*(Notes=""),$E,INDEX($D:$F,MATCH(Offices,$D:$F,0)))

是应该洒下火柴。