Заполняет место назначения соответствующими пустыми клетками
Есть несколько способов сделать это. Как указал @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