thumb

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

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

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

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

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

Excel公式ページ

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

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

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

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

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

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

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

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

blog-20221129-05

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

blog-20221129-06

Sub

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

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

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

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

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

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

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

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

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

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

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

blog-20221129-11
ボタンの名前を変えたい時などに使用する「デザインモード」
  • Excel関連記事(記事はまだまだ続きます)

構文

セルに文字を入力

blog-20221129-12

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

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

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

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

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

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

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

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

for文(繰り返し処理)

blog-20221129-14

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

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

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

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

blog-20221129-15
無事10回ループ出来ました

セルの色を変える

blog-20221129-16

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にし、色を薄くしていくプログラムになります。

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

blog-20221129-17

条件分岐(if、elseif、else)

blog-20221129-18

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

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

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

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

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

応用

blog-20221129-20

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

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

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

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

ポイントは

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

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

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

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

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

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

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

ひとまず縦棒のみで方向転換なしの超簡単テトリスが出来ました!

まとめ

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

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

おすすめの記事