[Excel VBA] 最強の組み合わせ!マクロの記録+VBA

VBAプログラミング

 以前のブログでマクロの記録という機能を使って、自分が操作した内容をExcelに覚えさせて、実行させるということを説明したよ。

マクロで記憶した内容をVBAで活用

 マクロは便利なんだけど、それだけだと出来ることがかなり限られてしまうんだ。だけど、VBAと組み合わせればとても便利になるよ。

 たとえば、現在すでにあるデータの1行ずつに空白行を追加したいという場合、マクロで行の追加を記録するとしたら、追加する行数分全部に行挿入したものを記録しなくちゃいけないし、記録したときよりも行数が増えた場合、その増えた分はマクロだと追加してくれないよね。

 そんなときにVBAの出番!流れを簡単に説明すると、

  1. マクロの記録開始
  2. 空白行を追加したい最初の行を選択して行の挿入。

3. マクロの記録終了
4. Visual Basicを開く。(マクロで登録されたコードは、標準モジュールというフォルダの下のModule1(1以外の場合もあり)に記載されているよ)

5. この部分を少し改造して、VBAのループ処理を追加してあげる。

 5はさらっと書いたけど、ここが一番難しいところ。でもこのブログのExcel VBA Step1からStep4までを読んでいてくれれば、なんとなくイメージはつかめるかな。

 それではコードを見てみましょう。Step4のコードを少し改造すれば出来ちゃうよ。

'1行ずつ行を追加するプログラムだよ。
Sub InsertNewRows()

    '行数カウンター
    Dim RowCounter As Integer
    
    '行挿入を始めるのは3行目から
    RowCounter = 3

    '1列目が空白になるまでループ
    '3行目の1列目からチェックするよ。途中で空白があったらそこで繰り返しはおしまいになるよ。
    Do Until Cells(RowCounter, 1) = ""
    
        Rows(RowCounter).Select
        Selection.Insert Shift:=xlDown, copyOrigin:=xlFormatFromLeftOrAbove
    
        RowCounter = RowCounter + 2
    
    Loop

End Sub

まずはマクロで記録した↓のコードをコピーして、

    Rows("3:3").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Step4のコードの↓の部分を丸ごと削除して、ここに貼り付けよう。

        '株式会社が名前についていたら、セルをオレンジ。ついてなければ白
        'Instrという関数は特定の文字が含まれていたら、その文字の開始位置を返すよ。
        If InStr(1, Cells(RowCounter, 2), "株式会社") > 0 Then
            'ColorIndex = 45はオレンジを表しているよ
            Cells(RowCounter, 2).Interior.ColorIndex = 45
        Else
            'ColorIndex = 2は白を表しているよ
            Cells(RowCounter, 2).Interior.ColorIndex = 2
        End If

 あとは変えるところはたった3箇所だけ。

  1. 「RowCounter = 2」 を 「RowCounter = 3」に修正しよう。
    今回のプログラムでは3行目から行の挿入を始めるから、プログラムを開始する行を3行目からにするためだよ。
  2. 「Rows(“3:3”).Select」 を 「Rows(RowCounter).Select」に修正しよう。元々は3行目を選択して挿入だったけど、ここはプログラムで指定した行が選択されるようにするためだよ。
  3. 「RowCounter = RowCounter + 1」 を 「RowCounter = RowCounter + 2」にしよう。これは行を挿入すると、次に挿入する行はその行の2行目になるからだよ。例えば、3行目に1行空白行を追加した場合、次に行を挿入するのは5行目になるね。もしよくわからないようだったら、まずはExcelシートで手動で行挿入をしてみればわかると思うよ。

簡単でしょ?! この方法を応用すれば色んなことが出来るよ!

ボクも実際は行を挿入するためのコードは覚えているわけではないから、もし今回みたいなプログラムを作りたいときは、マクロで記憶してVBAで改造するか、Googleで「Excel VBA 行挿入」とかで検索して、コードを調べて、プログラムを作っているよ。

例えばセルに色つけて、太字にして、小数点以下を表示して。。。みたいに色々な処理を行いたいときは、それを全部調べるよりは、マクロで記録してみて、それをVBAで改造するってのが一番手っ取り早い方法だよ。

さあここまで出来ればまたキミの仕事の効率化の幅がグンと広がるよ!

改造するところは最初は難しいと思うけど、色々試してがんばってね。

[Excel VBA] 静的より動的に

コメント

タイトルとURLをコピーしました