我有一个保存在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公式执行此操作?在这方面的帮助将不胜感激。
如果您能负担得起备用的空白工作表,请参考以下示例。让它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)替代方法是使用Gnumeric。它可以读取/写入excel
文件,并且其concatenate
功能可以正确处理范围,因此该OP有一个单单元格公式解决方案。
也有可能创建一个custom excel Add-on
,但是在这种情况下,这似乎太过分了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句