
つかえるExcelマクロ[マクロルーティン#23](絞り込まずに指定のシートにまとめる!)変数と実行後の状態を考える。
この記事ではマクロルーティン#23(絞り込まずに指定のシートにまとめる!)とマクロルーティン#24(全行確認して指定のシートにまとめる!)の2つの記事で解説したマクロを自分以外の人でも使えるように追加した親切なコードをご紹介しています。前回の解説と併せて復習いただけると理解が深まります。
関連動画<【マクロルーティン14】必要なデータだけ集めたシートをつくる!>
◆動作のイメージ
★フィルタを使わずに別のシートに種類が「美容」の行だけをまとめます。
↓↓フィルタを使ってやる簡単バージョンはこちら
マクロルーティン#16(指定のシートにまとめる)
マクロルーティン#17(指定のシートにまとめる)続き
◆今回ご紹介するマクロ
前回のマクロに追加したコードが黄色の個所です。
◆解説の前に、変数宣言について
自分以外の人が使うマクロを作成する場合、変数宣言を強制して書くことで、いろんなミスを防げたり、エラーが出たときに修正箇所が早めにわかったりします。
ですが、自分だけが使うマクロだったり、今回ご紹介するような短いマクロの場合はそんなに変数宣言を書くことにこだわらなくてもいいと思います。
もしくは、
Dim i As Long ➡ Dim i
Dim j As Long ➡ Dim j
のように書いても変数宣言してることになりますよ。
マクロを書くことに慣れてくるとだんだん変数宣言を書きたくなったり、書かざるを得ない状況が来ますのでその時に覚えるといいと思います。
◆解説
Dim i As Long
Dim j As Long
①Worksheets("記録").Rows(1).Copy Worksheets("美容").Rows(1)
➎j = 2
➏For i = 2 To 10
➊If Worksheets("記録").Range("B" & i).Value = "美容" Then
➋Worksheets("記録").Rows(i).Copy
➌Worksheets("美容").Rows(j).PasteSpecial
➍j = j + 1
➊End If
➏Next
②Application.CutCopyMode = False
③Worksheets("美容").Select
④Worksheets("美容").Range("A1").Select
----------------------------------------------------------------------------
①Worksheets("記録").Rows(1).Copy Worksheets("美容").Rows(1)
→項目名をまとめ先のシートにコピペします。
➊If Worksheets("記録").Range("B" & i).Value = "美容" Then
→記録シートの「B列 i 行目」の値が"美容"なら
➋Worksheets("記録").Rows(i).Copy
→記録シートの「 i 」行をコピーする
➌Worksheets("美容").Rows(j).PasteSpecial
→(そして)美容シートの「 j 」行に貼り付ける
(★記録シートでの行は「i」、美容シートでの行は「j」のように変数を分けて考えることがポイントです。)
➍j = j + 1
→j行に1足して次の行番号を入れておく
(jは常に貼り付ける行番号にしてスタンバイしておくから。)
この理論で、一番初めには初期値を入れておくため
➎j = 2 を設定しておく。
そして変数「 i 」を2行目から10行目まで変動させたいので、For Nextで➊から➍までを囲います。
➏For i = 2 To 10
(➊~➍)
➏Next
ここまでの●黒丸番号は
マクロルーティン#23(絞り込まずに指定のシートにまとめる!)と
マクロルーティン#24(全行確認して指定のシートにまとめる!)
で解説した内容です。
②Application.CutCopyMode = False
選択コピーの解除
③Worksheets("美容").Select
→美容シートを選択
④Worksheets("美容").Range("A1").Select
→A1セルを選択した状態で終了。
以上です。
他の人に使ってもらえるマクロを書くときには実行後の状態を考えて書くと親切・丁寧ですね。