匹配格值的前半部分
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)函数 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://c.scudata.com/article/1722041635501