VBA excel: Sumproduct, чтобы найти средневзвешенное значение

Нужна помощь по простому VBA.

Я создал тот, который будет смотреть на столбцы от C6 до H6, если он включает слово «include», тогда он будет усреднять значения в C7 до H7.

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

Формула Excel:

SUMPRODUCT(C7:H7,C8:H8)/SUM(C8:H8)

Теперь мне нужно сделать средний вес. Используя продукт суммы, я могу получить ответы, но как я сделаю это в VBA, чтобы сделать его динамическим, а ppl может изменить включаемые значения

Sub SuperAvgL1()
    Dim columnA As Range
    Dim columnB As Range
    Dim myR
    Set columnA = [C6:H6]
    Set columnB = [C7:H7]
    Set columnC = [C8:H8]

myR = WorksheetFunction.AverageIf(columnA, "Include", columnB)
Range("I7") = myR

End Sub

VBA excel: Sumproduct, чтобы найти средневзвешенное значение

Как ваш SUMPRODUCT() еще не динамический?

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

Ответы 1

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

Всего несколько вещей с места в карьер; ColumnC не был инициализирован, никогда не бывает плохой идеей включать Option Explicit, потому что это поможет отловить ошибки позже. Также немного странно, что вы называете свои столбцы диапазонов, когда они являются строками. Однако попробуйте это и посмотрите, работает ли это.

Option Explicit

Sub SuperAvgL1()
    Dim rowA() As Variant
    Dim rowB() As Variant
    Dim rowC() As Variant
    Dim myResult As Variant
    Dim i As Long
    Dim Sumprod As Double
    Dim Total As Double

    rowA() = Range("C6:H6").Value
    rowB() = Range("C7:H7").Value
    rowC() = Range("C8:H8").Value

    Sumprod = 0
    Total = 0

    For i = 1 To 6
        If rowA(1, i) = "Include" Then
        Sumprod = Sumprod + rowB(1, i) * rowC(1, i)
        Total = Total + rowC(1, i)
        End if

    Next i
    Range("I7").Value = Sumprod / Total

End Sub

Отсутствует End If перед Next i внизу

Display name 26.10.2018 00:21

Хороший улов! починил это.

Jchang43 26.10.2018 00:21

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