公開日2021.09.22
最終更新日2022.10.05
今回はVBAをマスターしようの記事、第三回目になります。
前回まではVBEの画面や、モジュールとプロシージャなど、座学的なものを説明させていただきました。※もし興味のある方がいれば一読いただけると幸いです。
ただ、個人的には座学の知識も勿論大事ですが、それよりも自分で操作しての方が覚えられるし、現場でも活用しやすいと考えています。そこで今回から実際に少しずつVBAでコードを書いて、簡単なマクロを作っていきたいと思います。
では、どんなマクロを作るのかと言う話ですが、まずは作る際に必要となってくるセルの操作に関連する処理の説明しつつ作成していきたいと思います。ここをしっかりと覚えることができれば、バグが起こりにくく、可読性の良いマクロが作れるようになると思いますよ。
では、前置きはこのぐらいにして早速やっていきましょう。
データ入力
最初は基礎中の基礎と呼べるデータの入力から説明します。
VBEの画面を表示させましょう。
下図は『開発』⇒『マクロ』⇒『マクロ名』を入力し⇒『作成』していますが、前回説明した通り、『Alt』+『F11』でVBEを表示させてもいいですし、『開発』のマクロ横の『Visual Basic』で開いてもらっても構いません。
すると、以下の通りVBE画面が表示させると思います。
マクロ名を決めて作成を押した場合、『Sub』の後ろに名前が入っていると思います。それ以外でVBE画面を表示させた場合は、この『Sub』が作られていないと思いますので、以下の通りに入力してください。
Sub 値の入力 ()
End Sub
これで前準備的な部分は完了です。ここから実際にコードを書いていきたいと思います。
セルを指定する方法は2つあります。
・Rangeプロパティ
・Cellsプロパティ
基本的にセルの選択をするときはこの二つのどちらかを使用します。基本的に複数範囲を選択したいときはRangeプロパティを、単一のセルを選択したいときはCellsプロパティと言う風に覚えてください。最もRangeプロパティでも単一のセルを選べますが、どちらも使えるようにしないとマクロを作る際に苦労するので、どちらもしっかりマスターしておくことをお勧めします。
Rangeプロパティ
ではまずRangeプロパティで指定したセルに値を入力させたいので、以下のように記載してください。
Sub 値の入力()
Range("A2") = "あいうえお"
End Sub
これは『A2』セルに『あいうえお』と入力させる処理になります。
Rangeプロパティを使うときは以下のような形が基本となります。
Range(“指定したいセル”).Value = 指定したい内容
ここで覚えて欲しいポイントは、全部で3つになります。
・Rangeで指定したいセルを選択する時は『“”』で囲うこと
囲わないとエラーになり、処理が動きません。
ただし、以下のように範囲を指定すれば『“”』で囲わなくても動かすことができます。
Range(Cells(2, 1), Cells(2, 1)) = “あいうえお”
これは、Rangeの範囲を次に紹介するCellsプロパティで選択するという方法です。この方法は範囲を選択する際によく使う方法の一つとなるので覚えておいて損はないです。詳しくは記事の後半で説明します。
ちなみにこのコードだと同じセルを二回選択し範囲を指定しているため、『Range(“A2”) = “あいうえお”』と同じくA2セルに”あいうえお”が入力されます。
・文字列(上のあいうえお)を入力させたい場合も『“”』で囲うこと
こちらはエラーが出ずに処理は進んでしまいますが、該当セルは空白のままになります。何故空白のままでエラーも起きずに処理が進んでしまうのか。それはその文字をVBAが変数として判断してしまうためです。こちらについては、後々詳しく説明しますので、ここでは、文字列を入力させたい場合は『“”』で囲うことだけしっかり覚えてください。
・赤字の『.Value』は省略可能
Valueプロパティとはシートの1つのセルに入力されている値の情報を表すプロパティになりますが、上記画像のように省略して書いた場合自動で補ってくれるようになっています。
Cellsプロパティ
続いてCellsプロパティで指定したセルに値を入力させたいので、以下のように記載してみてください。
Sub 値の入力()
Range("A2") = "あいうえお"
Cells(3, 1) = "かきくけこ"
End Sub
このコードはA3セルに『かきくけこ』を入力させる処理です。
Rangeプロパティの時と同じく、『=』より右側は一緒になりますが、左側が変わっているのがわかると思います。Cellsプロパティでの基本的な形は以下の通りです。
Cells(行,列).Value = 指定したい内容
覚えて欲しいポイントは3つですが、うち二つはRangeプロパティの時と同じなのでその説明は省くので、新たに覚えて欲しいのは次の一つだけです。
・Cellsプロパティでセルを選択する時は『列番号』と『行番号』で選択する
Cellsプロパティでセルを選択する際は『列番号』、『行番号』で指定する必要があります。また、列番号に関してはExcel上だとアルファベット表記になっていますが、それを数字に置き換えて記載する必要があります。
例えば、C6のセルを選択したいのであれば行番号はそのまま『6』となり、CはA、B、Cとアルファベットで三番目なので『3』となります。
複数範囲を選択したい場合
では、最後にRangeプロパティ、Cellsプロパティを使って複数範囲を選択したいときのやり方について説明して、今回はここまでにしたいと思います。
方法としてはこちらも2パターンあり、Rangeプロパティだけのものと、RangeプロパティとCellsプロパティを組み合わせてやる二つの方法があります。
まずはRangeプロパティだけの場合は以下の通りです。
Sub 値の入力()
Range("A2") = "あいうえお"
Cells(3, 1) = "かきくけこ"
Range("A5:E5") = 500
End Sub
このコードはA5~E5までのセルにそれぞれ数字の500を入力するという処理です。
つまり、Rangeプロパティで複数範囲を選択したいときは、
『Range(“A5:E5”)』
赤字部分を変更することで範囲を指定してあげることができます。
また、範囲の最初と最後の間には『:』を入れるのが、複数範囲を選択するときと単一の時との違いになります。それ以外のポイントは変わらないので、複数範囲を選択するときは間に『:』を入れることを忘れないようにしてください。
RangeプロパティとCellsプロパティで選択する場合は以下のようになります。
Sub 値の入力()
Range("A2") = "あいうえお"
Cells(3, 1) = "かきくけこ"
Range("A5:E5") = 500
Range(Cells(7, 1), Cells(7, 5)) = 1000
End Sub
このコードはA7~E7までの範囲にそれぞれ数字の1000を入力する処理です。
ポイントは、Rangeプロパティの中にCellsプロパティを入れ、二つのCellsプロパティで、最初(赤文字)と最後(緑文字)の範囲を指定することで、その間の範囲を選択している点になります。
『Range(Cells(7, 1), Cells(7, 5))』
どちらを使っても問題はないので、正直自分が覚えやすい、使いやすいと思った方を使っていって問題ありません。ただ、使わない方でも方法だけは頭に入れておくと、マクロを組んでてエラーを吐き続けるなど、不測の事態に陥った際などに対応しやすくなります。※筆者の経験談です。
今回はここまでになります。VBAを使うと言っておきながら、説明が多くなってすいません、、、
Range、Cellsはマクロを作る上で100%使用するものなので、どうしても理解して欲しいと思い書いた結果こうなりました。
次回はその他、セルの操作関連(文字・罫線)などについて説明して、その次の回でこれまで説明させていただいた範囲で表のマクロを作成する説明をさせていただこうと思います。
※少なくとも今回よりはコードを書くことが多くなるかと、、、
では、また、ありがとうございました。