Использование таблиц в UDF в Excel 2007 - PullRequest
1 голос
/ 10 октября 2008

Я пишу UDF для Excel 2007, в который я хочу передать таблицу, а затем сослаться на части этой таблицы в UDF. Так, например, моя таблица под названием «Stock» может выглядеть примерно так:

Наименование Стоимость товара на складе

плюшевый мишка £ 10 10

Леденцы на палочке 20р 1000

У меня есть UDF, который я хочу вычислить общей стоимостью всех предметов, оставшихся на складе (фактический пример гораздо более сложный, который на самом деле невозможно сделать без очень сложной формулы)

В идеале синтаксис для UDF должен выглядеть примерно так:

TOTALPRICE(Stock)

Что из того, что я могу понять, означало бы, что UDF будет иметь подпись

Function TOTALPRICE(table As Range) As Variant

У меня проблемы с тем, как ссылаться на столбцы таблицы и перебирать их. В идеале я хотел бы иметь возможность делать это, ссылаясь на заголовки столбцов (так что-то вроде таблицы [Стоимость]).

Ответы [ 2 ]

1 голос
/ 10 октября 2008

Это очень простой (не каламбур), но он будет делать то, что вы описываете. Для больших таблиц он может стать медленным, так как он скрытно перемещается между макрос-функцией и рабочим листом, и такой вид деятельности складывается.

Предполагается, что у вас есть одна строка заголовков и один столбец имен (следовательно, переменные цикла 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
0 голосов
/ 10 октября 2008

Примечание. У меня нет Excel 2007, и я пытаюсь написать это, используя документ MSDN в Интернете.
Похоже, у диапазона будет коллекция ListColumns

Таким образом, синтаксис может быть table.ListColumns ("Стоимость").
Это работает?

...