

=LET(f,LAMBDA(x,TOCOL(IF(C3:E6,x))),
HSTACK(f(A3:A6),
f(B3:B6),
f(C2:E2),
f(C3:E6)))
于是,小编的好奇心又开始作祟了!





点击“保存”

回到表格里就能直接写公式了:
=f(B2:B4)
B2=100 就返回100*1.1=110
B3=68 就返回68*1.1=74.8
B4=25 就返回25*1.1=27.5
相当于你自己造了一个 f() 函数。

Alt+F11 打开VBA编辑器
点击“插入”
点击“模块”

此时插入了一个“模块1”,我们需要在“模块1”右侧的代码录入窗口输入vba代码。

Function f(x)
f=x*1.1
End Function

=f(B2)
下拉填充公式后得到所有含税价结果。

=LET(f,LAMBDA(x,x^2+1),f(A2:A4)+f(B2:B4))


=IF(C3:E6,C3:E6)
IF(条件数组, 返回值数组)
如果C3:E6区域的值为真值TRUE时(非0/非空值),会在返回数组对应位置返回C3:E6区域对应的值。返回数组的形状与C3:E6区域(较大区域)形状相同。

=TOCOL(IF(C3:E6,C3:E6))

Tocol函数省略第2参数时,默认的转置方向为行优先顺序,即源数据第1行转置为单列后,继续第2行、第3行、最后是第4行,即一行一行的转换。
这种转换顺序完全符合我们二维表转一维表的理论基础。

=LAMBDA(x, TOCOL(IF(C3:E6, x)))

=LET(f,
LAMBDA(x,TOCOL(IF(C3:E6,x))),
待定义的f参与的运算逻辑)

=IF(C3:E6,A3:A6)

=TOCOL(IF(C3:E6,A3:A6))

=LET(f,LAMBDA(x,TOCOL(IF(C3:E6,x))),f(A3:A6))
f(A3:A6)
即可将A3:A6品区域传递给lambda的变量x,执行If的数组扩展与Tocol的转单列。


=TOCOL(IF(C3:E6,B3:B6))

=LET(f,LAMBDA(x,TOCOL(IF(C3:E6,x))),HSTACK(f(A3:A6),f(B3:B6)))
f(B3:B6)
即可将B3:B6颜色区域传递给lambda的变量x,执行IF的数组扩展与TOCOL的单列转换。
HSTACK(f(A3:A6),f(B3:B6))
即与上一步品的展平数据进行横向的拼接,形成整体。

=LET(f,LAMBDA(x,TOCOL(IF(C3:E6,x))),HSTACK(f(A3:A6),f(B3:B6),f(C2:E2)))
f(C2:E2)
即可将C2:E2日期区域传递给lambda的变量x,执行IF的数组扩展与TOCOL的单列转换。
HSTACK(f(A3:A6),f(B3:B6),f(C2:E2))
即与上一步品与颜色的展平数据进行横向的拼接,形成整体。

=LET(f,LAMBDA(x,TOCOL(IF(C3:E6,x))),HSTACK(f(A3:A6),f(B3:B6),f(C2:E2),f(C3:E6)))
f(C3:E6)
即可将C3:E6销量区域传递给lambda的变量x,执行IF的数组扩展与TOCOL的单列转换。
HSTACK(f(A3:A6),f(B3:B6),f(C2:E2),f(C3:E6))
即与上一步品、颜色和日期的展平数据进行横向的拼接,形成整体。






夜雨聆风