かっきぃーの雑記帳

おもしろき こともなき世に おもしろく

定型作業を効率よく実行する仕組みづくり!エクセルVBAマクロを学ぶシリーズ

定型作業を効率よくこなすには、仕組みづくりが大切。

エクセル( Microsoft Excel )にはVBAマクロと呼ばれるカスタマイズ機能があります。この機能を使うことによって「繰り返し行っていた定型的な操作の自動化」「複雑な数式や関数による数値処理や分析」などなどがボタン一つで実行でき、手間や時間を大幅に削減することができます。また、「ユーザーフォームの導入」により、データ入力の間違いを減らすことも可能になりますし、「お役立ち機能の制作」、さらには「数値シミュレーション」など本格的なプログラムもできます

こんなエクセルVBAマクロですが、大きな利点はエクセルのひとつの機能ということです。プログラミング言語には、C言語等いろいろありますが、職場によっては、業務用のパソコンでの利用が制限されているケースが多いと思います。また、家庭用のパソコンでもエクセルなら気軽に使えます。特別な環境を作らなくても、プログラミングできる点が大きな利点です。

スポンサーリンク

 

 

まずは「とりあえず使える」状態を目指す!【Step1】

こんな便利なエクセルVBAマクロですが、使える構文(いわゆる文法)は600を超えるほど多数存在し、それらを説明した書籍やウェブページは数多く存在します。いろんなことができるのはよいのですが、それだけハードルを高く感じたり、聞きなれないカタカナ語も多く途中で挫折する人も多いと聞きます。

そこでまず、プログラミングの経験がなくても「とりあえず使える」状態を目指すことをコンセプトとし、基本的なことに絞って講義形式で紹介したのが、次の2つです。

とりあえず使えるエクセルVBAマクロ超入門

エクセルVBA

準備編 マクロ機能を有効にする
Lesson1 マクロの作り方 基礎の基礎
Lesson2 これだけは覚えておく基本構文
Lesson3 マクロ実行でエラーが発生

 

とりあえず使えるエクセルユーザーフォーム超入門

エクセルユーザーフォーム

Lesson1 ユーザーフォーム 初めの第一歩
Lesson2 ユーザーフォームの作り方
Lesson3 これだけは覚えておきたい基本機能
Lesson4 使えるようになりたい基本機能
Lesson5 幅が広がる応用機能

 

スポンサーリンク

 

 

動画で雰囲気をつかみ、作りながら学ぶ!【Step2】

Step1の講義形式では、ひと通りのことはできるようになったはずです。ただ、じゃあ、実際に作ってみましょう、となると具体的なイメージが湧かないことも多いと思います。そこで作っているところを動画コンテンツにすることにしました。それがStep2です。

(1)基本的なエッセンスが満載!抽選器マシーンをつくってみる。

・セルを参照するRangeオブジェクト
・指定のセル範囲からずらすOffsetプロパティ
・For文を抜け出すExit For
・0以上1未満の乱数を生むRnd関数
・マクロの実行を一旦停止Stopステートメント
・数値を切り上げるRoundUp関数
・処理中断時間をコントロールWaitメソッド

 

(2)音を奏でるExcelマクロ(抽選器マシーンシリーズ機能追加①)

・音声ファイルを再生するPlaySound関数
・ドレミファソラシド音を発生BeepAPI

 

(3)100回の繰り返しをボタンひとつで一気に実行!(抽選器マシーンシリーズ機能追加②)

・PlaySound関数の同期再生と非同期再生
・パブリック変数として定義する
・「塗りつぶしパターン」で処理を分岐
・あとは工夫と試行錯誤!

 

(4)魅惑のユーザーフォーム!アラーム鳴動マシーンをつくる。

・ユーザーフォームの基本デザインをつくる
・ユーザーフォームの処理マクロをつくる
・設定時刻になったらアラーム音を鳴らす

 

このように、
■知識の習得(基礎)【Step1】
 ↓
■自分でやってみる(実践)【Step2】
 ↓
■調べて当てはめてみる(発展)
この流れを繰り返すことで少しずつできる範囲が広がっていくものと思います。

作りながら学ぶおススメの方法は、ひと通り動画をみたら、いったん動画を閉じて、自分なりに作ってみる方法です。
書き方は違っても目的が達成できていれば、それでヨシ。ときどき途中状況を確認し、比べることで問題の有無を確認するとよいです。

