Вы можете использовать Application.Caller, чтобы обнаружить ячейку, в которой выполняется функция:
Public Function AddedValue(TabSize As Integer)
Application.Volatile
r = Application.Caller.Row
With Application.Caller.Parent.Rows(r)
firstcell = .Cells(1, 11) ' column K
Select Case TabSize
Case 2
secondcell = .Cells(1, 14) ' column N
Case 4
secondcell = .Cells(1, 15) ' column O
Case 6
secondcell = .Cells(1, 16) ' column P
Case 8
secondcell = .Cells(1, 17) ' column Q
Case 10
secondcell = .Cells(1, 18) ' column R
End Select
thirdcell = .Cells(8) ' column H
AddedValue = firstcell * (secondcell * (thirdcell * 0.001))
End With
End Function
В качестве альтернативы, если TabSize одинаков в соответствии с предложением вашего вопроса - вы также можете «рассчитать», какой столбец изэто:
Public Function AddedValue2(TabSize As Integer)
Application.Volatile
r = Application.Caller.Row
With Application.Caller.Parent.Rows(r)
firstcell = .Cells(1, 11) ' column K
secondcell = .Cells(1, 13 + (TabSize / 2)) ' dynamic column from TabSize
thirdcell = .Cells(8) ' column H
AddedValue2 = firstcell * (secondcell * (thirdcell * 0.001))
End With
End Function