こんにちは、理系夫婦の妻まゆみ(@rikeifufu_tsuma)です。
今までは夫たんたんがプログラミングの記事を書いていました。主にFortran、Pythonのことですね。
でも、実は私も仕事でプログラミングをしていまして。
主にC,C++,C#,Fortran,VBAを使ってツールを作ってきています。
他のSEさんからしたら、古い言語ばっかり・・・と思われるかもしれません。
私がいる部署は、某研究業界を主な顧客にしているため、古い言語を使ったツール開発の依頼が結構あるのです。
私も夫のようにプログラミングの記事を書きたいから、どの言語にしようか考えてみました。
そこで白羽の矢が立ったのが「VBA」です。
一番多くの人の役に立ちそう。そしてVBAは私でも独学で習得できた言語なので、プログラミング初心者でも始めやすい。そう思っています。
今回は、なんでVBAが役に立つのか、なぜ簡単に始められるのかを紹介します。
これからシリーズ化して、VBAで業務効率化するテクニックを紹介していく予定です!
自分の忘備録も兼ねて書いていきますね。
VBAとは
VBA(Visual Basic for Applications)は、Visual BasicをExcelなどのアプリケーションで簡易的にプログラミングできるものです。
具体的な説明は以下のサイトが分かりやすかったのでどうぞ↓
VBAとは?マクロとは?初心者向けにわかりやすくExcelVBAなどを解説|Samurai Blog
私がVBAについて説明するのは、本筋からずれるのでこれだけにしておいて、次からは何故VBAがいいのかを熱弁していきます。
なぜVBAがいいのか?
VBAのメリット・デメリットを挙げてみました。
もうね、VBAを一言でいうと、「簡単」です。
VBAのメリット
VBAを始めるメリットを思いつくままに挙げてみます。
- Excelが入っていれば、すぐに始められる
- 検索すれば情報がたくさん出てくるので独学で学べる
- ユーザー操作画面を簡単に作れる
- データ集計やグラフ作成を自動化できる
- VBAで作成したツールを、ほかのExcelを使用する人に配布できる
基本的に、日本のほとんどの会社や役所では、作業PCにはExcelが入っているのではないかと考えられます。
Excelが入っていればすぐに始められる
これが1番のメリットです。
そして、書籍での勉強やプログラミングスクールでの勉強をしなくても、Webで情報を集めるだけで、ある程度のツールは作ることができるようになります。実際に私がそうです。
VBAで処理を自動化するだけで、簡単に業務効率化が図れます。
そして、Excelはほとんどの人が持っているので、作ったツールを他の人にも使ってもらうことができます。使う側もいちいち環境整備しなくていいのです。
VBAを使いこなせるようになると、作業の効率化ができるだけでなく、転職などでも強みになると思います。単に「事務作業ができます」よりも「事務作業をVBAで効率化できます」のほうが断然魅力的ですよね。
簡単に始められて、マスターするのも難しくないのがVBAです。
VBAのデメリット
メリットばっかり書くのもダメなので、思いつくデメリットも紹介します。
- 細かい数値計算には向かないと思う
- Excelがないとできない
そもそもExcelが入っていないとVBAはできません。
そしてもう一つ、細かい数値計算に向かないのは、Excelが保持できる数値の桁数が関係してきます。Excelはセルに表示できる数値の桁数は15桁までなので、VBAでも15桁になってしまいます。他の言語(Cとか)だとdouble型は16桁ですので、1桁少ないのです。
VBAで16桁まで気にする数値計算をしようとする人はいないと思いますが、念のためデメリットにあげています。
あくまでもExcelを使った簡易的なプログラミングをするのがVBAです。
VBAの始め方(Excel2019の場合)
VBAに興味を持った方、すぐに始めてみたい方はこちらをご覧ください。始め方を説明します。
Excelの初期状態ではVBAを始めるためのタブが用意されていません。
まずはVBAをするための「開発」タブを表示されるようにし、VBA開発画面を出してみましょう。
手順は以下です。
- Excelを開く
- 「ファイル」タブを選択
- 「オプション」を選択
- 「リボンのユーザー設定」を選択
- 「開発」にチェックを入れる
- 「開発」タブを選択
- 「Visual Basic」を選択
- プロジェクトウィンドウ上で右クリック
- 「挿入」→「標準モジュール(M)」をクリック
具体的に画面で説明していきます。なお、私が使用しているのはExcel2019です。
手順1:Excelを開く →手順2:「ファイル」タブを選択
Excelを新しいブックの作成で開くと、上図の状態かと思います。
左上にある「ファイル」タブを選択しましょう。
手順3:「オプション」を選択
左側に出てきたリストの一番下、「オプション」を選択しましょう。
手順4:「リボンのユーザー設定」を選択
「オプション」選択後に出てくる画面の左側から、「リボンのユーザー設定」を選択しましょう。
手順5:「開発」にチェックを入れる
「リボンのユーザー設定」画面の右側の中から、「開発」にチェックを入れ、OKをクリックしましょう。
手順6:「開発」タブを選択→手順7:「Visual Basic」を選択
これで「開発」タブがリボンに追加されました。
VBAを始めるには、「開発」タブを選択し、一番左側の「Visual Basic」をクリックしましょう。
手順8:プロジェクトウィンドウ上で右クリック
→手順9:「挿入」→「標準モジュール」の選択
「開発」タブで「Visual Basic」を選択すると、VBA画面が別ウィンドウで表示されます。
初期状態で左側に表示されているプロジェクトウィンドウ(ファイル名やシート名がツリー状に書いてある場所)で右クリックします。
右クリックメニューの中から、「挿入」→「標準モジュール(M)」と選択しましょう。
VBAのソースコードを記述する画面が表示されました!
簡単な例
ここでは、VBAを使ったツールの例を示します。興味がある人はご覧ください。
簡単な処理しかしていませんが、基本的な処理です。
たいていの場合、今回の試作ツールの応用で業務効率化はできてしまうと思っています。
試作例
では、VBAを使った簡単な計算処理を試作してみます。
今回は、Excelのシートに入力された2つの数値を四則演算して表示する、という簡単なツールを作ってみました。
簡単な内容ですが、実際の処理は
- ボタンを関数に結び付ける
- セルの値を取得
- 計算
- 計算結果の表示
と、初めてVBAをやるにしてはボリュームが多めかもしれません。
試作したツール画面が以下です。
C2セル、C4セルに数値を入力し、「ボタン1」を配置しました。
試作ツールの実行結果です。
「ボタン1」をクリックすると、C2セルとC4セルの数値から演算した結果がメッセージボックスで表示されます。
この試作ツールの作り方を以下に書いていきます。
メイン関数とボタンの設置
まずはボタンを設置する手順です。
ボタンを設置する前に、関数の枠組みだけは作っておきましょう。
でないと、ボタン作成時にボタンと関数を紐づけできませんので。
関数は、戻り値がない関数でしたら
Sub 関数名
End Sub
で括ります。
C言語でいうところの
void main (){}
みたいな感じです。
さて、関数の枠組みだけ作ったら、Excelのシートに戻り、ボタンを設置しましょう。
「開発」タブの「挿入」から、「ボタン」を選択します。
ボタンを設置したい場所をドラッグして選ぶと、「マクロの登録」画面が表示されます。
ここで、先ほど枠組みだけ作ったメイン関数を選択して「OK」をクリックしましょう。
これでボタンが設置できました!
ソースコード
ボタンと関数の紐づけができたら、実際に関数に処理を記述していきましょう。
今回のツールのソースコードは以下のようになります。
'セルから2つの数を取り込み、四則演算をした結果を表示する関数
Sub Main()
Dim a As Double
Dim b As Double
Dim plus As Double '足し算の結果
Dim minus As Double '引き算の結果
Dim times As Double '掛け算の結果
Dim div As Double '割り算の結果
a = Range("C2").Value
b = Range("C4").Value
plus = a + b
minus = a - b
times = a * b
div = a / b
MsgBox "計算結果" + vbCrLf _
+ "a + b = " + CStr(plus) + vbCrLf _
+ "a - b = " + CStr(minus) + vbCrLf _
+ "a * b = " + CStr(times) + vbCrLf _
+ "a / b = " + CStr(div)
End Sub
注意:本当はセルの値が数値がどうかチェックしたり、bの値が0でないかチェックしないといけませんが、今回はその処理は省いています。
このソースコードの説明を以下にしていきます。
ソースコードの解説
上記ソースコードは以下の流れで書かれています。
- 変数の宣言
- セルの値を読み込む
- 四則演算
- 計算結果の表示
では、順にソースを見ていきましょう。
変数の宣言
Dim a As Double
Dim b As Double
Dim plus As Double '足し算の結果
Dim minus As Double '引き算の結果
Dim times As Double '掛け算の結果
Dim div As Double '割り算の結果
この部分で変数を宣言しています。
VBAでの変数の宣言方法は、
Dim 変数名 As データ型
となります。
変数は、入力の2つの数値a,b、そして計算結果を入れるplus,minus,times,divを宣言しました。
データ型は、すべてDouble型(少数も格納できるデータ型)にしてあります。
入力のa,bはInt型(整数のみ格納できるデータ型)にしても構いません。
セルの値を読み込む
a = Range("C2").Value
b = Range("C4").Value
この部分で、Excelシート上の2つの値を取得しています。
変数aにはC2セルの値を代入し、変数bにはC4セルの値を入れています。
今回の試作品は、シートは「Sheet1」の1つしかないので、上記のような簡単なコードで値を取得できますが、シートが複数ある場合や、Excelブックを複数開いている場合は、ブック名とシート名を指定しないと上手くいかない場合があります。
四則演算
plus = a + b
minus = a - b
times = a * b
div = a / b
この部分で変数a,bを使って計算しています。
四則演算の方法は他のプログラミング言語と一緒ですし、Excel関数で使用するものとも同じです。
計算結果を表示
MsgBox "計算結果" + vbCrLf _
+ "a + b = " + CStr(plus) + vbCrLf _
+ "a - b = " + CStr(minus) + vbCrLf _
+ "a * b = " + CStr(times) + vbCrLf _
+ "a / b = " + CStr(div)
この部分で計算結果をメッセージボックスで表示しています。
MsgBox “文字列”
でメッセージボックスが表示されます。
今回のコードには3つのポイントがあります。
①数値を文字列に変換 CStr
計算結果を表示するには、Double型から文字列型(String型)に変換する必要があります。
VBAでは、簡単に
CStr(value)
で文字列に変換できます。valueはDouble型に限らず、Int型でも大丈夫です。
②文字列の改行 vbCrLf
表示させたい文字列を途中で改行したい場合は
vbCrLf
という改行コードを挿入します。
今回の場合だと、
計算結果(改行)
a+b=##(改行)
:
となるように「vbCrLf」を挿入してあります。
③ソースの改行
今回のようにMsgBoxの文字列が長くなる場合、その文字列を1行で書くとソースコードが読みにくくなってしまいます。
そんなときには、適宜改行しましょう。
「 _」(半角スペース+アンダーバー)
で改行ができます。
これで試作ツールのソースの説明を終わります。
まとめ
ちょっと長くなったうえに試作ツールの説明まで加えてしまって、伝えたいことが伝わったか不安です。
伝えたいことは、
です。
VBAの始め方や試作ツールはおまけで、今はソースの中身が理解できなくても問題なし!です。
これからVBAのことを私なりにまとめていく予定です。
多くの人に、「VBAは案外簡単、仕事を効率化できた~」と言ってもらえるように記事を書いていきますので、よろしくお願いします!
んじゃ、また~
おススメのプログラミング独学方法はこちらの記事にまとめました!
コメント
コメント一覧 (1件)
VBAを始めました。六十五の手習いです。コボラーがどこまで肉薄できるか頑張ってみます。