我有一个大型数据集,其中包含从中派生数据所需的几个字段。但是,数据是具有大量不规则性的相关阵列。我经常需要拆分数据,在一个单元格中找到该项目,然后从阵列中相同位置的另一个单元格中获取相关项目。
单元格的屏幕截图:
文字版
A1:
100001
B1:
0123456789
A2:
100100
100001
100600
B2:
54321
0123456790
321321321321321
A3:
100100
100600
100001
B3:
54321
987987987987987
0123456791
A4:
100600
100100
100001
B4:
654654654654654
54321
0123456792
A5:
100001
100600
100100
B5:
0123456793
456456456456456
54321
正确的解决方案将在列B中找到与列A中列出“100001”的项目相同的行中的项目
相信[excelisfun]和他的excel魔术技巧,这个解决方案无需代码。
我可以堆叠一些完全有用的公式:
= IFERROR(MID(B1,FIND(“〜”,SUBSTITUTE(B1,CHAR(10),“〜”,FIND(“100001”,A1)-FIND(“100001”,SUBSTITUTE(A1,CHAR( 10), “”))))+ 1,10),IF(A1 = “100001”, B1,IF(左(A1,6)=“100001”,左(B1,10),“”)))
基本上,你使用len和len + substitute来计算分隔符的数量。然后你利用substitute的instance_num来找到B列中的项目。另外,你必须考虑第一项,只有项目,而不是那里。
我已经实现了代码,所以我不反对代码解决方案,而且我真的厌倦了freehanding这个公式。
答案 0 :(得分:0)
在代码中,分割单元格内容然后使用内置索引并匹配Excel中的函数非常简单: 我把它放到我的personal.xlsx文件中
Public Function CellMatch(find_text, within_text, delimiter)
arrLookup = Split(within_text, delimiter)
CellMatch = Application.Match(find_text, arrLookup, 0)
End Function
Public Function CellIndex(cell_array, number, delimiter)
arrLookup = Split(cell_array, delimiter)
CellIndex = arrLookup(number - 1)
End Function
然后我像标准索引匹配组合一样使用它
= CellIndex(B1,CellMatch( “100001”,A1,CHAR(10)),CHAR(10))
副作用,如果你叠加它,你也可以轻松地解析HL7。
A6:MFI | PRA ^执行者主人文件^ SOURC | SOURC ^ DEST ^ L | UPD | 20180312074145 || NE
C6:
= CellIndex(CellIndex(A6,2, “|”); 2, “^”)
结果:PRACTITIONER MASTER FILE