Я хочу подражать результатам встроенного «text-to-fields» в функции UDF. Мне нужно сделать это, потому что мои исходные данные поступают из веб-запроса, и мне нужно использовать результаты на отдельной странице и наметить эти результаты. Для прорисовки мне нужны отсутствующие значения для синтаксического анализа пустых ячеек, так как это единственная опция для графов Excel, чтобы показывать отсутствующие значения в виде пробелов.excel VBA - массив переменной длины от функции
Вы не можете сделать это со встроенным из-за двух ограничений;
1) Он не может нацелить обработанные поля на другой лист.
2) Попытка скопировать значения данных в лист адресата для их анализа там не удалась, поскольку текст-в-поля анализирует ссылочное выражение вместо значения, которое он ссылается.
3) Я не могу разобрать исходную таблицу данных, а затем скопировать разобранные поля на целевой лист, потому что никакое выражение не может скопировать пустую ячейку, оно преобразуется в нулевое значение. (в конце концов, выражение, приводящее к пустой ячейке, стирает себя!)
Так что мне нужен синтаксический анализатор DIY, и в любом случае использование формулы лучше для моих общих потребностей, чем для макроопределения встроенной функции (даже если это сработает).
Мои поля выглядеть следующим образом:
calm
S 10
S 10 G 20
И я хочу, чтобы разобрать только как текст в полях будет, что дало бы числители для чисел, строк для текста, и пустой пропавших без вести (т.е. более короткие значения.)
Так что я использовал этот код;
Function Explode(texte As String, Optional ByVal delimiter As String = " ") _
As String()
' mimic the text-to-fields,
' but allow inter-sheet references
Explode = Split(texte, delimiter)
End Function
Но использовать его, я должен заранее определить вызывающую функцию клетку как часть массива, который является фиксированным размером, и я не знаю, как иметь это возвращать переменное число проанализированных полей в массив фиксированного размера. То, что я хочу от данных примера выше:
Но что я получаю вместо этого:
Обратите внимание, что пустые ячейки должны быть пустыми - не просто выглядеть пустым (не " «строки»).
Edit: Я подозреваю, что я, возможно, придется вместо этого создать суб, который устанавливает значения проанализированных полей и очищает остатки клеток для отсутствующих полей (я всегда иметь максимум четыре поля) вместо возвращать их, но я не очень опытный VBA. Например, что-то, что получает две ссылки на ячейки, одну для исходной ссылки, другую для целевого списка проанализированных полей. Затем вызовите это из функции , которую я могу встроить в лист. Программирование на основе побочных эффектов ...
Трудно увидеть, как вы могли бы сделать эту строку за строкой, используя UDF, когда некоторые строки короче других: любая данная строка сама по себе должна знать, сколько полей было «предположительно» иметь. Вам нужно было бы передать дополнительный параметр, чтобы определить, сколько значений должно быть на выходе. –
Можете ли вы предоставить некоторые примеры данных или даже лучше загружаемый тестовый заглушка? –
Вы не можете вернуть Empty из функции, поэтому я боюсь, что ваш UDF никогда не будет делать то, что вы хотите. Вы можете просто изменить размер выходного массива с помощью 'Application.Caller.Count' за то, что стоит. – Rory