Имитировать функцию разделения строк в формуле Excel
Я пытаюсь разбить строку в формуле excel, что-то вроде того, что я могу делать на многих языках программирования, например.
string words = "some text".split(' ');
Проблема в том, что я не могу быть уверен, что в ячейке содержится более одного слова. Если я попытаюсь использовать функции FIND()
или SEARCH()
, они возвращают #VALUE
, если не существует пробела. Есть ли простой способ разделить строку так, чтобы она возвращала отдельные слова (или даже лучше, чтобы она возвращала либо первое слово, либо все другие слова)?
Ответы
Ответ 1
Формула для возврата либо первого слова, либо всех других слов.
=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))
Примеры и результаты
Text Description Results
Blank
Space
some Text no space some
some text Text with space text
some Text with leading space some
some Text with trailing space some
some text some text Text with multiple spaces text some text
Комментарии к Формуле:
- Функция TRIM используется для удаления всех ведущих и конечных пробелов. Дублирование интервала в тексте также удаляется.
- Затем функция НАЙТИ находит
первое пространство
- Если нет места, то обрезается
текст возвращается
- В противном случае функция MID
используется для возврата любого текста после
первое пространство
Ответ 2
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Вначале проверьте, содержит ли ячейка пробел, если оно вернет первое значение из пробела, иначе оно вернет значение ячейки.
Изменить
Просто чтобы добавить к приведенной выше формуле, как она есть, если в ячейке нет значения, она вернет 0. Если вы хотите отобразить сообщение или что-то сообщить пользователю, что оно пустое, вы можете использовать следующее:
=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
Ответ 3
Следующее возвращает первое слово в ячейке A1, если оно разделено пробелом (работает в Excel 2003):
=LEFT(A1, SEARCH(" ",A1,1))
Ответ 4
Эти вещи, как правило, проще, если вы пишете им ячейку за раз, разбивая длинные формулы на более мелкие, где вы можете проверить их на этом пути. Затем вы можете скрыть промежуточные вычисления или перевести их все в одну формулу.
Например, принимая формулу Джеймса:
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Это допустимо только в Excel 2007 или новее.
Разбить его следующим образом:
B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))
Это немного легче работать, кусок за раз. Как только это будет сделано, вы можете превратить его в
=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))
если вы этого желаете.
Ответ 5
Если вам требуется выделение для столбцов только один раз, когда ответом будет функция "Текст в столбцы" в MS Excel.
См. статью справки MS здесь:
http://support.microsoft.com/kb/214261
НТН
Ответ 6
Выделите ячейку, используйте Dat = > Text to Columns, а DELIMITER - пробел.
Результат появится в таком количестве столбцов, что и раскол. Найдите пробел.
Ответ 7
В других ответах есть несколько замечательных рабочих листов, но я думаю, что они упустили из виду, что вы можете определить пользовательскую функцию (udf) и вызвать ее из листа или формулы.
Следующая проблема заключается в том, чтобы решить либо работать с целым массивом, либо с элементом.
Например, этот код функции UDF
Public Function UdfSplit(ByVal sText As String, Optional ByVal sDelimiter As String = " ", Optional ByVal lIndex As Long = -1) As Variant
Dim vSplit As Variant
vSplit = VBA.Split(sText, sDelimiter)
If lIndex > -1 Then
UdfSplit = vSplit(lIndex)
Else
UdfSplit = vSplit
End If
End Function
позволяет использовать одиночные элементы со следующей ячейкой
=UdfSplit("EUR/USD","/",0)
или можно использовать блоки ячеек с
=UdfSplit("EUR/USD","/")