Как сделать пользовательскую функцию Split (str as String, delimiter as String), используя Split() в VBA для использования на листе.. и она вернет результат в виде массива или SPILL.. Например,
Split("{20;30;40;50;60}",";")
вернет результат Spill down Array в том же массиве, что и в написанной формуле:
20
30
40
50
60
Я пытаюсь использовать функцию Split(String,";") в VBA, но она возвращает только 1 значение и текстовый тип.. Мне также нужно удалить как '{', так и '}' в строке, если они есть, но принять их, даже если их там нет.
Вам нужно показать свою функциональную строку. Могу поспорить, что ошибка лежит там.
Попробуйте это: Application.Worksheets("YourWorksheet").Range("A1:A5") = Application.Transpose(Split(Replace(Replace("{20;30;40;50;60}", "{", ""), "}", ""), ";"))
@GWD, если у OP есть Office 365, все это не нужно и не может быть сделано с помощью UDF.
@GWD Я жду, когда ОП покажет их, чтобы я мог научить, а не давать ответ.
UDF должен использовать двумерный массив:
Public Function splitt(s As String, sep As String)
arr = Split(s, sep)
ReDim arr2(0 To UBound(arr), 1 To 1)
For i = LBound(arr) To UBound(arr)
arr2(i, 1) = arr(i)
Next i
splitt = arr2
End Function
Пример:
В Excel 365 он будет автоматически заполняться. Без Excel 365 потребуется ввод массива.
Split
Replace
String
.Function mysplit(str As String, deli As String) As String()
mysplit = split(Replace(Replace(str, "{", ""), "}", ""), deli)
End Function
Тогда я бы назвал это так:
=LET(x,mySplit("{20;30;40;50;60}",";"),IF(ISNUMBER(--x),--x,x))
Если вы хотите транспонировать, используйте TRANSPOSE
=LET(x,mySplit("{20;30;40;50;60}",";"),TRANSPOSE(IF(ISNUMBER(--x),--x,x)))
Одна формула может сделать все это без необходимости vba:
=FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("{20;30;40;50;60}",";","</b><b>"),"}",""),"{","")&"</b></a>","//b")
Спасибо .. Я плохо разбираюсь в VBA .. Я пытаюсь найти решение, но не совсем понимаю .. Из-за разочарования я удалил файл .. Думаю, я предпочитаю единую формулу без VBA .. и действительно ли FilterXML нужен и б тег? Что это значит?
FilterXM()
L нужна правильно сформированная XML-структура (каким-то образом сравнимая со структурой html) по крайней мере с documentElement
сверху, например, здесь. <a>...</a>
и дополнительные подузлы (например, <b>..</b>
) для идентификации элементов вашего массива :-)
покажи весь udf который пробовал.