Относительная ссылка клеток с петлей - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь создать цикл, который пишет формулу, ссылающуюся на диапазон ячеек над ним.

Dim y1 As Integer
Dim x1 As Integer
Dim x2 As Integer
Dim y2 As Integer
Dim i

x1 = 5
y1 = 10
x2 = 43


  For i = 1 To 500

  Range(Cells(x2, 4)).Value = "=1-Sum(" & Range(Cells(x1, 4), Cells(y1, 4)) & ")"""
    x1 = x1 + 22
    y1 = y1 + 22
    x2 = x2 + 22
    y2 = y2 + 22

  Next

Итак, для ячейки D21 я хотел бы сказать «= 1-СУММА (D5: D10)», D43 «= 1-сумма (D27: D32)» и т. Д.

1 Ответ

0 голосов
/ 28 июня 2018

Для диапазона требуется две ячейки: начало и конец (или строка).

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
...