私は200行のシートを持っており、その間にいくつかの空白があります。
空白行があるため、End(xlDown)
または範囲全体を取得することはできません。End(xlUp)
列にデータがある最後の範囲までコピーするにはどうすればよいですか?
また、ヘッダーをコピーしたくありません。
ExcelVBAでこれを行う方法を提案してください。
私は200行のシートを持っており、その間にいくつかの空白があります。
空白行があるため、End(xlDown)
または範囲全体を取得することはできません。End(xlUp)
列にデータがある最後の範囲までコピーするにはどうすればよいですか?
また、ヘッダーをコピーしたくありません。
ExcelVBAでこれを行う方法を提案してください。
それらをコピーする最良の方法は、オートフィルターを使用してブランクでフィルターし、可視範囲をコピーすることです。
例えば
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long
Dim rngToCopy As Range, rRange As Range
Set ws = Sheets("Sheet1")
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
Set rRange = .Range("A1:A" & lRow)
'~~> Remove any filters
.AutoFilterMode = False
With rRange 'Filter, offset(to exclude headers) and copy visible rows
.AutoFilter Field:=1, Criteria1:="<>"
Set rngToCopy = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
'~~> Remove any filters
.AutoFilterMode = False
rngToCopy.Copy
'
'~~> Rest of the Code
'
End With
End Sub
以下のコードを使用して、アクティブシートの列Aで最後に使用された行を取得できます(列の中央に空白のセルがある場合にも機能します)-別のシート/列で実行する必要がある場合は、必要に応じて修正します。
With ActiveSheet
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("A2:A" & lastRow).Copy 'copies column A used range, excluding header row
End With