Использование таблиц в UDF в Excel 2007

Я пишу 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]).

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
1 041
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

ICR 10.10.2008 16:17

Обратите внимание: если вы передаете таблицу, она не включает заголовки в диапазоне, поэтому вы должны начать с индекса 1, а не 2.

ICR 10.10.2008 17:53

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

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

К сожалению, вы не можете индексировать его, используя строку.

ICR 11.10.2008 04:00

Другие вопросы по теме