【问题标题】:Index match for text in a box框中文本的索引匹配
【发布时间】:2018-09-08 19:47:50
【问题描述】:

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

单元格的屏幕截图:

文字版

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(LEFT(A1,6) ="100001",LEFT(B1,10),"")))

基本上,您可以使用 len 和 len+substitute 来计算分隔符的数量。然后,您利用替代的 instance_num 来查找 B 列中的项目。此外,您必须考虑第一个项目,只有项目,而不是那里。

我已经实现了代码,所以我并不反对代码解决方案,而且我真的厌倦了徒手编写这个公式。

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    在代码中,拆分单元格的内容非常简单,然后使用 Excel 中的内置索引和匹配函数: 我将它弹出到我的个人.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^PRACTITIONER 主文件^SOURC|SOURC^DEST^L|UPD|20180312074145||NE

    C6:

    =CellIndex(CellIndex(A6,2,"|"),2,"^")

    结果:从业者主文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 2018-12-08
      • 2017-11-03
      相关资源
      最近更新 更多