Excel(エクセル)VBA入門~環境設定からif文・for文、変数など基礎構文を伝授~

中山テック 代表の中山です。

さて、色々な現場で作業効率化やスケジュール管理のためExcelを使ってきました。

ただ、関数では対応しきれない所もあるのでその時は「VBA」を使用します。

これは「Visual Basic」というMicrosoft社のプログラミング言語をExcelで使えるようにしたものです。

今回はVBAを使ったプログラミングの基礎をご紹介したいと思います。

Excel公式ページ



最も簡単なボタンクリックからのVBAで制御する方法について説明します。

画面上の「下矢印」をクリックします。

その他コマンドを押下し、ショートカットを作ります

「クイックアクセスツールバー」→コマンドの選択「すべてのコマンド」を押下します。

量がかなり多いですが、2つ程選択のうえ「追加」ボタンを押し、VBA編集の土台を作ります。

「Visual Basic Editor」「コマンドボタン」を追加
画面上部にショートカットができます。ボタンを作りたいのでボタンマークをクリック
無事ボタンが作られました!

作られたボタンをダブルクリックします。

すると処理が書かれたエディターが出現するので、これで準備完了となります。



一度エディターを消してしまった場合は隣のボタンをクリックします。

Sub

世間一般では「プロシージャ」と呼ばれているものですが、言い換えれば「main()」と同じようなものです。

ただし、他のプログラミング言語と違うのは複数定義できる点です。

セルA1に5×5の結果、セルA2には文字を表示すると仮定

上記は単純なプログラムであり、ボタン制御しないので「マクロ」を使います。

VBAプログラミングの実行、一度実行した処理を再度自動実行して使う機能をマクロと呼ぶ

下記画像の通り、実行できるプログラムの一覧が出てきます。

今回は「計算」を選ぶ
無事計算Subのみ実行されました!

ボタンが編集モードのまま

作成したボタンをクリックしても実行されない場合は「デザインモード」になっています。

下記画像の通り、解除して実行できるようにしましょう。

また編集したい場合は同じボタンを押下してください。

ボタンの名前を変えたい時などに使用する「デザインモード」


  • システム開発関連記事

構文

セルに文字を入力

早速プログラムを書いていきます。

セル制御を行う際は「Range」または「Cells」を使用します。

上記プログラムでは書き分けてますが、どっちも同じ処理が行われるので状況に応じて使い分けます。

Range("セル番号(A1とか)")
Cells(行番号,列番号)

Cellsの場合は「縦の番号」「横の番号」と覚えるとわかりやすいかもしれません。

しかし、こちらはAとかBの記号は使えないので、横が長い場合はRangeで直接セル指定するといいかもです。

そしてボタンを押下すると・・・

無事各セルに文字が表示されました!

for文(繰り返し処理)



上記のように1~10行目に同じ文字を入れたい場合のプログラムです。

forは繰り返しで1~10を指定、Cellsの1つ目の引数にiを入れることでA1~A10のセルに文字を入れます。

For 引数(iとかjとか) = ループスタート値 To ループ終了値
    ~処理~
Next 引数(iとかjとか)

Nextに引数を入れることで処理終了後、1つ加算された数値になりループ終了値に達したら繰り返しが終わります。

無事10回ループ出来ました

セルの色を変える

CellsまたはRangeの後ろに「Interior.Color」を付けます。

下記はあくまでも一例ですが、RGBで指定した色を入れます。

Cells(1, 1).Interior.Color = RGB(255, 0, 255)
Range("A1").Interior.Color = RGB(255, 0, 255)

上記画像はGreenの値を20ずつ増やして最終的に200にし、色を薄くしていくプログラムになります。

結果は普通のピンクからスタートし、最終的には薄ピンクになりました。

条件分岐(if、elseif、else)



セルA2に1~4の数値を入れます。

1が加算、2が減算、3が乗算で4が除算とします。

そして、B2とC2の数値を計算し、D2に結果を出すプログラムとなります。

構文は至ってシンプルですが、「Then」を付け忘れるとエラーとなるので注意してください。

If 条件文 Then
  処理1
ElseIf 条件文 Then
  処理2
Else
  処理3
End If
簡単なプログラムですが、簡易電卓としては優秀です

応用

様々な機能を駆使してテトリス(※未完成)を作りました。

※縦棒のみ、方向転換制御を入れておらず・・・

ちなみにDimは変数で、変動する値を格納するのに使われます(固定の場合もありますが)。

Dim 変数名 As 型
※型はInteger、String、ByVal型がよく使われます

ポイントは

1.5種類のブロックをランダムで出るようにする

2.プレイの枠を決める(はみ出さないようにする)

3.下左右に動いた時の制御(下ボタンを押したら最上+1を消し、最下+1に色を追加する)

4.他のブロックにぶつかる時に移動できなくする

5.ブロック配置後、行が揃っていたら消す&上の行を下に移動する(自己参照を活用)

6.初期配置ブロックと配置されているブロックが被ったらゲームオーバー

などなど、挙げたらキリがありません。

ひとまず縦棒のみで方向転換なしの超簡単テトリスが出来たので動画でご覧ください。



まとめ

VBA(マクロ)まで使いこなせたらExcel使ってなんでも作れる事でしょう。

関数で限界を感じている場合、是非当ブログきっかけにVBAを勉強してみてはいかがでしょうか。

※中山テックに掲載しているゲーム画像の著作権、商標権、その他知的財産権は、当該コンテンツの提供元に帰属します


おすすめの記事