Для диапазона требуется две ячейки: начало и конец (или строка).
Range(Cells(x2, 4))
должно быть просто
Cells(x2, 4)
Также
Range(Cells(x1, 4), Cells(y1, 4))
возвращает массив значений, которые вы пытаетесь объединить в строку.
Вам нужно вернуть адрес, по которому строка:
Range(Cells(x1, 4), Cells(y1, 4)).Address(0,0)
Другие примечания:
- В практику следует присваивать родительский лист всем объектам диапазона
- Все
+ 22
могут быть расположены в строке, используя i
в качестве умножителя.
- Используйте Long вместо Integer при ссылках на номера строк, поскольку они могут превышать допустимое значение Integer.
Dim y1 As Long
Dim x1 As Long
Dim x2 As Long
Dim i As Long
x1 = 5
y1 = 10
x2 = 43
With Worksheets("Sheet1") 'Change to your sheet
For i = 1 To 500
.Cells((i - 1) * 22 + x2, 4).Value = "=1-Sum(" & .Range(.Cells((i - 1) * 22 + x1, 4), .Cells((i - 1) * 22 + y1, 4)).Address(0,0) & ")"
Next
End With