【超初心者向け】Excelでマクロを使う準備まとめ
「VBA(マクロ)をやってみたいけど、何から始めればいいか分からない」
そんな方に向けた、いちばん最初の記事です。
この記事では、コードを書く前に必要な準備だけを説明します。
難しいことは一切言いません。真似していけばOK!
私がVBAを始めた時なんどもつまづいてた部分をまとめてわかりやすくします!
VBAって何?何ができる?
VBA(Visual Basic for Applications≒マクロ)は、Excelの操作を自動化するための仕組みです。
関数に似てるところもあるし、全然違うところもありますが、
ただExcel関数とVBA、習得難易度はほぼ一緒だと私は思います。
やり方さえわかればどんどん複雑なこともできるようになりますよ!
何ができるの?
・同じ作業をまとめて実行する(繰り返しのコピペや同じシートが何個もある場合など)
・ボタン1つで処理をする(プログラムの起動はいろんな種類のボタンやアクションからできます)
・ミスを減らす(ヒューマンエラーはなくなります)
といったことができるようになります。
日々の業務でルーティン化しているものなど規則性がある作業はVBAが得意としているところです!プログラム一つで作業時間が1時間→5秒なんてこともざらにあります。
開発タブを表示する(最重要)
最初に「開発」タブを表示します。
- Excelを開く
- 「ファイル」→「オプション」
- 「リボンのユーザー設定」
- 「開発」にチェックを入れる
- 「OK」をクリック
開発にチェックを入れると開発タブがでてきます。
マクロの保存形式を知る
VBAを使うExcelファイルは、
通常の「.xlsx」では保存できません。
マクロを使う場合は、
「Excelマクロ有効ブック(.xlsm)」で保存します。
保存形式が違うだけで、コードが消えてしまうこともあるので注意しましょう。
VBAエディタを開いてみる
VBAを書く画面を開いてみます。
・「開発」タブ →「Visual Basic」
・または Alt + F11
これで、VBAエディタが表示されます。
左上にある「プロジェクト」画面はブックの構成が見れるところです。
VBA Project(Book1(ブック名))
↳Microsoft Excel Objects
※オブジェクトとはブック、シート、など構成されている『部品』みたいなものです
↳Sheet1(Sheet1(シート名))
↳ThisWorkbook(このワークブック)
この下の空欄の部分で右クリック→挿入→標準モジュール
で、標準モジュールのModule1を作成します。
この黄色で囲まれている部分が標準モジュールの「Module1」のプログラムを書く場所です。
プログラムのルール
ルール1:最初と最後に書く文句
Sub ここにプログラムのタイトルを入れる()
’ここで処理
End Sub・Sub ○○(プログラムのタイトル、わかりやすいのがいい) ()⇐かっこの中身はなし、意味は考えなくてOK
・End Sub(〆の文句、End~はいろいろ登場してくるので仲間が多いことだけ覚えといてください)
ルール2:ブック名、シート名を変数に入れる
これはやる癖をつけておくと後々エラーを起こしづらくする方法です。
オブジェクトを変数に入れる時はDimで変数を宣言⇒Setでオブジェクトを指定します
Dim 変数名 as オブジェクト名
Set 変数名 = オブジェクトの指定
???…なんて?
変数とは任意の名前(好きな名前でOK)の箱みたいなものと考えてください。
わかりやすく名前のついた箱にブック名やシート名を入れて(Setする)、
どのブックのどのシートかを指定するときなどに使います。
変数に入れなくてもできますが、ヒューマンエラーが起きやすいので変数に入れるのをオススメします。
変数に入れるとなにがいいの?
A1に色をつけたいとします
変数に入れない場合
ThisWorkbook.Worksheets("このシート").Range("A1").Interior.Color = vbYellow ’A1の背景を黄色に塗るThisWorkbook.Worksheets(“このシート").Range(“A1")で
実行してるワークブック内の「このシート」というシートの「A1」セルを指定します。
メリット
・書く量が少ない
・一発で何をしているか分かりやすい
・短い処理ならラク
デメリット
・同じ指定を何度も書くとミスしやすい
・名前変更に弱い
・処理が長くなると読みにくい
変数に入れる場合
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("このシート")
ws.Range("A1").Interior.Color = vbYellow ’A1の背景を黄色に塗るえ…プログラムが長くなってるじゃん…って思うかもしれません。
が、プログラムが長くなればなるほど効いてきます。
ws.Range(“A1")で
実行してるワークブック内の「このシート」というシートの「A1」セルを指定します。
例えば今回はA1セルの色を変えるだけでしたが、A4セルもC1セルもとなると何回も場所を指定しないといけないので
変数に入れない場合は下記のように書きます。
ThisWorkbook.Worksheets("このシート").Range("A1").Interior.Color = vbYellow ’A1の背景を黄色に塗る
ThisWorkbook.Worksheets("このシート").Range("A4").Interior.Color = vbYellow ’A4の背景を黄色に塗る
ThisWorkbook.Worksheets("このシート").Range("C1").Interior.Color = vbYellow ’A1の背景を黄色に塗る変数にいれると下記のようにまとめることが可能です。
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Range("A1").Interior.Color = vbYellow ’A1の背景を黄色に塗る
ws.Range("A4").Interior.Color = vbYellow ’A4の背景を黄色に塗る
ws.Range("C1").Interior.Color = vbYellow ’C1の背景を黄色に塗るメリット
・同じシートを何度も使える
・コードが読みやすくなる
・修正が1か所で済む
・バグが減る
デメリット
・最初は行数が増える
・「Set」が分かりにくい
変数は後からいろいろでてきますが、とりあえずワークブックとワークシートをSetすればOKです
ワークブック、ワークシートのSetのルール
ワークブックの場合(変数名:wb)
| ワークブックの種類 | 変数の宣言 | Set方法 | 備考 |
|---|---|---|---|
| プログラムが入っているワークブック | Dim wb As Workbook | Set wb= ThisWorkbook | マクロが保存されているExcelファイルのこと。 他のブックを開いてもかわらないため安定している。 |
| 今、画面を操作しているワークブック | Dim wb As Workbook | Set wb= ActiveWorkbook | 今アクティブ(選択中)のブック。 クリックや切り替えで変わるので不安定である。 |
※wbは任意の変数
ワークシートの場合(変数名:ws)
| ワークシートの種類 | 変数の宣言 | Set方法 | 備考 |
|---|---|---|---|
| 左からn番目にあるシート | Dim ws As Worksheet | Set ws=Worksheets(n) | nは数字を入力 Worksheetsにする |
| ワークシート名で指定 | Dim ws As Worksheet | Set ws=Worksheets(“このシート") | “このシート"にシート名を入力(“"で囲む) Worksheetsにする |
| 今、画面を操作しているワークシート | Dim ws As Worksheet | Set ws = ActiveSheet | 今アクティブ(選択中)のシート。 クリックや切り替えで変わるので不安定である。 |
※wsは任意の変数
プログラムを書いてみる
では以上を踏まえて簡単なプログラムを書いてみます。
セルA1~A3に文字を入れていきます。
セルを指定するときは
Worksheet名.Range(“A1")
のようにRange(“")でセル名を囲みます。
(なんで""がいるかは割愛します)
そして
指定したセル="入れたい文字"
で文字が入ります。
Sub はじめの一歩()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")
ws.Range("A1") = "これで"
ws.Range("A2") = "あなたも"
ws.Range("A3") = "プログラマー"
End Sub実行してみる
プログラムを保存してExcelに戻ります。
開発→マクロを選ぶとプログラムの一覧がでてきます。
任意のマクロ名を選び実行を押します。
プログラムが実行され、A1~A3に文字が入力されました。