中山テック 代表の中山です。
さて、色々な現場で作業効率化やスケジュール管理のためExcelを使ってきました。
ただ、関数では対応しきれない所もあるのでその時は「VBA」を使用します。
これは「Visual Basic」というMicrosoft社のプログラミング言語をExcelで使えるようにしたものです。
今回はVBAを使ったプログラミングの基礎をご紹介したいと思います。
目次
ボタンで命令
最も簡単なボタンクリックからのVBAで制御する方法について説明します。
画面上の「下矢印」をクリックします。
「クイックアクセスツールバー」→コマンドの選択「すべてのコマンド」を押下します。
量がかなり多いですが、2つ程選択のうえ「追加」ボタンを押し、VBA編集の土台を作ります。
作られたボタンをダブルクリックします。
すると処理が書かれたエディターが出現するので、これで準備完了となります。
一度エディターを消してしまった場合は隣のボタンをクリックします。
Sub
世間一般では「プロシージャ」と呼ばれているものですが、言い換えれば「main()」と同じようなものです。
ただし、他のプログラミング言語と違うのは複数定義できる点です。
上記は単純なプログラムであり、ボタン制御しないので「マクロ」を使います。
下記画像の通り、実行できるプログラムの一覧が出てきます。
ボタンが編集モードのまま
作成したボタンをクリックしても実行されない場合は「デザインモード」になっています。
下記画像の通り、解除して実行できるようにしましょう。
また編集したい場合は同じボタンを押下してください。
- Excel(エクセル)で図形(オブジェクト)内の文字列をVBAで検索~グループ化してても検索可~
- Excel(エクセル)でプルダウンリストを作る方法~入力規則でかんたん!エラーも自動設定~
- Excel(エクセル)でワークシートが表示されない時の対処法
- Excel(エクセル)VBA入門~環境設定からif文・for文、変数など基礎構文を伝授~
- 【Excel】VBAでセルに色を塗る方法~かんたんなガントチャートを例に~
- Excel(エクセル)のフィルターで空白セルがあるとソートされない場合の対処法
- タイムカードはExcel(エクセル)で超カンタンに作れます!~労働時間管理~
構文
セルに文字を入力
早速プログラムを書いていきます。
セル制御を行う際は「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つ加算された数値になりループ終了値に達したら繰り返しが終わります。
セルの色を変える
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を勉強してみてはいかがでしょうか。