索引匹配框中的文本

时间:2018-03-29 18:45:26

标签: excel vba excel-vba excel-formula

我有一个大型数据集,其中包含从中派生数据所需的几个字段。但是,数据是具有大量不规则性的相关阵列。我经常需要拆分数据,在一个单元格中找到该项目,然后从阵列中相同位置的另一个单元格中获取相关项目。

单元格的屏幕截图:

Table of reference data

文字版

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这个公式。

1 个答案:

答案 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