スポンサーリンク

 

 

エクセルマクロを使えるシーンはたくさんある。

私自身、プログラムについては体系的に学んできたわけではないのですが、仕事の先輩などのマクロを見よう見まねで始め、あとはGoogle検索を駆使し、いろいろとやってきました。

エクセルマクロについても、ネットにはたくさんの情報がありますので、「こんなことできそうだなー」と思って調べてみると、だいたいが何とかなります。書いてあることが、理解できないことも多いですが、試しに小さなプログラムを作って試してみると理解ができることもあります。理解ができなくても、「思ったアウトプットが出たからこれでいっかー」とやり過ごすこともあります。

そんな感じで早20年。なんとかアウトプットは出せてこれたかと思います。みなさんもぜひ、お試しください。

 

すぐに使えるエクセル・マクロ集

これまで作ってきた中で、パッケージとして残しておきたいものをまとめました。

k-create.hatenadiary.com

k-create.hatenadiary.com

k-create.hatenadiary.com

 

スポンサーリンク

 


今週のお題「おうち時間2021」

作りながら学ぶ!エクセルVBAマクロ超入門(4) 魅惑のユーザーフォーム!アラーム鳴動マシーンをつくる。

エクセルVBAマクロ超入門の作りながら学ぶシリーズ第4弾のテーマは

「直感的な入力操作が可能になるユーザーフォーム」

テキストボックスやコマンドボタンなどを自由に配置し、視認性・操作性に優れた表示機能「ユーザーフォーム」を使って、決まった時間に音声ファイルを繰り返し再生するアラーム鳴動マシーンを作りました。

あー、それ作ってみたかったやつー!

魅惑のユーザーフォーム!

スポンサーリンク

 

 

ユーザーフォームの基本デザイン

エクセルVBA ユーザーフォームデザイン

ユーザーフォームデザイン

今回つくったユーザーフォームの基本デザインはこちら。

ユーザーフォームにそれぞれのツールを配置していき、機能を与えていきます。そのあと、アラーム音声を再生するコア・マクロを作り、統合していく流れで作っていきました。 

 

アラーム鳴動マシーンをつくるプロセス

アラーム鳴動マシーンをつくっていく様子を動画にまとめましたので、のちほど紹介しますが、ここではその流れを紹介します。

タイムラインは動画の概要欄にありますので、興味あるところだけでも見ていただければと思います。

1.ユーザーフォームの基本デザインをつくる

  • 新規ユーザーフォームの挿入(UserForm)
  • コマンドボタンの配置(CommandButton)
  • ラベルの配置(Label)
  • テキストボックス・スピンボタンの配置(TextBox、SpinButton)
  • トグルボタンの配置(ToggleButton)
  • エクセルシートからユーザーフォームを呼び出す

2.ユーザーフォームの処理マクロをつくる

  • コマンドボタンの処理(CommandButton)
  • ラベルの処理(Label)

「ユーザーフォームが実行されたときに処理をするマクロ(UserForm_Activate)」「リアルタイムに表示が変化するラベル(Do While Loopステートメント/DoEvents関数)」ということもやっています!

  • ユーザーフォームの初期設定(UserForm_Initialize)
  • スピンボタンの処理(SpinButton)
  • テキストボックスの入力制限(TextBox)
  • トグルボタンの処理(ToggleButton)

3.設定時刻になったらアラーム音を鳴らす

  • 音声ファイルの再生(PlaySound関数)
  • 音声ファイルの停止(PlaySound関数)
  • 設定時刻になったらアラームを鳴らす♪
  • グローバル変数の定義(Public)
  • 条件によって表示/非表示が変わるコマンドボタンを仕込む(CommandButton)

条件によって表示/非表示が変わるってところ好きです。

 

アラーム鳴動マシーンを作り上げていく動画コンテンツ


www.youtube.com

 

見て真似るだけで作れます。まずは真似て作ってみて、ひととおり作ってみたらオリジナルの機能を盛り込んでみるのがおススメです。

二度寝するので、スヌーズ機能が欲しいなあ。

気分に応じて、アラームのメロディを選択したい!

とりあえず、 エクセルVBAマクロ超入門「作りながら学ぶ!シリーズ」はこの辺で一区切り。講義形式でひとつひとつ学んでいくなら、次の関連記事を読んでいただくのもよいかと思います。

 

 

スポンサーリンク

 


