我使用数组公式(在Excel 2003中)来计算满足特定条件的字符串数。由于文件大小的限制,我使用一列字符串而不是单元格表来存储我的数据。
公式如下:
{=SUM(IF((VALUE(MID(INDIRECT(CONCATENATE(D1,"test")),6,1))*VALUE(MID(INDIRECT(CONCATENATE(D1,"test")),1,1)))=VLOOKUP(D2,t.lkup,2,FALSE),1,0))}
表达式VALUE(MID(INDIRECT(CONCATENATE(D1,"test")),6,1))
查看命名范围中的单元格以返回值。此值乘以表达式VALUE(MID(INDIRECT(CONCATENATE(D1,"test")),1,1))
返回的另一个值。然后在VLOOKUP(D2,t.lkup,2,FALSE)
给出的一组数字中查找生成的产品,该数字返回类似“{1,2,3,4}”的字符串。如果乘积是set的元素,则将1添加到总和中,否则将0添加到总和中。
当我使用上面的数组公式(使用动态查找集)时,返回值为零。如果我使用以下公式,
{=SUM(IF((VALUE(MID(INDIRECT(CONCATENATE(D1,"test")),6,1))*VALUE(MID(INDIRECT(CONCATENATE(D1,"test")),1,1)))={1,2,3,4},1,0))}
然后返回正确的总和。有谁知道如何让Excel将集查找视为静态集而不是字符串?
答案 0 :(得分:0)
数组公式执行多个clalculations并返回单个结果或数组。公式中的所有数组参数必须大小相同。
在你的第一个例子中,你将某个值的某个值(因为IF中的最外层函数是一个VALUE()函数)与一个返回字符串的VLOOKUP进行比较......这个字母必须出错......这个事实就是你的string包含大括号不会将其转换为数组。
在第二个示例中,您将单个值与包含元素{1,2,3,4}的数组进行比较,因此实际上您进行了四次比较,如果其中一个解析为TRUE,则添加1。
我不知道如何在不使用VBA的情况下将逗号分隔的字符串“{1,2,3,4}”转换为数组{1,2,3,4},但也许您可以更改通过将VALUE(...)* VALUE(...)数转换为字符串并使用FIND()函数将数字标识为条件字符串的子字符串来实现策略。
e.g。说你的MID_CONCATENATE_TIMES_BLA_BLAH结果是7,你的
只要您的结果是1位数,这将有效。如果数字超过1位,则需要在MID_BLA和CONDX_STR中的数字之前加入SPACE;也不是太困难,但为公式增加了更多的复杂性。
如果你想做VBA,你可以使用Split()函数从一个单独的字符串创建一个从零开始的数组
Function StrToArray(Arg As String) As Variant
StrToArray = Split(Arg, ",")
End Function
并通过StrToArray(VLOOKUP(...))在(1)中传播你的VLOOKUP,在这种情况下你必须从条件字符串中删除花括号。
希望有所帮助 - 祝你好运