オートフィルタで絞り込んだ後にコピーすると 隠れている全データがコピーされてしまう。
対象データを削除するマクロだと全データが削除される
Endセルを調べる
絞り込み後のEndセルがヘッダー行だったら絞り込み結果が0件ということになる。 メッセージを表示して、Exit ForやExit Subで抜ける。
Dim n As Long
n = Cells(Rows.Count, 2).End(xlUp).Row '最終行を調べる
If n = ヘッダー行 Then 'もし最終行がヘッダー行だったら
MsgBox "絞り込み結果0件でした。"
絞り込み結果が無かった時の処理
Else
絞り込み結果があった時の処理
End If
その他の方法
▼その他の方法は以下のサイト参考
シリアル値と文字列で異なる
シリアル値同士、文字列同士でないと検索で一致しない。
- シリアル値:2021/7/1
- 文字列:”2021/7/1″
▼参考Webサイト
エラーになる範囲コピー
Copyメソッドは先にコピー元のシートをアクティブにしておかないとエラーになる
'コピー元がアクティブではない状態で
Sheets("A").Range("A1:A5").Copy
Sheets("B").Range("A1").PasteSpecial xlPasteValues
↓ アクティブにしてからコピーすればOK
Sheets("A").Activate 'コピー元シートをアクティブにする
Sheets("A").Range("A1:A5").Copy
Sheets("B").Range("A1").PasteSpecial xlPasteValues
エラーにならない範囲コピー
Range指定の範囲コピーはコピー元シートがアクティブでなくても問題ない。
'コピー元とコピー先で同じ範囲を指定する必要がある
'.Valueは省略できない
Sheets("B").Range("A1:C5").Value = Sheets("A").Range("A1:C5").Value
同じはずですが、Cellsで指定した範囲はコピー元がアクティブでないとエラーになる。
'「シートA」がアクティブではない状態だとエラーになる
'Cellsにシート指定が入っていないことが原因でした
Sheets("B").Range(Cells(2, 2), Cells(6, 3)).Value = Sheets("A").Range(Cells(2, 2), Cells(6, 3)).Value
※↑これはCellsの前にシート指定が抜けているためのエラーでした。
OffsetとResizeならエラーにならない
'Resizeでの範囲指定
Sheets("B").Range("B2").Resize(5, 2).Value _
= Sheets("A").Range("B2").Resize(5, 2).Value
'OffsetとResizeでの範囲指定
Sheets("B").Range("C2").Offset(0, -1).Resize(5, 2).Value _
= Sheets("A").Range("C2").Offset(0, -1).Resize(5, 2).Value
Targetセルに貼り付ける場合、下記はエラーになる
ws2.Range(Cells(MinRow, i), Cells(MaxRow, i)).Copy
ws1.Target.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Targetの前のws1.が不要 Targetオブジェクト内にシートの情報もあるため
ws2.Range(Cells(MinRow, i), Cells(MaxRow, i)).Copy
Target.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
これでOK
スポンサーリンク