![Source Data](https://i.stack.imgur.com/vGZKZ.png)
Выше приведен упрощенный пример, но я хочу достичь с помощью UDF - принять строку в столбце с сопоставлением и разделитель, который будет использоваться для разбиения. жало разделяется на подстроки и присваивается последовательно столбцам Q1, Q2, Q3, Q4. Возможно, будет сгенерировано менее 4 подстрок, но никогда не будет больше 4.
Function DECONS(Subject As String, Delim As String) As String
' takes an input string "Subject" and seperates it using "Delim" as the deliminator
' If the desired element exceeds the number of unique substrings the function returns a blank result
' Hardcoded for max 4 substrings
' initializes temporary variables
Dim i As Long
Dim r() As String
' uses built in VBA function to split the passed string using the deliminating character
r = Split(Subject, Delim)
' increases the size of r() to 4 elements and fills extra elements with blancks
For i = UBound(r) + 1 To 3
ReDim Preserve r(i)
r(i) = ""
Next i
' my sad attempt at what I want to acheive
Dim loT As ListObject
Set loT = ThisWorksheet.ListObjects("TT")
For i = 1 To 4
loT.ListColumn(i + 1).Range.Value = r(i - 1)
Next i
End Function
Я сделал манипулирование текстом, используя функцию разделения VBA, которая выдает массив строк, но я Я бью стену о том, как назначить подстроки для соответствующих столбцов. Моя попытка видна выше. Я немного читал, но в VBA / Excel я все еще не достаточно удобен, чтобы понять это самостоятельно. Является ли это более сложным, когда в ListObject, чем за пределами объекта таблицы?
К сожалению, я не могу вернуть массив строк из функции, а затем назначить его нескольким ячейкам, поскольку объект Table не допускает операций с массивами. У меня была работа, где я возвращал указанный элемент, ie 3-й, и я вызывал функцию в каждом столбце и выводил одно соответствующее значение. Однако метод не элегантен и выполняет много ненужных повторных вычислений.