我需要一些帮助来计算 TRUE/FALSE 部分,我已经手动填写了它以显示我想要实现的结果。
本质上,我需要一个IF()
语句,如果 Sheet 1 上的标题和 ItemName 匹配,则 Sheet 2 上的语句为 TRUE。
第 1 页 - 数据
学校 | 项目名 |
---|---|
blabla sch1 | 网址: |
blabla sch1 | com.456.def |
blabla sch2 | com.xxx.abc |
blabla sch2 | com.456.def |
第 2 页 - CALC
项目名 | sch1 | sch2 | sch3 |
---|---|---|---|
网址: | 真的 | 错误的 | 错误的 |
com.xxx.abc | 错误的 | 真的 | 错误的 |
com.456.def | 真的 | 真的 | 错误的 |
网址: | 真的 | 错误的 | 错误的 |
答案1
解决此问题的一种更通用的方法也是在学校模式可能略有不同的情况下适用的方法,即采用IF()
和SUMPRODUCT()
类型方法。假设您的数据存储在工作表A1:B5
的范围内,并且您在工作表的DATA
范围内执行计算,则如下所示:A1:D5
CALCs
首先,您可以使用 ; 返回唯一的 ItemNames =UNIQUE(DATA!$B$1:$B$5)
,因为目前您的输出中有两次“com.123.abc”。如果这是有意为之,您可以跳过此步骤并将 ItemNames 复制到工作表中CALCs
。接下来,输入B1:D1
唯一的学校。
B2
您需要在单元格中输入以下公式,然后将其分别复制到其他单元格:
=IF(SUMPRODUCT(--(ISNUMBER(SEARCH(B$1,DATA!$A$2:$A$5)))*
(ISNUMBER(SEARCH($A2,DATA!$B$2:$B$5)))), TRUE, FALSE)
此函数使用SEARCH()
andISNUMBER()
函数检查 ItemName 和 SchoolName 是否分别在 ItemNames 和 SchoolNames 列表中找到。--
使用双重否定运算符将结果 TRUE/FALSE 转换为 1 和 0,作为函数的输入SUMPRODUCT()
,然后使用该输入将两个部分的结果合并。如果总和大于零,则返回 TRUE,否则返回 FALSE。
您提供的数据的输出如下所示:
项目名 | sch1 | sch2 | sch3 |
---|---|---|---|
网址: | 真的 | 错误的 | 错误的 |
com.456.def | 真的 | 真的 | 错误的 |
com.xxx.abc | 错误的 | 真的 | 错误的 |
现在,我们来看看这种方法的好处以及它如何更加通用。假设您输入的学校数据不是那么清晰;这种差异可能表现为多种形式,例如,用点代替空格、没有空格、用连字符代替空格以及末尾有附加内容等。
学校 | 项目名 |
---|---|
blabla sch1 | 网址: |
blabla.sch1 | com.456.def |
blablasch2 | com.xxx.abc |
blabla-sch2asdf | com.456.def |
即使在这种情况下,结果也是相同的,并且看起来与之前的表格类似:
项目名 | sch1 | sch2 | sch3 |
---|---|---|---|
网址: | 真的 | 错误的 | 错误的 |
com.456.def | 真的 | 真的 | 错误的 |
com.xxx.abc | 错误的 | 真的 | 错误的 |
答案2
只需将单元格值与一些难以从键盘输入的字符连接起来即可(例如,标签= CHAR(9)
),而不是两个搜索列,您将获得一个。在一列中,MATCH()
如果您通过相同的分隔符连接它们,通常将能够找到所需的值对。哦,是的,如果未找到值对,则将MATCH()
返回#N/A
错误。该ISNUMBER()
函数将搜索结果转换为非常真的和错误的你需要的。
由于 MATCH() 知道什么是“通配符”,因此公式非常简单:
{=ISNUMBER(MATCH("*"&B$1:D$1&CHAR(9)&$A2:$A5;DATA!$A$1:$A$5&CHAR(9)&DATA!$B$1:$B$5;0))}
我和@karl 的考虑是一样的——数据范围是DATA!$A$1:$B$5
,计算是基于B$1:D$1
和中的值A2:$A5