パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

マクロVBAのROWSで行操作する事例18|行の選択,削除,非表示,コピー,挿入

f:id:gene320:20190120035439j:plain

エクセルマクロVBAでは、行を選択したり削除したりすることが多いです。

このとき使えるのがRowsです。これを自在に使えるとマクロの幅がグッと広がります。

そこで、マクロVBAで覚えておきたいROWSの使い方について、事例を使って解説をしていきます。

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について紹介していきます。

具体的には、以下の事例を解説していきます。

●記事で紹介する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つです。

事例1|10行目を選択(Select)
事例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行目を示します。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120021807j:plain

事例2|10行目を削除(Delete)、非表示

ROWSを使って、10行目を削除する事例です。

'事例2|10行目を削除(Delete)、非表示
Sub Sample2()
    Rows(10).Delete
    ’Rows(10).Hidden = True
End Sub

Rows(10)の後に「.Delete」と記載すると、行を削除できます。

また、「.Hidden = True」と記載すると、行を非表示にできます。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120022040j:plain

事例3|10行目の背景色を変える

10行目の背景色を灰色に変更します。

'事例3|10行目の背景色を変える
Sub Sample3()
    Rows(10).Interior.ColorIndex = 15
End Sub

Rows(10)の後に「.Interior.ColorIndex=15」と記載すると、背景色を灰色に変えることができます。

このとき、右辺の15は灰色を示します。ちなみに3であれば赤、6であれば黄色のように数字によって指定される色が異なります。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120022342j:plain

事例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」で数式のみをそれぞれ貼り付けることができます。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120023112j:plain

事例5|10行目に新しい行を挿入

10行目に新しい行を挿入し、1行分下に下げます。

'事例5|10行目に行を挿入
Sub Sample5()
    Rows(10).Insert Shift:=xlShiftDown
End Sub

「Rows(10).Insert Shift:=xlShiftDown」で、新しい行を挿入できます。

「xlShiftDown」で下に行をシフトすることを意味します。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120023456j:plain

ROWS2|複数行の選択、削除、コピー、挿入

次に複数行を処理する方法を紹介します。以下の5つです。

事例6|11-15行目を複数選択
事例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行まで指定できます。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120024048j:plain

事例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」で複数行を非表示できます。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120024308j:plain

事例8|11-15行目の背景色を灰色に変える

11行目から15行目までの背景色を灰色に変えます。

'事例8|11-15行目の背景色を灰色に変える
Sub Sample8()
    Rows("11:15").Interior.ColorIndex = 15
End Sub

「Rows("11:15").Interior.ColorIndex = 15」で複数行を灰色を示します。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120024514j:plain

事例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」という名称のシートを作成しておく必要があります。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120024746j:plain

ROWS3|複数行(離れた行)の削除、コピー挿入

離れた行を同時に処理する方法を紹介します。

事例10|10,12,14-15行目を選択
事例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")」の部分です。

( "行数:行数" , "行数:行数" , ・・・,"行数:行数" ) で複数行を処理することが可能です。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120025810j:plain

事例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」で離れた行でも同時に削除可能です。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120030121j:plain

事例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」と検索すれば調べることが可能です。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120030404j:plain

ROWS4|行委の幅を自動調整(autofit)

Rowsを使うと行の幅を自動調整することが可能です。

事例13|autofitで10行の幅を調整

以下でプログラムの解説をします。

事例13|autofitで10行の幅を調整

行の幅が大きいとき、自動調整する事例です。10行目の幅を調整します。

'事例13|autofitで10行の幅を調整
Sub Sample13()
    Rows(10).AutoFit
End Sub

「Rows(行数).AutoFit」で対象行を調整します。

マクロ実行前

f:id:gene320:20190120031106j:plain

マクロ実行後

f:id:gene320:20190120031352j:plain

ROWS5|変数による行の選択、削除、コピー挿入

変数を使って行を操作する方法を紹介します。

事例14|変数で指定した行を選択
事例15|変数で指定した行を削除
事例16|変数で指定した行をコピーして貼付

以下でプログラムの解説をします。

事例14|変数で指定した行を選択

変数 i を使って10行目を選択する事例です。

'事例14|変数で指定した行を選択
Sub Sample14()
    Dim i As Long
    i = 10
    Rows(i).Select
End Sub

「i=10」で i を10として10行目を選択します。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120021807j:plain

事例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行目を削除することが可能です。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120022040j:plain

事例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」で、貼り付けできます。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120023112j:plain

ROWS6|ForNextで各行をチェックし、If文で条件に合った行のみ処理

最後に、FornextとIf文を組み合わせた事例を紹介します。これを理解できれば、実践で役立ちます。

事例17|If文とFornext文を組み合わせて行の背景色を塗り替える
事例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演算子を使っています。

補足|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」は色なしを意味します。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120033501j:plain

事例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で下から処理を行います。

マクロ実行前

f:id:gene320:20190120031406j:plain

マクロ実行後

f:id:gene320:20190120034649j:plain

ここでは、IfやFornextとの組み合わせについて紹介しました。

IfやFornextについては、以下の記事で詳しく解説しています。

ぜひ合わせて読んでみてください。

www.fastclassinfo.com

www.fastclassinfo.com

エクセルマクロVBAのお勧め記事

以下で、エクセルマクロVBAに関するお勧め記事を紹介します。

▷エクセルマクロで出来ること
▷エクセルマクロ入門
▷エクセルマクロとは?
▷エクセルマクロの挫折しない勉強法
▷エクセルマクロの正しい学習方法
▷エクセルマクロVBAのお勧め講座
▷エクセルマクロの独学方法
▷エクセルマクロ習得者の体験談1
▷エクセルマクロ習得者の体験談2