В Excel есть встроенная формула/функция для добавления или добавления значения в массив? Поэтому предположим, что у меня есть собственный UDF, MyFunc (...), который возвращает массив значений. Могу ли я добавить или преподнести одно значение этому результату, используя ссылку на одну ячейку?Добавить или добавить к массиву без VBA/UDF
ответ
Как мы уже говорили в комментариях, вот возможный ответ:
AFAIK, никакой формулы не может это сделать, и нет никакой функции Append в VBA. Тем не менее, вы можете использовать функцию ConcatenateArrays
от Chip Pearson
Этого можно достичь с помощью стандартных функций массива Excel.
Для иллюстрации предположим MyFunc является
Function MyFunc(r As Range) As Variant
MyFunc = r.Value
End Function
Где пропущенный диапазон больше, чем одна клетка, это возвращает двумерный массив.
Когда вводится как формула массива, как =D1&MyFunc(A2:C7)&E1
это присоединяет D1 и присоединяет Е1
Оно также может быть использовано в стандартной формуле не-массив, где ожидается параметр массива, как показано в ячейке D12 ниже
Хороший! Это также напоминает мне об этой статье (от Чипа Пирсона снова) (http://www.cpearson.com/excel/ReturningArraysFromVBA.aspx), где он объясняет, как вернуть и использовать массив из UDF – JMax
Крис - я попробовал следующее: = SUM ({1,2,3,4}) и, конечно, возвращает 10. Однако = SUM ({1,2,3,4} & A1), где A1 - числовые значения 0. Это случай, независимо от того, введена ли формула в виде формулы массива. Мысли? – SFun28
Крис - Я думаю, вы предлагаете конкатенацию строк для каждого элемента массива вместо добавления одного элемента во весь массив? – SFun28
AFAIK, никакая формула не может это сделать, и нет функции 'append' в VBA. Тем не менее, вы можете использовать функцию «ConcatenateArrays» из [Chris Pearson] (http://www.cpearson.com/excel/vbaarrays.htm) – JMax
JMax - спасибо за указатель! Я посмотрел на ConcatenateArrays и его то, что я хочу выполнить (мне просто нужно обернуть эту функцию своей собственной функцией, которая возвращает результирующий массив, а не boolean true/false). Не могли бы вы опубликовать это как ответ, чтобы я мог дать вам кредит? – SFun28
Если это единственное значение, почему вы просто не делаете Redim Сохраните массив с еще одним элементом, а затем добавьте его, а не запустите ConcatenateArrays? – brettdj