作りながら学ぶ!エクセルVBAマクロ超入門(3) 100回の繰り返しをボタンひとつで一気に実行!(抽選器マシーンシリーズ機能追加②)

さて、実践!エクセルVBAマクロ超入門「抽選器マシーンシリーズ」も第3弾。今回は、

  • 当選結果の自動記録
  • 複数の抽選を連続実行
  • スペシャルな賞は特別なファファにメロディー変更
  • 100回の抽選でも1000回の抽選でもボタンひとつで一気に実行

あたりを機能追加しました。

 


実践!エクセルVBAマクロ超入門03 100回の繰り返しをボタンひとつで一気に実行!そしてスペシャルな賞は特別なファンファーレで(抽選器マシーンシリーズ機能追加②)

 

途中、抽選のタイミングとファンファーレ音のタイミングが合わない不具合が発生したり、100回の抽選には時間がかかりすぎたりということもありましたが、都度解決している過程も含まれています。

動画ではひととおり解説していますが、いくつかここで補足をしたいと思います。

スポンサーリンク

 

 

PlaySound関数の同期再生と非同期再生

PlaySound関数で音声ファイルを再生することができますが、大きく同期再生と非同期再生があります。それぞれの違いは下記の通り。

同期再生 サウンド再生が終了したら次の処理へ

非同期再生 サウンドの開始と同時に次の処理へ

前回までは非同期再生の設定でした。こうしておくと、サウンドを流しながら次の処理に入れるので、スムーズに進むわけです。

しかし、音声ファイルの再生が繰り返される場合は、再生が終わらないうちに次の再生が実行されることとなり、タイミングがズレたりすることとなります。今回、試行錯誤をしている過程でタイミングがズレてきたので、同期再生に修正しました。

具体的にはPlaySound関数の4つ目の引数を「SND_ASYNC」から「SND_SYNC」に変えます。

PlaySound wrkSndFile, 0, SND_ASYNC
  ↓
PlaySound wrkSndFile, 0, SND_SYNC

 

これに伴い、宣言文も一文追加しておいてください。

Public Const SND_SYNC = &H0

 

パブリック変数として定義された変数は活躍の場が広がる!

通常、Subプロシージャ内で定義される変数は、プロシージャの外に値をもってでることはできません。ただ、いくつかのプロシージャで値を共有して処理をすることがあります。そんな時に使用するのがパブリック変数です。

パブリック変数として定義することでSubプロシージャの枠のみならず、Moduleの枠を超えて活躍させることが出来ます。

Public (変数名)

これをModuleの冒頭に記載しておけばOKです。

 

スポンサーリンク

 

 

「塗りつぶしパターン」で処理を分岐

処理を変える条件に「セルの入力値」以外に「セルの色」や「塗りつぶしパターン」なども使うことができます。今回は「塗りつぶし」の有無で判定することとしました。

この手の処理は、調べればで比較的ラクに出てきますし、何度も使えば覚えるかもしれませんが、今回は「マクロの記録」機能を使って、そこで表示される内容をヒントにマクロを作っていくという手法を取りました。

まず、セルを選んで、塗りつぶすという作業のマクロを紹介します。

Range("O4").Select
With Selection.Interior
  .Pattern = xlSolid
  .PatternColorIndex = xlAutomatic
  .Color = 49407
  .TintAndShade = 0
  .PatternTintAndShade = 0
End With

 

ここで、セルの塗りつぶし判定に関わるのは「.Interior(背景色)」「.Pattern(網掛けパターン)」「xlSolid(塗りつぶし)」。

これを基に作ったIf文はこちら。

If Range("¥winner").Offset(m, 1).Interior.Pattern = xlSolid Then ~

「Range(“¥winner”).Offset(m, 1)の網掛けが塗りつぶしだったら ~ する」ということ。

このように、背景色や網掛けパターンをどのように表記すればいいか分からなくなっても、「マクロの記録」でヒントが得られます。

秘儀!マクロの記録!!

ちなみに「網掛けなし」は「xlNone」で表記します。これも、秘儀・マクロの記録で調べることができます。

 

あとは工夫と試行錯誤!

今回いくつか補足をしましたが、これ以外は特別なことは使っておらず、For文やIf文、Rangeオブジェクトの組み合わせや工夫で何とかなっています。

