Excel:如果单元格有空格,则在第一个空格之前提取单元格中的字符

Excel: Extract characters in cell before the first whitespace IF the cell has whitespace

我正在使用这个公式:

=LEFT(A1,(FIND(" ",A1,1)-1))

提取第一个空格之前的单元格字符。但是有些单元格没有任何 whitespace.otherwise 只是提取单元格中的所有字符。例如我有

apple
banana (yellow)
zucchini (green)

我想要公式 return:

apple
banana
zucchini

但是我得到了一个 VALUE 错误,因为 'apple' 单元格中没有空格:

#VALUE!
banana
zucchini

这应该适合你

=IF(ISERROR(LEFT(A1,(FIND(" ",A1,1)-1))),A1,LEFT(A1,(FIND(" ",A1,1)-1)) )

使用 IFERROR 并删除可选的起始位置参数(因为 1 是默认值):

=IFERROR(LEFT(A1,FIND(" ",A1)-1),A1)

我倾向于添加一个假人space:

=LEFT(A1,FIND(" ",A1&" ")-1)

(不给空单元格零)

我发现 REPLACE 比 LEFT 提供更多功能。将搜索字符附加到原始字符以避免错误是一种很好的做法。

=REPLACE(A2, FIND(" ", A2&" "), LEN(A2), TEXT(,))

仅供 S&G 使用正则表达式的用户定义函数

Option Explicit
Public Sub TEST()
    Dim tests(), i As Long
    tests = Array("apple", "banana (yellow)", "zucchini (green)")

    For i = LBound(tests) To UBound(tests)
        Debug.Print GetString(tests(i))
    Next
End Sub

Public Function GetString(ByVal inputString As String) As String
  With CreateObject("VBScript.RegExp")
            .Global = True
            .MultiLine = True
            .Pattern = "^\S*"
            If .TEST(inputString) Then
              GetString = .Execute(inputString)(0)
            Else
              GetString = vbNullString
            End If
  End With
End Function

正则表达式:

试一试here

^ 断言行首的位置

\S* 匹配任何非空白字符(等于 [^\r\n\t\f\v ])

* 量词——在零次和无限次之间匹配,尽可能多次,按需回馈(贪心)


Sheet: