我正在使用这个公式:
=LEFT(A1,(FIND(" ",A1,1)-1))
在第一个空格之前提取单元格的字符。但是有些单元格没有任何空格。另外,只提取单元格中的所有字符。比如我有
apple
banana (yellow)
zucchini (green)
我希望公式返回:
apple
banana
zucchini
但我得到一个VALUE错误,因为'apple'单元格中没有空格:
#VALUE!
banana
zucchini
使用IFERROR
并删除可选的起始位置参数(因为1是默认值):
=IFERROR(LEFT(A1,FIND(" ",A1)-1),A1)
这应该适合你
= IF(ISERROR(左(A1,(FIND(“”,A1,1)-1))),A1,左(A1,(FIND(“”,A1,1)-1)))
我倾向于添加一个虚拟空间:
=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])
*量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
片: