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:
我正在使用这个公式:
=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: