Прошло много времени с тех пор, как я написал VBA. Ваша подпрограмма предлагает некоторые странные, и поэтому я подозреваю, что непреднамеренная логика c Я подозреваю, что вы имеете в виду, что если значение 20,2, вернуть 20,3, а если 20,3, вернуть 20,1.
Как написано, он НИКОГДА не установит B22 на 20,1, потому что B2 должен быть равен 20,2 и 20,3 из-за вложенного if.
То, что я предлагаю, - это функция, которая принимает диапазон в качестве входных данных (предположительно ячейка B2) и возвращает значение. Если ввод 20,2, вы получите 20,3. Если это 20,3, вы получите 20,1. В противном случае вы получите то, что было в B2. Вы можете поместить формулу = customFun c (B2) в ячейку B22, чтобы получить результат.
Public Function customFunc(rngIn As Range)
custFunc = rngIn.Value
If rngIn.Value = 20.2 Then
customFunc = 20.3
End If
If rngIn.Value = 20.3 Then
customFunc = 20.1
End If
End Function