基本上问题归结为-我如何在Excel电子表格公式中使用数组中的命名引用/范围?范例:
={"this","is","my","house"}
字符串在一行中生成4个包含正确文本的单元格但是这个
={"this","is","my", House}
型其中House是包含一些文本的单元格的命名范围失败。
wbgh16ku1#
由于数组符号{},您的尝试失败。一个数组,像这样的类型被限制为数字值和/或文本字符串,例如{"a",1,"b"}。不能在数组表示法中使用范围,也不能使用命名范围.为了避免使用数组表示法,并且仍然使数组包含命名范围,您可以使用VSTACK或HSTACK,它们都可以创建数组或追加数组。在这种情况下,您的数组{"this","is","my"}可以在HSTACK中使用,并且可以追加命名范围House:=HSTACK({"this","is","my"},House)个这将给予所需的结果,但由于HSTACK通过附加大量值/范围/数组来创建数组,因此我们不再需要{}:正确的符号:=HSTACK("this","is","my", House)个才是正确的符号。如果你不能访问HSTACK,但可以访问LET,你可以使用这个稍微复杂一点的解决方案:
{}
{"a",1,"b"}
{"this","is","my"}
House
=HSTACK({"this","is","my"},House)
=HSTACK("this","is","my", House)
=LET(a,{"this","is","my"}, b,House, count_a,COUNTA(a), seq,SEQUENCE(1,count_a+1), CHOOSE(IF(seq<=count_a,1,2),a,b))
字符串首先声明a(文本数组)和b(命名范围)。然后声明count_a,它计算数组a(3)中的字符串数量。然后声明seq以创建从1到a(count_a)中的字符串计数的(水平)序列,并添加1(导致{1,2,3,4}。然后计算序列seq是否小于或等于a中的字符串计数,结果是序列的前3个值为TRUE,第四个值为false:{TRUE,TRUE,TRUE,FALSE} .将其与IF结合使用(如果为TRUE,则为1,否则为2)会产生{1,1,1,2}数组。使用它作为CHOOSE参数会导致前3次从a中选择值,第4次(第一次)从指定范围b中选择值。不使用LET和SEQUENCE将导致一个非常难以管理的公式,这将需要更多的工作来固定公式中的值,然后只是将它们键入,可能,但这将在旧版本的Excel中创建数组:
a
b
count_a
seq
{1,2,3,4}
{TRUE,TRUE,TRUE,FALSE}
1
2
{1,1,1,2}
=CHOOSE( IF( COLUMN($A$1: INDEX($1:$1048576,,COUNTA({"this","is","my"})+1)) <=COUNTA({"this","is","my"}), 1, 2), {"this","is","my"}, House)
型需要使用ctrl+shift+enter输入,并且仅显示为一个值,因为旧版Excel不会将数组溢出到范围中,但可以在公式中引用数组或将其作为命名范围引用。这里COLUMN($A$1:INDEX($1:$1048576,,COUNTA({1,2,3})))模拟序列函数。
ctrl+shift+enter
COLUMN($A$1:INDEX($1:$1048576,,COUNTA({1,2,3})))
azpvetkf2#
如果您有Excel O365的访问权限:使用HSTACK,它将简单地是=HSTACK("this","is","my",house)。House可以是单个值或数组。如果“House”是一个命名范围{“A”,“B”,“C”},则上面的HSTACK函数返回一个6元素数组{"this","is","my","A","B,"C"}
=HSTACK("this","is","my",house)
{"this","is","my","A","B,"C"}
2条答案
按热度按时间wbgh16ku1#
由于数组符号
{}
,您的尝试失败。一个数组,像这样的类型被限制为数字值和/或文本字符串,例如{"a",1,"b"}
。不能在数组表示法中使用范围,也不能使用命名范围.为了避免使用数组表示法,并且仍然使数组包含命名范围,您可以使用VSTACK或HSTACK,它们都可以创建数组或追加数组。
在这种情况下,您的数组
{"this","is","my"}
可以在HSTACK中使用,并且可以追加命名范围House
:=HSTACK({"this","is","my"},House)
个这将给予所需的结果,但由于HSTACK通过附加大量值/范围/数组来创建数组,因此我们不再需要
{}
:正确的符号:
=HSTACK("this","is","my", House)
个才是正确的符号。
如果你不能访问HSTACK,但可以访问LET,你可以使用这个稍微复杂一点的解决方案:
字符串
首先声明
a
(文本数组)和b
(命名范围)。然后声明count_a
,它计算数组a
(3)中的字符串数量。然后声明seq
以创建从1到a
(count_a
)中的字符串计数的(水平)序列,并添加1(导致{1,2,3,4}
。然后计算序列
seq
是否小于或等于a
中的字符串计数,结果是序列的前3个值为TRUE,第四个值为false:{TRUE,TRUE,TRUE,FALSE}
.将其与IF结合使用(如果为TRUE,则为1
,否则为2
)会产生{1,1,1,2}
数组。使用它作为CHOOSE参数会导致前3次从a
中选择值,第4次(第一次)从指定范围b
中选择值。不使用LET和SEQUENCE将导致一个非常难以管理的公式,这将需要更多的工作来固定公式中的值,然后只是将它们键入,可能,但这将在旧版本的Excel中创建数组:
型
需要使用
ctrl+shift+enter
输入,并且仅显示为一个值,因为旧版Excel不会将数组溢出到范围中,但可以在公式中引用数组或将其作为命名范围引用。这里
COLUMN($A$1:INDEX($1:$1048576,,COUNTA({1,2,3})))
模拟序列函数。azpvetkf2#
如果您有Excel O365的访问权限:
使用HSTACK,它将简单地是
=HSTACK("this","is","my",house)
。House可以是单个值或数组。如果“House”是一个命名范围{“A”,“B”,“C”},则上面的HSTACK函数返回一个6元素数组
{"this","is","my","A","B,"C"}