処理の繰り返しはFor文+Exit Forではなく、While文の方がスマートでは?という意見もあると思いますし、それはその通りだと思います。ただ、While文だと処理に失敗したときに無限ループに陥る心配があるので、むかしからどうも好きにはなれず、エラーとなっても、For文で設定した100や1000の処理で止まる方が安心感が勝り、どうもこの方法から抜け出せません。

あと、できるだけ少ない知識と工夫で乗り越えるというのが好きというのもあります。

Excelの関数も調べるより、マクロで作っちゃう方を選びがち。

 

いちおう「抽選機マシーン」シリーズでやってみたいことは、大体できました。第1弾は超入門編にふさわしく、基本的なエッセンスが満載でしたが、機能追加①と機能追加②は若干、超入門編というには微妙な感じもあります。ただ、超入門初心者でもついてこれる内容だと思います。

今回の流れを見ていただければわかるように、だいたいやりたいことは実現可能です。ヒントはGoogle先生が教えてくれたり、秘儀・マクロの記録で調べることができます。

あとは試行錯誤と工夫の積み重ね。もっとも大事なのはやってみようと思う気持ちとはじめの第一歩。やってみると次が見えますので、なにはともあれ、やってみるのが一番。

ぜひ、いろいろと試してみてください。試行錯誤を繰り返しながら、経験を積んでもらえればうれしいです。

k-create.hatenadiary.com

k-create.hatenadiary.com

 

魅惑のユーザーフォーム!アラーム鳴動マシーンをつくる。

 

スポンサーリンク

 


作りながら学ぶ!エクセルVBAマクロ超入門(2) 音を奏でるExcelマクロ(抽選器マシーンシリーズ機能追加①)

Excel VBAマクロの基本構文がひと通り入っていて、超入門レベルの初心者の方々におススメの「抽選器マシーン」マクロを前回紹介しました。

k-create.hatenadiary.com


やってみるとさらにやってみたいことがどんどん出てくるということで紹介した「当選確定したときにファンファーレを鳴らせないか?」。これを今回のテーマとして取り上げ、機能を追加することにしました。

例によって実際に作業している様子をYouTube動画として公開しましたので、最後に紹介しますが、音を奏でるExcelマクロはこのブログでは取り上げたことがないので、補足も含めて、あらためて説明したいと思います。

スポンサーリンク

 

 

音声ファイルを再生するPlaySound関数

音声ファイルを再生するのにおススメなのはPlaySound関数。ただし、このPlaySound関数は、Windowsのライブラリにある機能をExcelで使用するということなので、VBAマクロの関数として、あらかじめ呼び出しておく必要があります。それが、API宣言。

APIは、Application Programming Interface の略。

【準備】PlaySound関数を使うためのAPI宣言

下記がPlaySound関数を使うための宣言文。

Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _
   ByVal pszSound As String, _
   ByVal hmod As Long, _
   ByVal fdwSound As Long _
    ) As Long
Public Const SND_ASYNC = &H1

 

PlaySound関数を詳しく調べてみると、「非同期再生や同期再生」「繰り返し再生」「サウンドの停止」などなどいろんなキーワードとともに説明がありますが、ここではシンプルに、音声ファイルを再生することを目的にしていますので、あまり深く考えず、とりあえずコピペで先に進みましょう。

音声ファイルが無事に再生できることを確認したあとで、いろいろな機能を詳しく調べ、試行錯誤してみるのが、マクロ制作のモチベーション維持と学びの効果が高いと思います。

何はともあれ、音がならないことには始まりませんからね。

 

【かんたん解説】PlaySound関数の使い方

音声ファイルを再生するPlaySound関数は次の通り。

PlaySound wrkSndFile, 0, SND_ASYNC

 

0 と SND_ASYNC は特に気にせず、そのまま(ちなみに、SND_ASYNCはAPI宣言のところで値を定義しています)。重要なのは、wrkSndFile(変数)。ここには音声ファイル名を記載すればよいのですが、コンピュータのどこに保存されているか、すなわち、フルパスが必要となります。

フルパス付きで音声ファイルを指定すれば、どんな方法でも構いません。簡単なのは直打ちして指定することですが、PCが変わるなどして保管先のフルパスが少しでも異なると音声が出てこなくなります。

なので、いかなる状況でも正しく動作させるには工夫が必要です。

今回、想定しているのは、音声ファイルが、このエクセルファイルと同じフォルダに保管されているケース。これであれば、フォルダごと移動させることさえ徹底しておけば、特に問題は発生しません。

