1

У меня есть эта строка в ячейке A1:

A1 some text, to be, processed

Я хочу создать формулы для B1, C1, D1 и т.д., Где:

B1 some text
C1 to be
D1 processed
E1 

Я уже нашел функцию Text to Columns , но мне нужно сделать это с помощью формул.

3 ответа3

3

Вы можете использовать VBA для создания пользовательской функции, которую можно использовать в качестве формулы. Сделать это:

  1. Откройте Visual Basic (Alt+F11)
  2. Создать новый модуль (Вставка-> Модуль)
  3. Скопируйте / вставьте следующий код:

Public Function custom_split(str As String, num As Long, Optional delimeter As String = " ") As String
    Dim substrs() As String
    substrs = split(str, delimeter)
    If UBound(substrs) < num Then
        custom_split = ""
    Else
        custom_split = Trim(substrs(num))
    End If
End Function

Теперь закройте окно Visual Basic, чтобы вернуться в Excel.

Чтобы использовать формулу, как в вашем примере, введите

  • в B1: = custom_split(A1; 0; ",")
  • в C1: = custom_split(A1; 1; ",")
  • так далее...

Вы можете изменить запятую, чтобы разделить на другие символы.

Единственным недостатком пользовательских формул является то, что вы получите предупреждение о включении макросов при каждом открытии файла.

2

Я сделал это, используя Left() и некоторые столбцы на запасном листе, в котором считались символы, пока не нашли запятую. Это выглядело примерно так:

    A                          B                C                D
1    Text                    1st Comma        2nd Comma        3rd comma
2 =(cell ref to text)&","   =find(",",a2,0)  =find(",",a2,b2) =find(",",a2,c2)

Referring to your original sheet:
B1: =Left(a1,NewSheet!B2)
C1: =Mid(A1, NewSheet!B2+1, NewSheet!C2-NewSheetB2)
D1: =Mid(A1, NewSheet!(C2+1 NewSheet!d2-Newsheet!c2)

В вашем NewSheet сделайте столько столбцов, сколько, по вашему мнению, могут содержать запятые в вашем тексте. Если число большое, вы, вероятно, должны использовать решение VBA.

Обратите внимание, что я вставил запятую в конец вашей строки, чтобы вы не получали ошибок (#value, если в строке нет запятой). Вы можете либо проверить результат, превышающий длину исходной строки, либо использовать =iferror() для обработки функций =find() не находящих запятую. Наконец, используйте =Trim() если строки не соответствуют пробелу после запятой.

1

Вы можете использовать текстовые функции Left, Mid и Right. Слева позволяет вам извлечь количество символов из левой части текстовой строки. Право делает то же самое с правой стороны текстовой строки. С Mid вы исключаете некоторое количество символов слева, а затем говорите ему взять следующее x количество символов.

Если вы перейдете в диалоговое окно "Вставить функцию" (нажмите "fx" рядом с панелью формул), вы найдете эти функции в категории "Текст".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .