在 Excel 中获取数字字符右侧的字符

在 Excel 中获取数字字符右侧的字符

我想知道在 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评估SHIFTENTER


方法 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评估SHIFTENTER


方法 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)

解释

  • seqRow(Indirect...返回一个整数数组1..n
  • 第二个函数MID(...返回字符串中每个字符的数组
  • 1/isnumber(-MID(...然后返回一个错误或 1 的数组
  • 在这种LOOKUP情况下,将返回字符串中最后一个数值的位置。它与数组中小于 lookup_value 的最后一个值匹配。这为我们提供了终止字母字符的起始编号。

答案3

这个小的怎么样UDF()

Public Function JunkOnTheRight(sIN As String) As String
    Dim i As Long

    For i = Len(sIN) To 1 Step -1
        If IsNumeric(Mid(sIN, i, 1)) Then
            JunkOnTheRight = Mid(sIN, i + 1)
        Exit Function
        End If
    Next i
End Function

在此处输入图片描述

相关内容