我想知道在 Excel 中是否有一种方法可以直接从数字中获取每个单元格的字符。例如下面的示例
PW22CL -> CL
PW22CLB -> CLB
PW22EBS ->EBS
PW22EK -> EK
PW22FL ->FL
PW22HF -> HF
W21M -> M
W21OB ->OB
有什么方法可以将正则表达式放入 Excel 中的常规 LEFT、RIGHT、MID、FIND 函数中?
答案1
如果您不想使用 VBA:
方法 1:用这个数组公式:
=RIGHT(A1,LEN(A1)-MAX(IF(ISNUMBER(VALUE(MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1))),ROW(INDIRECT("1:" & LEN(A1))))))
请记住按++来CTRL评估SHIFT它ENTER。
方法 2:或者使用这个数组公式:
=RIGHT(A1,LEN(A1)-MAX(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),0)))
请记住按++来CTRL评估SHIFT它ENTER。
方法 3:或这个常规配方如果你正在使用Excel 2010 或更高版本(因为它使用AGGREGATE 函数):
=RIGHT(A1,LEN(A1)-AGGREGATE(14,6,FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),1))
假设:单元格A1
包含您需要获取最后 2 个字符的值。
答案2
您可以使用这个通常输入的公式,它适用于大多数版本的 Excel。
=MID(A2,LOOKUP(2,1/ISNUMBER(-MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),ROW(INDIRECT("1:"&LEN(A2))))+1,99)For a non-volatile form, useful if you have a large worksheet,
或者,为了避免使用易失性函数,您可以定义一个名称,seq
其中:
seq Refers To: =ROW(INDEX($1:$65536,1,1):INDEX($1:$65536,255,1))
然后使用这个公式:
=MID(A1,LOOKUP(2,1/ISNUMBER(-MID(A1,seq,1)),seq)+1,99)
解释
seq
或Row(Indirect...
返回一个整数数组1..n
- 第二个函数
MID(...
返回字符串中每个字符的数组 1/isnumber(-MID(...
然后返回一个错误或 1 的数组- 在这种
LOOKUP
情况下,将返回字符串中最后一个数值的位置。它与数组中小于 lookup_value 的最后一个值匹配。这为我们提供了终止字母字符的起始编号。