Я пишу UDF для Excel 2007, которому я хочу передать таблицу, а затем ссылаться на части этой таблицы в UDF. Так, например, моя таблица с названием "Акции" может выглядеть примерно так:
Name Cost Items in Stock
Teddy Bear £10 10
Lollipops 20p 1000
У меня есть UDF, в котором я хочу рассчитать общую стоимость всех предметов, оставшихся на складе (фактический пример намного сложнее, что на самом деле невозможно сделать без очень сложной формулы)
В идеале синтаксис UDF должен выглядеть примерно так:
TOTALPRICE(Stock)
Что из того, что я могу решить, будет означать, что UDF будет иметь подпись
Function TOTALPRICE(table As Range) As Variant
У меня проблемы с тем, как ссылаться на столбцы таблицы и перебирать их. В идеале я хотел бы иметь возможность делать это, ссылаясь на заголовки столбцов (например, на table [Cost]).


Это очень простой (без каламбура), но он будет делать то, что вы описываете. Для больших таблиц это может стать медленным, так как под капотом он перемещается между функцией макроса и рабочим листом, и такая деятельность складывается.
Предполагается, что у вас есть одна строка заголовков и один столбец имен (отсюда переменные цикла For, начинающиеся с 2).
Есть много вещей, которые могут понадобиться - мы можем приберечь это для другого вопроса или еще одного раунда по этому.
Обратите внимание, что функция возвращает «Вариант», кстати ...
Public Function TotalPrice(table As Range) As Variant
Dim row As Long, col As Long
Dim total As Double
For row = 2 To table.Rows.Count
For col = 2 To table.Columns.Count
TotalPrice = TotalPrice + table.Cells(row, col) * table.Cells(row, col + 1)
Next
Next
End Function
Обратите внимание: если вы передаете таблицу, она не включает заголовки в диапазоне, поэтому вы должны начать с индекса 1, а не 2.
Примечание: у меня нет Excel 2007, и я пытаюсь написать это, используя документ MSDN в Интернете. Похоже, у диапазона будет коллекция ListColumns
Итак, синтаксис может быть table.ListColumns ("Cost").
Это работает?
К сожалению, вы не можете индексировать его, используя строку.
Хотя это работает и позволяет мне закончить свою электронную таблицу (за это я благодарю вас), он не использует преимущества функции таблицы Excel 2007, которую я нашел досадно небольшой документации по их использованию в макросах и UDF, поэтому я собираюсь оставьте людям возможность привести более конкретные примеры.