Я думаю, это то, что вы ищете:
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
Получено от here.
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
Существует не волшебная палочка здесь. Stack Overflow - это не код для моего сайта. Также в вашем посте недостаточно информации, чтобы мы даже догадывались, что вы хотите. Мы поможем с конкретными проблемами в существующем коде. –