Excel: извлекать символы в ячейке перед первым пробелом, если в ячейке есть пробел - PullRequest
0 голосов
/ 31 августа 2018

Я использую эту формулу:

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

для извлечения символов из ячейки перед первым пробелом. но некоторые ячейки не имеют пробелов. в противном случае просто извлеките все символы из ячейки. например у меня есть

apple
banana (yellow)
zucchini (green)

я хочу, чтобы формула возвращалась:

apple
banana
zucchini

но вместо этого я получаю ошибку VALUE, потому что в ячейке 'apple' нет пробелов:

#VALUE!
banana
zucchini

Ответы [ 5 ]

0 голосов
/ 01 сентября 2018

Только для 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

Regex:

Попробуйте здесь

^ устанавливает позицию в начале строки

\ S * соответствует любому непробельному символу (равному [^ \ r \ n \ t \ f \ v])

* Квантификатор - сопоставляет от нуля до неограниченного числа раз столько раз, сколько возможно, возвращая при необходимости (жадный)


Лист:

data

0 голосов
/ 31 августа 2018

Я считаю, что REPLACE предлагает больше универсальности, чем влево. Хорошей практикой является добавление символа поиска к оригиналу во избежание ошибок.

=REPLACE(A2, FIND(" ", A2&" "), LEN(A2), TEXT(,))
0 голосов
/ 31 августа 2018

Использование IFERROR и удаление необязательного аргумента начальной позиции (поскольку 1 является значением по умолчанию):

=IFERROR(LEFT(A1,FIND(" ",A1)-1),A1)
0 голосов
/ 31 августа 2018

Я, как правило, добавляю пустышку:

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

(не дает ноль с пустыми ячейками)

0 голосов
/ 31 августа 2018

Это должно работать для вас

= ЕСЛИ (ISERROR (ЛЕВЫЙ (А1, (НАЙТИ ("", А1,1) -1))), А1, ВЛЕВО (А1, (НАЙТИ ("", А1,1) -1)))

...