Excel VBAに手を出してみる-その3

続き。スクリプト言語なのでどんどん試せて楽しい。

MsgBox内での改行と、アイコンの表示

MsgBoxの使い方はMsgBox関数を参考にした。これまで別々に行っていた最終行、最終列の表示をまとめることにした。それに併せてMsgBox内での改行とアイコン表示も練習することにした。

コード
MsgBox "最終行は" & LastRow & "で" & vbCrLf & "最終列は" & LastColumn & "です", vbInformation
結果

説明

改行コードはvbCrLfで、&で繋げば良いだけ。またアイコン表示はbuttons引数とかいうものに所望の引数を入れれば良いだけ。今回はvbInformationにしたが、他にも色々ある。

計算開始ボタンを作成したい

これまでVBEのデバッグ用実行ボタンで動作を確認していたが、スプレッドシート上に計算開始ボタンを作ってここから実行出来るようにしたい。ボタンの設置は通常のExcelシートの開発タブ>挿入>ActiveX>ボタンから行うらしい。フォームコントロールとActiveXの違いはコントロールの種類で紹介されていた。決定的な違いがよく分からないが、ActiveXの方が高機能らしいので今はそちらを使っておくことにする。取り敢えずボタンを作ったらCommandButton21とかいうのができた。右クリックでコードの表示を実行すると、VBEが起動した。

中身はこれ。ここにボタン押下時の振る舞いを記載するらしい。このコードはプロジェクトツリーの標準モジュールには無く、Microsoft Excel Objectカテゴリのこのボタンを設置したシートに記載されていた。

これまで作った処理(モジュール1のHazimete_program)を実行するように記載。なんと、プロシージャ名に()を付けないらしい。これは違和感がすごい。

Excelシートに戻って、ボタンを押しても実行されない…と思ったらデザインモードを切る必要があったらしい。切ったら実行できた。

ボタンの名前とかフォント、その他もろもろはボタンを右クリック>プロパティから変更できた。

計算方法を2種類から選択できるようにしたい

計算実行ボタンを2種類作れば良いが、それはカッコ悪いので計算実行を押してから計算方法を選択できるようにしたい。ラジオボタンで選べたらベスト。

取り敢えずユーザーフォームを作る

シートに初めからあるフォームではなくて、何かしらのトリガーを受けて起動するフォームはVBE>挿入>ユーザーフォームから作る。VBAProjectにフォームとか言うディレクトリが追加された。

計算方法1、2のラジオボタン、テキストボックス、計算実行ボタン、キャンセルボタンを置いた。ラベルとテキストボックスの違いがよく分からなかったため画像ではテキストボックスを置いているが、結局ラベルにした。ラベルは単に文字を表示するためのもので、テキストボックスはユーザーからの入力を受け付けるためのもの。記載された数値等を取得して操作に反映する場合に使用する。

各要素の名前とかフォント、その他もろもろはスプレッドシート上に置いたボタンと同じく右クリック>プロパティから変更できた。

ユーザーフォームを表示するSubプロシージャを作成

スプレッドシート上のボタンを押してユーザーフォームを立ち上げるので、ボタンに渡すSubプロシージャが必要。ユーザーフォームを表示するにはユーザーフォームオブジェクトのメンバのShowメソッドを使用するらしい。構文は「UserFrom.Show [Modal]」で、引数ModalにはvbModal(モーダル:デフォルト)かvbModeless(モードレス)が選択できる。これは、ユーザーフォーム起動中に裏のスプレッドシートを操作できるか否かということで、今回は操作できない設定(vbModal)にした。

コード
Sub myform1()
    UserForm1.Show vbModal
End Sub
スプレッドシートにユーザーフォームを呼び出すボタンを作成し、「myform1」を紐付ける

今回は既に置いてある「計算実行」ボタンをユーザーフォーム呼び出しに置き換える(そしてユーザーフォームに設置した計算実行ボタンで計算プロシージャを呼び出す)。よって計算実行ボタンで実行するプロシージャをmyform1とした。