Копировать строки из нескольких диапазонов, пока значение ячейки не станет пустым, вставить на другой лист - PullRequest
0 голосов
/ 20 января 2020

Я очень новичок в VBA. Мой очень простой код - копирование данных в диапазонах от листа «Источник» до листа «Пункт назначения», лист «Пункт назначения» печатается позже, и я действительно хотел бы избежать пустых строк. Количество строк, заполненных данными в диапазоне, варьируется. Этот код копирует весь диапазон, включая любые пустые записи в конце диапазона. В идеале, когда последняя запись копируется и вставляется из диапазона, тогда копирование и вставка начинается с нового диапазона. Сидя, почесывая голову некоторое время на этом. Оцените любые полезные советы здесь.

Sub Copy()

Sheets("Source").Range("F1:G20").Value = Sheets("Destination").Range("A1:B20").Value
Sheets("Source").Range("A20:B40").Value = Sheets("Destination").Range("A21:B41").Value
Sheets("Source").Range("N1:M20").Value = Sheets("Destination").Range("E42:F42").Value

End Sub

1 Ответ

0 голосов
/ 20 января 2020

Заполняет место назначения соответствующими пустыми клетками

Есть несколько способов сделать это. Как указал @Cyril, вы можете либо l oop, либо отфильтровать диапазоны. L oop позволяет вам указать, как вы хотите обрабатывать определенные c случаи (т. Е. Ячейка пуста), а фильтр (через Excel или VBA) позволяет указать, какие ячейки вы хотите, перед тем как копировать их.

l oop, в котором вы не копируете пустые ячейки, будет выглядеть примерно так:



Dim curRange as Range 'Source values
Dim destRange as Range 'Target location

Set curRange = Sheets("Source").Range("F1:G20")
Set destRange = Sheets("Destination").Range("A1:B20")

For i = 1 to curRange.Cells.Count
    If Not curRange.Cells(i).Value = vbNullString Then
        destRange.Cells(i).Value = curRange.Cells(i).Value
    End If
Next i

l oop может быть соответственно вложено, если вы выполняете итерацию по большое или неизвестное число диапазонов.

Если у вас есть значение по умолчанию (в отличие от vbNullString), просто замените vbNullString значением по умолчанию.

Заполняет пункт назначения в непрерывном порядке , Перепрыгивая через пустые ячейки

После перечитывания, я думаю, вы, возможно, имели в виду, что вы пытаетесь не иметь пустых ячеек на листе назначения, что означает, что вы хотите продолжить вставку из предыдущей ячейки.

Отрегулируйте l oop следующим образом:

Dim curRange As Range 'Source values
Dim destRange As Range 'Target location
Dim i As Long

Set curRange = Sheets("Source").Range("F1:G20")
Set destRange = Sheets("Destination").Range("A1:B20")
i = 1

For Each cell In destRange.Cells
    Do Until i > curRange.Cells.Count
        If Not curRange.Cells(i).Value = vbNullString Then
            cell.Value = curRange.Cells(i).Value
            i = i + 1
            Exit Do
        Else
            i = i + 1
        End If
    Loop
Next cell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...