Подтвердить что ты не робот

Имитировать функцию разделения строк в формуле Excel

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

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

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

4b9b3361

Ответ 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","/")