Скопируйте и вставьте цикл через 2 набора диапазонов - PullRequest
0 голосов
/ 28 мая 2018

Я работаю над листом Excel.У меня есть названия записей данных, которые я хочу скопировать в другие места на листе.Названия варьируются от c3 до c122, и я намерен скопировать и вставить их в ячейки, расположенные на расстоянии 70 строк друг от друга.Код ниже не достаточно;Мне выдается ошибка 450 (неправильное количество аргументов или неправильное присвоение свойства).

Option Explicit
Sub Titles()
Dim i As Integer
    Dim n As Integer
    For i = 151 To 8971 Step 70
        For n = 3 To 122 Step 1
            Cells.Value(i, 3) = "c" & n
    Next n
Next i

End Sub

Я хочу, чтобы содержимое каждой ячейки C3: C122 было скопировано в C150, C220, ...,C8791.Это хороший подход?Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Здесь много неправильного.

  1. Двойной цикл for не требуется.Если код работает, он будет перезаписывать Cells.Value(i, 3) 120 раз на каждой итерации i
  2. Cells, что само по себе относится ко всем ячейкам на активном листе
  3. Cells.Value возвращает значения ячейки как вариантный массив, в этом случае массив размером 1 048 576 x 16 384
  4. "c" & n создает строку (например, c3), а не ссылку на ячейку

Попробуйтепримерно так (обратите внимание, пожалуйста, проверьте начальное значение rw, поскольку в вашем посте есть противоречие 150 против 151)

Sub Demo()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cl As Range
    Dim rw As Long

    Set ws = ActiveSheet
    Set rng = ws.Range("C3:C122")
    rw = 151 '<--- check if this is right

    For Each cl In rng.Cells
        ws.Cells(rw, 3).Value = cl.Value
        rw = rw + 70
    Next
End Sub
0 голосов
/ 28 мая 2018

Синтаксис на Cells.Value(i, 3) неправильный, он должен быть Cells(i, 3).Value Измените это и посмотрите, все ли работает так, как вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...