[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA 最終行を取る際に解決できないこと』(AAbb)
現在、"名簿"のシートからオートフィルタをかけ別のシート"Sheet2"にコピペをするマクロを作成中です。
B列に文字列"****"(仮)でフィルタをかけて、そこから4つの項目(列)をコピーし、"Sheet2"に貼り付けたいです。
そのため以下のようなマクロを作成しましたが、一つ問題が発生しその対処ができず困っています。
Sub ****()
With Sheets("名簿").Range("A1") .AutoFilter 2, "****" Range(Range("C2"), Cells(Rows.Count, 3).End(xlUp)).Copy _ Sheets("Sheet2").Cells(Rows.Count, 2).End(xlUp).Offset(0, 0) Range(Range("D2"), Cells(Rows.Count, 4).End(xlUp)).Copy _ Sheets("Sheet2").Cells(Rows.Count, 3).End(xlUp).Offset(0, 0) Range(Range("G2"), Cells(Rows.Count, 7).End(xlUp)).Copy _ Sheets("Sheet2").Cells(Rows.Count, 4).End(xlUp).Offset(0, 0) Range(Range("K2"), Cells(Rows.Count, 11).End(xlUp)).Copy _ Sheets("Sheet2").Cells(Rows.Count, 5).End(xlUp).Offset(0, 0) .AutoFilter
End With
End Sub
問題の内容は以下の通りです。
C,D列には必ず値が入っているので問題ないですが、G,K列は必ず値が入るとは限らず場合によってはオートフィルタをかけた時全てが空白になることもあります。
(言い忘れていましたが、1行目には項目名が入っています。)
もしそうなった場合、現在記述しているVBAでは、G2〜G列の最終行までの範囲をコピーするので、Gの1行目がコピーされてしまいます。
このようなことが起こらないようにしたいです。
原因はわかっているのですが、どうすればいいか分からず困っています。
お力を貸していただけると嬉しいです。
マクロは初心者なので、説明等至らないところもあると思います。
申し訳ありません。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
成功するなら、同じ悩みを持った方の参考になるでしょうし、失敗するなら何故うまく行かないのか説明してもらえるかもしれません。
また、別案という形でアイデア提供があるかもしれません。
■2
ちょっと確認ですが↓は何をしたいのですか?
.Offset(0, 0)
■3
1列ずつコピーせずとも、オートフィルタで抽出されている範囲のうち、C,D,G,K列を一括コピーして、出力したいセル【1つ】に貼り付ければ事足りませんか?
オートフィルタが設定されている範囲は↓で取得可能です。
シートオブジェクト.AutoFilter.Range
そのうち、C,D,G,K列をコピーして、貼り付けたいならIntersectメソッドを使えば↓のように記述できます。
With ActiveSheet Intersect(.AutoFilter.Range, .Range("C:D,G:G,K:K")).Copy 貼付先のセル End With
項目行が要らない場合は、それこそOffset(1, 0)すればよいですし・・・
(もこな2) 2021/02/05(金) 19:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.