匹配格值的前半部分

Excel有多列含空格的源数据,如C3:D19;还有若干用于比较的数据项,由"-"隔为前后两部分,如F3:F7


C

D

E

F

3

NICK



NICK-GL

4

DAVE



JOHN-GL

5

QUANDEL



SAM-GL

6


ERIC


LEE-GL

7


JOHN


LEROY-WC

8





9





10


MARK



11

SAM

SAM



12

BLAIS




13





14





15


LEE



16





17





18





19

LEROY

LEROY



要求用源数据的每列与数据项的前半部分进行比较,将匹配上的数据项填在该列下面。


C

D

E

F

3

NICK



NICK-GL

4

DAVE



JOHN-GL

5

QUANDEL



SAM-GL

6


ERIC


LEE-GL

7


JOHN


LEROY-WC

8





9





10


MARK



11

SAM

SAM



12

BLAIS




13





14





15


LEE



16





17





18





19

LEROY

LEROY



20





21

NICK-GL

JOHN-GL



22

SAM-GL

SAM-GL



23

LEROY-WC

LEE-GL



24


LEROY-WC



使用 SPL XLL

=spl("=d=transpose@n(?1),transpose@n(d.(E@1(?2).select(d.~.pos(substr@l(~,$[-])))))",C3:D19,F3:F7)

Picture2png

函数 transpose@n 用于序列转置,E@1 将多层序列转为单层。substr@l在一个字符串中搜索符号并返回符号之前的子串,注意是字母 l。pos判断序列是否包含某个成员,~ 表示当前成员。

上面用一个公式处理了所有列,也可以用下面公式先在 C21 处理 C 列,再将公式拖动到其他列。

=spl("=E@1(?2).select(E@1(?1).pos(substr@l(~,$[-])))",C3:C19,$F$3:$F$7)

来源:https://stackoverflow.com/questions/78168023/trying-to-get-names-from-a-box-on-the-right-to-automatically-appear-in-another-b