У вас будут разные параметры в зависимости от версии Excel.
ВАРИАНТ 1: TEXTJOIN
Я думаю,Вы ищете функцию TEXTJOIN
. Только помните, что вы можете использовать эту более позднюю версию Excel (см. Ссылку на документацию), и она может работать так:
![enter image description here](https://i.stack.imgur.com/NHwrQ.png)
Формула в B1
:
=TEXTJOIN(",",TRUE,LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")))
ПРИМЕЧАНИЕ: Это формула массива, и вам нужно ввести ее, используя Ctrl Shift Введите
Чтобы сделать так, чтобы вам не нужно было использовать вышеуказанную комбинацию клавиш, мы можем включить INDEX
:
=TEXTJOIN(",",TRUE,INDEX(LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")),))
Дополнительная информация:
FILTERXML
Эта функция требует(согласно документации) два обязательных аргумента:
- Строка в действительном XML
- Строка в действительном XPath
Поскольку мы хотим вернуть массив элементов (слов) из ячейки, нам нужно SUBSTITUTE
пробелы для концатеги (</..>
) и объединить его с начальным тегом (<..>
) в начале строки aи еще один конечный тег в конце.
Мне придется положиться на объяснение тегов XML
относительно того, почему <?><?>
работает и что это означает, потому что, насколько я могу, я смог протестироватьпоменяйте местами буквы или замените их другой буквой с теми же результатами, если последний символ Xpath
будет напоминать тот же символ. Было бы здорово, если бы кто-то смог дополнить этот ответ более подробным объяснением по этому вопросу.
TEXTJOIN
Если вы являетесь подписчиком Office 365 или являетесь владельцем Excel 2019, вы можете использовать эту функцию. Существует (согласно документации) как минимум 3 обязательных аргумента:
- Разделитель, который должен быть текстовой строкой, либо пустой, либо одним или несколькими символами, заключенными в двойные кавычки, или ссылкой на действительныйтекстовая строка. Если указано число, оно будет рассматриваться как текст.
- Второй аргумент может содержать
TRUE
или FALSE
и определяет, хотите ли вы исключить / включить пустые значения - Третий аргумент - это текстовый элемент, к которому нужно присоединиться. Текстовая строка или массив строк, например диапазон ячеек.
Теперь мы можем объединить две функции, FILTERXML
, возвращая массив, который мы можем использовать в TEXTJOIN
.
INDEX
+ LEN
I 'Придется объяснять использование этих функций вместе. Я не думаю, что LEN
и INDEX
понадобятся сами по себе, но вместе они работают очень хорошо. Собственно, будет сила, называемая неявным пересечением, которая не позволит LEN
возвращать массив значений при передаче массива значений в функцию, в нашем случае через наш FILTERXML
.
Обычно вы быотключите этот механизм, используя комбинацию клавиш: Ctrl Shift Введите , более известный как CSE
.
Теперь то, что делает INDEX
, отключает это неявное пересечение, делая LEN
способным возвращать массив, устраняя необходимость CSE
формулы. INDEX
- это одна из функций, которая обладает этой «силой». Более подробное объяснение неявного пересечения можно найти здесь
ВАРИАНТ 2: UDF
Бездоступ к TEXTJOIN
Я думаю, вам нужно взглянуть на UDF, возможно, как показано ниже:
Function TEXTJOIN(rng As Range) As String
TEXTJOIN = Join(Application.Evaluate("LEN({""" & Join(Split(rng, " "), """,""") & """})"), ",")
End Function
Вы можете назвать это в B1
примерно так: =TEXTJOIN(A1)
Дополнительная информация:
UDF состоит из трех основных механизмов, которые работают вместе:
JOIN
Эта функция принимает два параметра, для которых требуется первый:
- Первый параметр - это одномерный массив, содержащий подстроки
- Второй (необязательный) параметр - это строковый символ, используемый для разделения подстрок в возвращаемой строке. Если опущен, используется пробел (""). Если разделитель является строкой нулевой длины (""), все элементы в списке объединяются без разделителей.
Функция возвращает строковое значение
SPLIT
Эта функция принимает строку и ограничивает ее указанным символом / подстрокой. Он принимает следующие аргументы:
- 1st: Обязательное строковое выражение, содержащее подстроки и разделители. Если выражение является строкой нулевой длины (""), Split возвращает пустой массив, то есть массив без элементов и без данных.
- 2nd: необязательный разделитель, который является символом строки, используемым для идентификациипределы подстроки. Если опущено, символ пробела ("") считается разделителем. Если разделитель - строка нулевой длины, возвращается одноэлементный массив, содержащий всю строку выражения.
- 3-й: Необязательный предел, количество возвращаемых подстрок;-1 указывает, что возвращаются все подстроки.
- 4-е: Сравнение, также необязательное, представляет собой числовое значение, указывающее тип сравнения, используемый при оценке подстрок. Значения см. В разделе «Настройки».
В этом случае нам потребуются только первые два аргумента.
Application.Evaluate
Это IMO - один из самых удобных механизмов, которые вы можете использовать для извлечения возвращенного массива значений без необходимости циклически проходить по элементам / ячейкам. Это может замедлиться, если вы передадите функции формулу большого массива, но в этом случае все будет в порядке. Функция преобразует имя Microsoft Excel в объект или значение, и когда мы передаем ему формулу, оно, таким образом, возвращает результаты. В этом конкретном случае он вернет массив.