Пожалуйста, рассмотрите возможность использования пользовательской функции для ваших целей.Вставьте код функции в стандартный модуль кода.
Function BillTotal(R As Long) As Double
' 07 Mar 2019
' returns -1 in case of error
Dim Amt As Long
Dim Qty As Long
Application.Volatile
On Error Resume Next
Amt = Application.WorksheetFunction.Match("amount", Rows(1), 0)
If Err.Number = 0 Then
Qty = Application.WorksheetFunction.Match("bill.qty", Rows(1), 0)
End If
If Err Then
BillTotal = -1
Else
BillTotal = Val(Cells(R, Amt).Value) * Val(Cells(R, Qty).Value)
End If
End Function
В ячейку, в которой вы хотите получить результат, напишите вызов функции следующим образом.
=BillTotal(Row())
В качестве альтернативы выможно использовать ту же функцию, чтобы реализовать вашу оригинальную идею.Просто вызовите его в цикле For ... Next и запишите результат в ячейку, определенную R и C, где номер строки R предоставляется циклом, а C может быть получен из функции MATCH, как показано в моей функции.При использовании таким способом строка Application.Volatile
не потребуется.