Пользовательская функция - диапазон как аргумент - VBA

Узнай цену своей работы

Формулировка задачи:

Привет. Собственно - пользовательская функция. Ее задача - сложить значения каждой i+3 (1-я, 4-я, 7-я и т.д.) ячейки в диапазоне, переданном в качестве аргумента, и получить в результате сумму. Делаю так:
Листинг программы
  1. Function Itogo(ByRef myRange As Range)
  2. Dim data As Double
  3. Dim i As Long
  4. Dim myCell As Range
  5. Dim val As Double
  6. data = 0
  7. i = 1
  8. For Each myCell In myRange
  9. If myCell.Row = i Then'Здесь Row берется не из диапазона, а с листа
  10. val = myCell(i, 1)'Чтобы самому видеть значение
  11. data = data + val
  12. End If
  13. i = i + 2
  14. Next myCell
  15. Itogo = data
  16. End Function
Проблема возникает с тем, что при проверке условия Row отсчитывается не в переданном диапазоне, а с листа. Т.е. начальное значение должно быть i=1, а оно равно 100 (100-я строка на листе). Вопрос - как сделать проверку именно в диапазоне?

Решение задачи: «Пользовательская функция - диапазон как аргумент»

textual
Листинг программы
  1. Function Itog#(myRange As Range)
  2.           Dim z, i&: z = myRange.Value
  3.           For i = 1 To UBound(z)
  4.            If i Mod 2 = 1 Then
  5.            Itog = Itog + z(i, 1)
  6.            End If
  7.           Next
  8. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут