エクセルマクロVBAでは、行を選択したり削除したりすることが多いです。
このとき使えるのがRowsです。これを自在に使えるとマクロの幅がグッと広がります。
そこで、マクロVBAで覚えておきたいROWSの使い方について、事例を使って解説をしていきます。
- VBAのROWSとは
- ROWS1|行の選択(Select)、削除(Delete)、コピー、挿入
- ROWS2|複数行の選択、削除、コピー、挿入
- ROWS3|複数行(離れた行)の削除、コピー挿入
- ROWS4|行委の幅を自動調整(autofit)
- ROWS5|変数による行の選択、削除、コピー挿入
- ROWS6|ForNextで各行をチェックし、If文で条件に合った行のみ処理
- エクセルマクロVBAのお勧め記事
VBAのROWSとは
VBAで使用されるRowsを使うと、行の選択、削除、コピー、挿入、背景色変更といったことを行うことができます。
'一般式 Rows(i).Activate '選択 Rows(i).Delete '削除 Rows(i).Hidden = True '非表示にする Rows(i).Hidden = False '表示する Rows(i).Copy 'コピー Rows(i).Insert '挿入 Rows(i).Interior.ColorIndex '背景色変更 ' i には行数を入力します
上記で示した内容をより深く理解できるように、事例を使ってRowsについて紹介していきます。
具体的には、以下の事例を解説していきます。
事例1|10行目を選択(Select)
事例2|10行目を削除(Delete)、非表示
事例3|10行目の背景色を変える
事例4|10行目をコピーして11行目に貼付
事例5|10行目に新しい行を挿入
事例6|11-15行目を複数選択
事例7|11-15行目を複数削除
事例8|11-15行目の背景色を灰色に変える
事例9|11-15行目をコピーして16-20行目に貼付
事例10|10,12,14-15行目を選択
事例11|10,12,14-15行目を削除
事例12|10,12,14-15行目の背景色を灰色に変える
事例13|autofitで10行の幅を調整
事例14|変数で指定した行を選択
事例15|変数で指定した行を削除
事例16|変数で指定した行をコピーして貼付
事例17|If文とFornext文を組み合わせて行の背景色を塗り替える
事例18|If文とFornext文を組み合わせて行削除
それでは、一つずつ紹介していきます。
ROWS1|行の選択(Select)、削除(Delete)、コピー、挿入
最初に紹介するのは、ROWSの基本となる以下の5つです。
事例2|10行目を削除(Delete)、非表示
事例3|10行目の背景色を変える
事例4|10行目をコピーして11行目に貼付
事例5|10行目に新しい行を挿入
以下でプログラムの解説をします。
事例1|10行目を選択(Select)
ROWSを使って、10行目を選択する事例です。
'事例1|10行目を選択(Select) Sub Sample1() Rows(10).Activate 'Rows(10).Select 'Activateと同じ End Sub
重要なのは、Rows(10)の部分です。この「( )」の中の数字が行数を表しています。
したがって、Rows(10)であれば10行目を、Rows(11)であれば11行目を示します。
マクロ実行前
マクロ実行後
事例2|10行目を削除(Delete)、非表示
ROWSを使って、10行目を削除する事例です。
'事例2|10行目を削除(Delete)、非表示 Sub Sample2() Rows(10).Delete ’Rows(10).Hidden = True End Sub
Rows(10)の後に「.Delete」と記載すると、行を削除できます。
また、「.Hidden = True」と記載すると、行を非表示にできます。
マクロ実行前
マクロ実行後
事例3|10行目の背景色を変える
10行目の背景色を灰色に変更します。
'事例3|10行目の背景色を変える Sub Sample3() Rows(10).Interior.ColorIndex = 15 End Sub
Rows(10)の後に「.Interior.ColorIndex=15」と記載すると、背景色を灰色に変えることができます。
このとき、右辺の15は灰色を示します。ちなみに3であれば赤、6であれば黄色のように数字によって指定される色が異なります。
マクロ実行前
マクロ実行後
事例4|10行目をコピーして11行目に貼付
ROWSを使って、10行目をコピーして11行目に貼付を行う事例です。
'事例4|10行目をコピーして11行目に貼付 Sub sample4() Rows(10).Copy Rows(11).PasteSpecial Paste:=xlPasteAll End Sub
「Rows(10).Copy」で10行目をコピーできます。
「Rows(11).PasteSpecial Paste:=xlPasteAll」で、貼り付けできます。
このとき、「Paste:=xlPasteAll」は全ての情報を貼り付けることを意味します。
全ての情報とは、フォントサイズ、文字の色、セルに含まれるメモやコメント、入力規制などです。
もし貼り付ける情報を制限したい場合は、「xlPasteValues」で値のみを、「xlPasteFormulas」で数式のみをそれぞれ貼り付けることができます。
マクロ実行前
マクロ実行後
事例5|10行目に新しい行を挿入
10行目に新しい行を挿入し、1行分下に下げます。
'事例5|10行目に行を挿入 Sub Sample5() Rows(10).Insert Shift:=xlShiftDown End Sub
「Rows(10).Insert Shift:=xlShiftDown」で、新しい行を挿入できます。
「xlShiftDown」で下に行をシフトすることを意味します。
マクロ実行前
マクロ実行後
ROWS2|複数行の選択、削除、コピー、挿入
次に複数行を処理する方法を紹介します。以下の5つです。
事例7|11-15行目を複数削除
事例8|11-15行目の背景色を灰色に変える
事例9|11-15行目をコピーして16-20行目に貼付
以下でプログラムの解説をします。
事例6|11-15行目を複数選択
11行目から15行目を選択する事例です。
'事例6|11-15行目を複数選択 Sub Sample6() Rows("11:15").Activate End Sub
「Rows("11:15").Activate」で10行目から15行目まで選択できます。
この「("a:b")」で、a行からb行まで指定できます。
マクロ実行前
マクロ実行後
事例7|11-15行目を複数削除、非表示
ROWSを使って10行目から15行目まで削除します。
'事例7|11-15行目を複数削除 Sub Sample7() Rows("11:15").Delete ’Rows("11:15").Hidden = True End Sub
「Rows("11:15").Delete」で複数行を削除できます。
また、「Rows("11:15").Hidden = True」で複数行を非表示できます。
マクロ実行前
マクロ実行後
事例8|11-15行目の背景色を灰色に変える
11行目から15行目までの背景色を灰色に変えます。
'事例8|11-15行目の背景色を灰色に変える Sub Sample8() Rows("11:15").Interior.ColorIndex = 15 End Sub
「Rows("11:15").Interior.ColorIndex = 15」で複数行を灰色を示します。
マクロ実行前
マクロ実行後
事例9|11-15行目をコピーして16-20行目に貼付
11行目から15行目をコピーして、16行目から20行目に貼付を行います。
'事例9|10-15行目をコピーして16-20行目に貼付 Sub Sample9() Rows("11:15").Copy Rows("16:20").PasteSpecial Paste:=xlPasteAll '他のワークシートに貼り付けたいときは以下 'Worksheets("Sheet2").Rows("16:20").PasteSpecial Paste:=xlPasteAll End Sub
「Rows("11:15").Copy」で複数行をコピーして、「Rows("16:20").PasteSpecial Paste:=xlPasteAll」で16行目から20行目に貼付できます。
なお、他のワークシートに貼り付けたいときは、「Worksheets("Sheet2").」を先頭に追加し、「Worksheets("Sheet2").Rows("16:20").PasteSpecial Paste:=xlPasteAll」とします。
ただし、同じワークブックの中に「Sheet2」という名称のシートを作成しておく必要があります。
マクロ実行前
マクロ実行後
ROWS3|複数行(離れた行)の削除、コピー挿入
離れた行を同時に処理する方法を紹介します。
事例11|10,12,14-15行目を削除
事例12|10,12,14-15行目の背景色を灰色に変える
以下でプログラムの解説をします。
事例10|10,12,14-15行目を選択
離れた行を複数選択するのは、Rangeを使って以下のようなプログラムを作成します。
'事例10|10,12,14-15行目を選択 Sub Sample10() Range("10:10, 12:12, 14:15").Select End Sub
重要なのは「Range("10:10, 12:12, 14:15").Select」の「("10:10, 12:12, 14:15")」の部分です。
( "行数:行数" , "行数:行数" , ・・・,"行数:行数" ) で複数行を処理することが可能です。
マクロ実行前
マクロ実行後
事例11|10,12,14-15行目を削除
10,12,14-15行目の複数行を同時に削除する事例です。
'事例11|10,12,14-15行目を削除 Sub Sample11() Range("10:10, 12:12, 14:15").Delete End Sub
「Range("10:10, 12:12, 14:15").Delete」で離れた行でも同時に削除可能です。
マクロ実行前
マクロ実行後
事例12|10,12,14-15行目の背景色を灰色に変える
10,12,14-15行目の複数行の背景色を灰色に変更します。
'事例12|10,12,14-15行目の背景色を灰色に変える Sub Sample12() Range("10:10, 12:12, 14:15").Interior.ColorIndex = 15 End Sub
「Range("10:10, 12:12, 14:15").Interior.ColorIndex」で離れた行の背景色を変更できます。
灰色以外に変更したい場合は、15以外の数字を入力してみてください。
数字と色の関係は「vba Colorindex」と検索すれば調べることが可能です。
マクロ実行前
マクロ実行後
ROWS4|行委の幅を自動調整(autofit)
Rowsを使うと行の幅を自動調整することが可能です。
以下でプログラムの解説をします。
事例13|autofitで10行の幅を調整
行の幅が大きいとき、自動調整する事例です。10行目の幅を調整します。
'事例13|autofitで10行の幅を調整 Sub Sample13() Rows(10).AutoFit End Sub
「Rows(行数).AutoFit」で対象行を調整します。
マクロ実行前
マクロ実行後
ROWS5|変数による行の選択、削除、コピー挿入
変数を使って行を操作する方法を紹介します。
事例15|変数で指定した行を削除
事例16|変数で指定した行をコピーして貼付
以下でプログラムの解説をします。
事例14|変数で指定した行を選択
変数 i を使って10行目を選択する事例です。
'事例14|変数で指定した行を選択 Sub Sample14() Dim i As Long i = 10 Rows(i).Select End Sub
「i=10」で i を10として10行目を選択します。
マクロ実行前
マクロ実行後
事例15|変数で指定した行を削除
変数 i を使って10行目を削除する事例です。
'事例15|変数で指定した行を削除 Sub Sample15() Dim i As Long i = 10 Rows(i).Delete End Sub
「i=10」で i を10として10行目を削除します。このとき、 i =11 とすれば11行目を、12とすれば12行目を削除することが可能です。
マクロ実行前
マクロ実行後
事例16|変数で指定した行をコピーして貼付
変数 i と k を使って10行目をコピーして11行目に貼付を行う事例です。
'事例16|変数で指定した行をコピーして貼付 Sub Sample16() Dim i As Long, k As Long i = 10 k = 11 Rows(i).Copy Rows(k).PasteSpecial Paste:=xlPasteAll End Sub
「i=10」としているので「Rows(i).Copy」で10行目をコピーできます。
「k=11」としているので「Rows(k).PasteSpecial Paste:=xlPasteAll」で、貼り付けできます。
マクロ実行前
マクロ実行後
ROWS6|ForNextで各行をチェックし、If文で条件に合った行のみ処理
最後に、FornextとIf文を組み合わせた事例を紹介します。これを理解できれば、実践で役立ちます。
事例18|If文とFornext文を組み合わせて行削除
以下でプログラムの解説をします。
事例17|If文とFornext文を組み合わせて行の背景色を塗り替える
1行目から20行目まで調べていき、セルA1~セルA20のそれぞれの値が2の倍数であれば、行の色を灰色に変更します。
また2の倍数でないなら、背景色を色なしに変更します。
'事例17|If文とFornext文を組み合わせて行の背景色を塗り替える Sub Sample18() Dim i As Long For i = 1 To 20 If Range("A" & i).Value Mod 2 = 0 Then Rows(i).Interior.ColorIndex = 15 Else Rows(i).Interior.ColorIndex = xlNone End If Next End Sub
5行目では2の倍数かどうか確認するために、Mod演算子を使っています。
例えば
「10 Mod 2」であれば余りは0です。2で割ると、5と余り0だからです。
一方で、「3 Mod 2」であれば、余りは1です。2で割ると、余りが1になるからです。
つまり5行目の「If i Mod 2 = 0 then」とは、2で割り切れるなら「True」で、6行目が実行されます
逆に、2で割り切れないなら「False」で、6行目が実行されません。
8行目の「Rows(i).Interior.ColorIndex = xlNone」の「xlNone」は色なしを意味します。
マクロ実行前
マクロ実行後
事例18|If文とFornext文を組み合わせて行削除
1行目から20行目まで調べていき、セルA1~セルA20のそれぞれの値が3の倍数であれば、行を削除します。
'事例18|If文とFornext文を組み合わせて行削除 Sub Sample17() Dim i As Long For i = 20 To 1 Step -1 If Range("A" & i).Value Mod 3 = 0 Then Rows(i).Delete 'Rows(i).Hidden = True '非表示にしたい場合はこちら End If Next End Sub
重要なのは4行目の「For i = 20 To 1 Step -1」です。
行を削除するマクロでは、一番下の行から処理を行って1行ずつ上に向かって処理を行います。
なぜなら1行目から処理を行うと、行削除によって順番がずれるからです。
また行を非表示にしたい場合も同様に、Fornextで下から処理を行います。
マクロ実行前
マクロ実行後
ここでは、IfやFornextとの組み合わせについて紹介しました。
IfやFornextについては、以下の記事で詳しく解説しています。
ぜひ合わせて読んでみてください。
エクセルマクロVBAのお勧め記事
以下で、エクセルマクロVBAに関するお勧め記事を紹介します。
▷エクセルマクロで出来ること
▷エクセルマクロ入門
▷エクセルマクロとは?
▷エクセルマクロの挫折しない勉強法
▷エクセルマクロの正しい学習方法
▷エクセルマクロVBAのお勧め講座
▷エクセルマクロの独学方法
▷エクセルマクロ習得者の体験談1
▷エクセルマクロ習得者の体験談2