Я думаю, это то, что вы ищете:
Sub CopyNonBlankCells()
Dim cel As Range, myRange As Range, CopyRange As Range
Set myRange = Sheet1.Range("C1:C20") '---> give your range here
For Each cel In myRange
If Not IsEmpty(cel) Then
If CopyRange Is Nothing Then
Set CopyRange = cel
Else
Set CopyRange = Union(CopyRange, cel)
End If
End If
Next cel
CopyRange.Copy Sheet2.Range("C1") '---> enter desired range to paste copied range without blank cells
End Sub
Приведенный выше код скопирует диапазон C1:C20
в Sheet1
в C1
в Sheet2
Взято с здесь.
EDIT: Следующий ответ основан на вашем комментарии ________________________________________________________________________________
Если вы напишите что-то вроде ниже
Set myRange = Sheet1.Range("G:G")
Set myRange = Sheet2.Range("G:G")
myRange
будет сначала установлено на Sheet1.Range("G:G")
, а затем на Sheet2.Range("G:G")
, что означает, что текущий диапазон, который будет иметь myRange
, будет Sheet2.Range("G:G")
.
Если вы хотите использовать несколько диапазонов, вы можете использовать функцию UNION
, но есть ограничение, заключающееся в том, что с помощью UNION вы можете комбинировать разные диапазоны, но только на одном листе. И ваше требование состоит в том, чтобы объединить диапазоны из разных листов. Для этого я добавляю новый рабочий лист и добавляю в него ваши G:G
диапазоны со всех листов. Затем, после использования вновь добавленного листа, я удаляю его.
Следующий код даст вам желаемый результат на листе с именем Result
.
Sub CopyNonBlankCells()
Dim cel As Range, myRange As Range, CopyRange As Range
Dim wsCount As Integer, i As Integer
Dim lastRow As Long, lastRowTemp As Long
Dim tempSheet As Worksheet
wsCount = Worksheets.Count '--->wsCount will give the number of Sheets in your workbook
Set tempSheet = Worksheets.Add '--->new sheet added
tempSheet.Move After:=Worksheets(wsCount + 1)
For i = 1 To wsCount
If Sheets(i).Name <> "Result" Then '---> not considering sheet "Result" for taking data
lastRow = Sheets(i).Cells(Rows.Count, "G").End(xlUp).Row '--->will give last row in sheet
lastRowTemp = tempSheet.Cells(Rows.Count, "G").End(xlUp).Row '--->will give last row in newly added sheet
Sheets(i).Range("G1:G" & lastRow).Copy _
tempSheet.Range("G" & lastRowTemp + 1).End(xlUp)(2)
End If
Next i
lastRowTemp = tempSheet.Cells(Rows.Count, "G").End(xlUp).Row
Set myRange = tempSheet.Range("G1:G" & lastRowTemp) '--->setting range for removing blanks cells
For Each cel In myRange
If Not IsEmpty(cel) Then
If CopyRange Is Nothing Then
Set CopyRange = cel
Else
Set CopyRange = Union(CopyRange, cel)
End If
End If
Next cel
CopyRange.Copy Sheets("Result").Range("G1") '---> enter desired range to paste copied range without blank cells
Application.DisplayAlerts = False
tempSheet.Delete '--->deleting added sheet
Application.DisplayAlerts = True
End Sub
person
Mrig
schedule
21.05.2016