Когда вы создаете функцию, передайте всю информацию, которая нужна функции в качестве аргументов. Не читайте данные из внешних источников, как другие ячейки. Если функция нуждается в этом, передайте это.
Не называйте аргументы так же, как имя вашей функции. Чтобы вернуть значение, присвойте это значение имени функции. Если у вас есть аргумент с тем же именем, он запутывается.
Этот пример не суммируется, потому что я не понимаю всех условий, но он должен дать вам старт, и вы сможете исправить то, что не так.
Public Function Score(ByVal Runs As Long, ByVal Balls As Long, ByVal Fours As Long, ByVal Sixers As Long, _
ByVal RunFactor As Long, ByVal FourFactor As Long, ByVal SixerFactor As Long, _
ByVal HalfFactor As Long, ByVal CentFactor As Long, _
ByVal Rate1Factor As Long, ByVal Rate2Factor As Long, ByVal Rate3Factor As Long) As Double
Dim dReturn As Double
dReturn = (Runs * RunFactor) + (Fours * FourFactor) + (Sixers * SixerFactor)
If Runs >= 50 Then dReturn = dReturn + HalfFactor
If Runs >= 100 Then dReturn = dReturn + (CentFactor - HalfFactor)
Select Case Runs / Balls
Case Is < 0.5
dReturn = dReturn - Rate1Factor
Case Is <= 59.9
dReturn = dReturn - Rate2Factor
Case Is <= 70
dReturn = dReturn - Rate3Factor
End Select
Score = dReturn
End Function
Вам не нужна отдельная переменная (dReturn), но я люблю ее использовать. Вы используете эту функцию в такой ячейке
=score(F2,G2,H2,I2,1,1,2,8,16,3,2,1)
Обратите внимание, что все мои факторы жестко закодированы, но вы также можете указать их на диапазоны
=score(F2,G2,H2,I2,Sheet2!A1,Sheet2!A2,Sheet2!A3,Sheet2!A4,Sheet2!A5,Sheet2!A6,Sheet2!A7,Sheet2!A8)
Еще лучше использовать именованные диапазоны
=score(F2,G2,H2,I2,Run,Four,Sixer,Half,Century,Strike1,Strike2,Strike3)