Скопировать одну ячейку из макроса диапазона - PullRequest
1 голос
/ 05 февраля 2020

У меня есть данные на Листе1, количество которых варьируется. И мне нужен макрос для l oop во всем диапазоне, если, если ячейка имеет значение, скопируйте его в указанный столбец c на Sheet2. Я не могу просто скопировать весь диапазон по причинам, в которые я не пойду. Мне нужно l oop через каждую ячейку одну за другой и вставить значение в указанном формате c на Sheet2.

У меня есть код ниже, который дает мне

Ошибка «1004» Метод «Range of Object'_Worksheet» не удалось.

Sub COPY()

Dim i As Long, j As Long, rng As Range, k As Long, ws1 As Worksheet, ws2 As Worksheet
k = 1
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")

Set rng = Range("B4:D17")
For i = 1 To rng.Rows.Count

If Not IsEmpty(rng.Cells(i, 1)) Then
ws1.Range(rng.Cells(i, 3)).Copy Worksheets("Sheet2").Range("A1")

End If
Next

End Sub

1 Ответ

0 голосов
/ 05 февраля 2020

Забудьте об объекте rng в целом. Это было бы более необходимо в операторе For Each, но вы просто просматриваете строки на своем листе.

Создайте простой оператор For i, который просто зацикливает нужные вам строки:

Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")

Dim i As Long
For i = 4 To 17
    If Not IsEmpty(ws1.Cells(i, 2)) Then
        ws1.Cells(i, 4).Copy ws2.Range("A1")
    End If
Next i

Как я уже указывал, место назначения вашей копии ws2.Range("A1") - это stati c, поэтому каждый раз, когда ваш критерий удовлетворяется, он продолжает перезаписывать ваши данные здесь. Но вы, кажется, справились с этим, поэтому я не буду предполагать, что вы пытаетесь с этим делать.

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