ということで、音声ファイルが、このエクセルファイルと同じフォルダに保管されているケースでフルパスの取得手順を紹介します。

 

フルパス付きのファイル名を作成する

フルパス付きのファイル名 wrkSndFile は下記のように取得することとします。

wrkSndFile = ThisWorkbook.Path & f_sound

 

ThisWorkbook.Path はこのExcelブックの保存先のフルパスを返します。あらかじめ、f_sound にファイル名を入れておき、「&」を使って文字列を合体させることで、フルパス付きのファイル名ができあがります。

ファイル名の頭に¥マークを入れるのを忘れないで!こうしないと、フルパスとファイル名が区別できずにくっついてしまいます。

 

ファ音を発生させるBeepAPIメソッド

BeepAPIメソッドを使えば、音階を奏でることも可能です。これもまた、Windowsのライブラリから、あらかじめ呼び出しておく必要があります。

スポンサーリンク

 

 

【準備】BeepAPIメソッドを使うためのAPI宣言

 下記がPlaySound関数を使うための宣言文。

Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
    (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

これもまた、あまり深く考えず、とりあえずコピペで先に進みましょう。

 

【かんたん解説】BeepAPIメソッドの使い方

ファ音を再生するBeepAPIは次の通り。

BeepAPI ( dwFreq , dwDuration )

  dwFreq :周波数 Hz(37~32767Hz)
  dwDuration:音の鳴動時間 ms

音の周波数(Hz)と鳴動時間(ms)を指定することで、音を奏でることができます。基準音(ラ)の周波数は440Hzで、それを基準にドレミファソラシドが決まってきます。

音階と周波数の関係は奥が深く、周波数が倍になると1オクターブ上の音階になるなどいくつかの特徴があります。これについては、説明すると長くなるので、別の機会に紹介したいと思います。

参考までに1オクターブ分の周波数を載せておきます!

音階 周波数 Hz
261.626
ド# 277.183
293.665
レ# 311.127
329.628
ファ 349.228
ファ# 369.994
391.995
ソ# 415.305
440.000
ラ# 466.164
493.883
523.251

 

音を奏でるには、Callステートメントで呼び出します。

Call BeepAPI(440, 200)

周波数を変えてみたり、鳴動時間を変えてみたり、いろいろやってみると面白いですよ。

 

このほか動画では、
・ファイルのフルパスの確認
・「おめでとうメッセージ」の表示/非表示
なども紹介していますので、是非みてみてくださいまし。

 


実践!エクセルVBAマクロ超入門02 効果音を入れて盛り上げる!(抽選器マシーンシリーズ機能追加①)

スポンサーリンク

100回の繰り返しをボタンひとつで一気に実行!そしてスペシャルな賞は特別なファンファーレで

 

スポンサーリンク

 


作りながら学ぶ!エクセルVBAマクロ超入門(1) 基本的なエッセンスが満載!抽選器マシーンをつくってみる。

百聞は一見に如かず。まずはどんなもんか見てみよう。

これまで、このブログでもエクセルVBAマクロについて、とりあえず使える状態を目指した超入門レベルの説明をしてきました。ただ、

やっぱり百聞は一見に如かず。実際に作っている動画を公開したいと常々思っていましたが、よいネタが思い浮かばず、ずっと先延ばしに。

せっかくならちょっとでも使えるマクロがいいですもんね。

そんなつい先日、抽選をする機会があったので、せっかくならマクロで作ってみるかーと思いつき作ってみました。

まあ、10人~20人ぐらいならあみだくじの方が速いわな。

そんな感じで作ってみたのがこの動画!
12分完結なので是非!


実践!エクセルVBAマクロ超入門 基本的なエッセンスが満載!抽選器マシーンをつくってみる。

 

簡単に作った割には、基本的なエッセンスが満載!

そんなノリで作ってみましたが、この12分動画は超入門向け動画としては、押さえておくべき基本構文がひと通り入っていて、かなりよい構成になったと自分でも驚いています。

含まれている基本構文

  • セルに名前をつける(0:25)
  • ボタン(フォームコントロール)を設置する(1:10)
  • 繰り返しができるFor~Next文(1:57)
  • セルを参照するRangeオブジェクト(2:14)
  • 指定されたセル範囲をオフセットするOffsetプロパティ(2:24)
  • 条件分岐ができるIf文(2:37)
  • For文を抜け出すExit For(2:46)
  • 0以上1未満の乱数を生むRnd関数(3:10)
  • マクロの実行を一旦停止するStopステートメント(3:28)
  • 数値を切り上げるRoundUp関数(4:16)
  • 処理中断時間をコントロールするWaitメソッド(6:35)
  • 秘儀・マクロの記憶(7:21)
  • マクロ実行でエラー発生!(9:20)
  • メッセージボックスを表示 Msgbox関数(10:04)

マクロ実行でエラー発生というのは仕込みではありません。本当に間違えました。。。

スポンサーリンク

 

 

とにかく、やってみるのが近道!

これぐらいであれば、初心者でも動画をみながら、お試し体験ができると思います。で、いったんやってみると、

  • 当選確定したときにファンファーレを鳴らせないか?
  • 当選結果をすべて記録しておけないか?
  • 100回の抽選をボタンひとつで一気にできないか?

などなど、やってみたいことがどんどん出てくると思います。でも、ひと通りの経験ができていればあとは、工夫とGoogle先生でだいたいが実現できます。

とにかく、手を動かしてやってみるのが近道!

ときにはチカラ技も必要。上手な方法はそのうちでOK。

ぜひ皆さんもやってみてください。

エクセルVBA

「やってみる」結果しかでないマクロも作ってみよう!

k-create.hatenadiary.com

こちらも併用で効果抜群!

 

当選確定したときにファンファーレを鳴らせないか?をやってみました。

 

スポンサーリンク

 


選べるのはひとつ!オプションボタン(OptionButton)(その2)[とりあえず使えるエクセルユーザーフォーム超入門]

Lesson4 使えるようになっておきたい基本機能

もうちょっと使える表現にしてみる

その1ではオプションボタンの基本的な使い方を紹介しました。ここでは、もう少し実用的な体裁にする方法について紹介します。選択した結果を"True" か "False" の表記ではなく、選択したものを表示させたいと思います。

チェックボックスで紹介したのと同様にIf文を使って OptionButton1 が "True" か "False" のどちらかを確認し、それに応じて、適切な文章を表示させる事例にて説明します。

Private Sub CommandButton1_Click()
   If OptionButton1.Value = "True" Then
       ' OptionButton1.Value = "True" の場合の処理
       MsgBox OptionButton1.Caption & "を選びました。"
   ElseIf OptionButton2.Value = "True" Then
      ' OptionButton2.Value = "True" の場合の処理
       MsgBox OptionButton2.Caption & "を選びました。"
   Else
       ' どれも選択しなかった場合の処理
       MsgBox "どれも選択していません。"
   End If
   End
End Sub

エクセルVBA オプションボタンの実行例

うなぎ味以外に、適切に当てはまるものってあるのかなあ。

スポンサーリンク

 

 

オプションボタンを2セット用意する方法 ~オプションボタンのグループ化

オプションボタンは、究極の選択なので1つしか選べません。しかし、ひとつのユーザーフォーム上で2つの究極の選択をさせたいとします。このとき、単にオプションボタンを増やしただけだと、究極の選択(1)と究極の選択(2)の4つの選択肢からしか選べないようになっています。

エクセルVBA オプションボタン グループ化の前

これを解決するにはオプションボタンのグループ化を行います。設定方法は「プロパティ値(GroupName)でグループ化」、「VBAコードでグループ化」といった主に2種類があります。

 

プロパティ値(GroupName)でグループ化

プロパティの「GroupName」に同じ名称を入れることで、グループ化することができます。

エクセルVBA オプションボタン グループ化設定方法

 

VBAコードでグループ化

VBAコードでグループ化することもできます。

Private Sub UserForm_Initialize()
   OptionButton1.GroupName = "選択肢1"
   OptionButton2.GroupName = "選択肢1"
   OptionButton3.GroupName = "選択肢2"
   OptionButton4.GroupName = "選択肢2"


   OptionButton1.Caption = "チョコ味のう○○"
   OptionButton2.Caption = "う○○味のチョコ"
   OptionButton1.Value = "True"
   OptionButton3.Caption = "チョコ味のうなぎパイ"
   OptionButton4.Caption = "うなぎパイ味のチョコ"
   OptionButton3.Value = "True"
End Sub

 

OptionButton1.Value の初期値を指定する前に、グループ化を完了しておく必要があります。 

スポンサーリンク

[次回公開]入力に応じてリアルタイムにフォームを拡張する

                  10   11   12   13   14

とりあえず使えるエクセルユーザーフォーム超入門(もくじ)

 

スポンサーリンク

 


#エクセル #Excel #ユーザーフォーム #マクロ #VBA

選べるのはひとつ!オプションボタン(OptionButton)(その1)[とりあえず使えるエクセルユーザーフォーム超入門]

Lesson4 使えるようになっておきたい基本機能

ユーザーフォームで多用する機能のひとつが、オプションボタン(OptionButton)。選択肢の中からただ一つを選択する機能です。

究極の選択!

複数選択は「チェックボックス(CheckBox)」で紹介しています。

オプションボタンの配置

ツールボックスで「オプションボタン」を選択。フォーム上の始点でクリックし、終点までドラッグすると、オプションボタンの枠組みが作成できます。

エクセルVBA オプションボタンの配置

 

初期設定1:オプションボタンの見出し

オプションボタンの見出しの設定方法には「プロパティ値(Caption)で修正」、「VBAコードで設定」といった主に2種類があります。

スポンサーリンク

 

 

プロパティ値(Caption)で修正

対象となるオプションボタンを選択した際に、画面左側にプロパティ値の一覧が確認できます。この中のCaption値がオプションボタンの見出しとなります。したがって、直接該当するテキストを修正すれば反映されます。

エクセルVBA オプションボタンのプロパティ設定(Caption)

VBAコードで設定

VBAコードで設定する方法もあります。これもまた「3-1.ユーザーフォームの初期化(Initialize)」で紹介した方法です。具体的な方法は次の通り。この方法であれば、条件により異なる見出しを記載することにも応用できます。

Private Sub UserForm_Initialize()
   OptionButton1.Caption = "チョコ味のう○○"
   OptionButton2.Caption = "う○○味のチョコ"
   ' ↑
   '(オブジェクト名). Caption=”(記載したい文章)”

End Sub

エクセルVBA オプションボタンのあるフォームの例

う○○って。。。
もしかして、うなぎ?

正解!

だれや、下品な想像した人。



初期設定2:オプションボタンの初期値

フォームを表示したときに、あらかじめ選択した状態にしておきたい場合の具体的な方法は次の通り。

Private Sub UserForm_Initialize()
   OptionButton1.Caption = "チョコ味のう○○"
   OptionButton2.Caption = "う○○味のチョコ"
   ' ↑
   '(オブジェクト名). Caption=”(記載したい文章)”

   OptionButton1.Value = "True"
   '(オブジェクト名).Value="True"(チェックあり)
   'または "False"(チェックなし)

End Sub

これを設定していないと、「どれも選択しない」状態にもなりえます。

ちなみに、

   OptionButton1.Value = "True"
   OptionButton2.Value = "True"

と相反する内容を記載した場合、最後に表記したものが有効となります。
 

オプションボタンの選択情報の取得 

オプションボタンが選択されているかどうか情報は OptionButton1.Value が "True" か "False" で確認できます。

例えば、フォーム右下のコマンドボタンを押したときに、選択されている状況をMsgBox関数で表示してみます。

Private Sub CommandButton1_Click() ' コマンドボタン1をクリックした後に始まる処理
   MsgBox OptionButton1.Caption & " : " & OptionButton1.Value & Chr(13) & OptionButton2.Caption & " : " & OptionButton2.Value
   End ' 処理を終了します。
End Sub

 

MsgBox以下に記載されているのが表記される文章。文字列は“(ダブルクォーテーション)”で表され、「OptionButton1.Caption」 などはそれらに当てはまる文字列となります。「.Value」は選択されているものは「True」を、そうでないものは「False」を表記します。「&」は文字列の足し算記号でしたね。

もう一つ、「Chr(13)」を使っています。これはChr関数で指定した文字コード (Shift_JIS) に対応する文字を返す命令文です。文字コード13は「キャリッジリターン(改行)」を表します。

処理をした際に表示される画面は下記のとおり。

エクセルVBA オプションボタンの実行例

ただ、"True" か "False" と表示させるだけでは実用的ではありません。次に実用的な体裁にする方法について説明します。

スポンサーリンク

選べるのはひとつ!オプションボタン(OptionButton)(その2)

                  10   11   12   13   14

とりあえず使えるエクセルユーザーフォーム超入門(もくじ)

 

スポンサーリンク

 


#エクセル #Excel #ユーザーフォーム #マクロ #VBA