Имитация функции разделения строк в формуле Excel - PullRequest
25 голосов
/ 23 июня 2009

Я пытаюсь разбить строку в формуле Excel, что я могу сделать во многих языках программирования, например,

string words = "some text".split(' ');

Проблема в том, что я не могу быть уверен, что в ячейке более одного слова. Если я пытаюсь использовать функции FIND() или SEARCH(), они возвращают #VALUE, если нет места. Есть ли простой способ разбить строку так, чтобы она возвращала отдельные слова (или даже лучше, чтобы она возвращала либо первое слово, либо все остальные слова)?

Ответы [ 7 ]

23 голосов
/ 23 июня 2009

Формула для возврата либо первого слова , либо всех остальных слов .

=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 используется для удаления всех начальных и конечных пробелов. Дублирующий интервал внутри текста также удаляется.
  • Функция FIND затем находит первый пробел
  • Если места нет, то обрезается текст возвращается
  • В противном случае функция MID используется для возврата любого текста после первый пробел
9 голосов
/ 23 июня 2009
=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))
9 голосов
/ 23 июня 2009

Следующее возвращает первое слово в ячейке A1, разделенное пробелом (работает в Excel 2003):

=LEFT(A1, SEARCH(" ",A1,1))
3 голосов
/ 23 июня 2009

Эти вещи, как правило, проще, если вы пишете им ячейку за раз, разбивая длинные формулы на более мелкие, где вы можете проверить их по пути. Затем вы можете скрыть промежуточные вычисления или свернуть их все в одну формулу.

Например, взяв формулу Джеймса:

=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))

если хочешь.

2 голосов
/ 12 сентября 2014

Если вам нужно выделить столбцы только один раз, ответом будет функция «Текст в столбцы» в MS Excel.

См. Статью помощи MS здесь: http://support.microsoft.com/kb/214261

НТН

1 голос
/ 28 июня 2017

В других ответах есть отличная рабочая таблица, но я думаю, что они упустили из виду, что вы можете определить пользовательскую функцию (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","/")

1 голос
/ 30 октября 2014

Выделите ячейку, используйте Dat => Text to Columns, и РАЗДЕЛИТЕЛЬ - это пробел. Результат будет отображаться в столько столбцов, сколько разделитель найдет пространство.

...