我有一个保存在 MS Excel 表中的疾病数据集,数据格式如下:
| Object Name | Symptom 1 | Symptom 2 | Symptom 3 |...| Symptom N | Disease | | ABC | 1 | 0 | 0 |...| n | XYZ | | ABC | 0 | 1 | 0 |...| n | XYZ | | ABC | 1 | 0 | 1 |...| n | YZX | | ABC | 1 | 1 | 0 |...| n | XYZ |
其中第一列是输入变量,即某个对象的名称,最后一列是疾病名称。中间的列是该对象特定疾病的症状列。
现在,对于工作表中的每一行,我想获取值为 1 的所有症状属性,即存在此症状,使用疾病列作为决策变量。逻辑如下。
for each row in the sheet
--> IF (Disease = XYZ)
--> Get all the Symptoms variables where value is 1
第一行的期望结果如下;
第 1 行 --> XYZ (症状 1)
第 2 行 --> XYZ (症状 2)
第 3 行 --> XYZ (症状 1,症状 3)
第 4 行 --> XYZ (症状 1,症状 2)
我该如何在 MS Excel 中使用 IF 公式执行此操作?如能得到这方面的帮助,我将不胜感激。
答案1
如果您有多余的空白工作表,这里有一个示例。设Sheet1
为主工作表,Sheet2
为空工作表;症状的标题在 中Sheet1!$C$4:$F$4
,标志在 中Sheet1!C5:F8
。
类型
=B5&IF(Sheet1!C5,","&Sheet1!C$4,"")
进入单元格C5
,Sheet2
然后复制此单元格以填充块Sheet2!C5:F8
。最后一列(Sheet2!F5:F8
)将包含每行的症状列表(前面有一个额外的逗号)。
然后只需添加公式
=G5&"("&REPLACE(Sheet2!F5,1,1,"")&")"
到单元格Sheet1!H5
中Sheet1
并将其复制到该列下方。
如果你的数据库太大,并且这种浪费不是一个选择,那么考虑使用VBA 函数 并作适当的修改。
编辑:
一些建议:
如果它可以处理~2000条记录但无法处理整个大小,那么至少您可以将其分成块。
VBA 解决方案也是一个可能的替代方案。
另一个(OT)替代方案是使用数值它可以读取/写入excel
文件,并且其concatenate
函数可以正确处理范围,因此 OP 有一个单元格公式解决方案。
也可以创建自定义excel Add-on
,但在这种情况下这似乎有点小题大做。
答案2
我认为您可以使用 IF(AND 函数。我写了以下内容:=IF(AND(H32=1,I32=1,J32=1),K32,"无疾病")
H32、I32、J32 中都有 1 或 0。K32 是“疾病”。
你也可以做这样的事情:
=如果(H32 + I32 + J32 = 3,K32,K33)
k33为无病,其余细胞与上同。
这有帮助吗?