教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】ラベルに表示する文字列を設定する方法②(進捗状況表示)について教えて!

f:id:m_kbou:20210816095717p:plain

コマンドボタンをクリックすると、ラベルに表示する文字列がパーセント表示(進行状況表示)される設定方法について紹介します。

 

 

構文

記述方法は以下の通りとなります。

For[変数]= 1 to 100
 [ラベル名].Caption =[変数]& ”%”
Next

[説明]:

For~Next文で[変数]に1~100の値をループさせながらセットします。また、[ラベル名]にはラベルのオブジェクト名を記述します。[ラベル名].Captionでは「=」(イコール)の右側に記述された内容をラベルに表示する文字列として設定する事ができます。よって、ループにてセットした[変数]と”%”を合わせた進捗パーセントを[ラベル名]で指定したラベルに表示します。内容を纏めると、「[変数]に1~100までの値をループにてセットし、セットした[変数]の値と”%”を合わせてラベルに表示して下さい。」との意味になります。(※[ラベル名].Captionは、ラベルプロパティ内にある[Caption]と同じ意味になります。)

[記述例]:

For 進捗 = 1 To 100
  進行状況.Caption = 進捗 & "%"
Next

[サンプルフォーム]: 

今回は以下のサンプルフォームを使用して説明します。
・フォーム名の付け方はこちらを参考にして下さい。
・ラベル名の付け方はこちらを参考にして下さい。
・コマンドボタン名の付け方はこちらを参考にして下さい。
・コマンドボタンへの表示文字の付け方はこちらを参考にして下さい。

f:id:m_kbou:20210816095733p:plain

[実行内容]: 

上記のサンプルフォーム内にある<実行>ボタンをクリックすると、ラベル名:進捗状況に進捗がパーセントで表示される方法について紹介します。

 

ラベルに表示する文字列の設定方法②(進捗状況表示)及び実行結果

設定方法②(進捗状況表示)及び実行結果について説明します。

(1)VBE(VBA記述画面)を開き、予め作成したテストフォームがある事を確認します。(※VBEの開き方についてはこちらを参考にして下さい。)

f:id:m_kbou:20210816095749p:plain

(2)フォームにある<実行>ボタン上で右クリックします。小窓が開くので「コードの表示」を選択します。

f:id:m_kbou:20210816095803p:plain

(3)「実行_Click」イベントプロシージャが表示されます。(※これは自動的に作成される仕組みとなっている様です。)

f:id:m_kbou:20210816095817p:plain

(4)実行する処理内容を記述します。今回はボタンがクリックされた際にラベル名:進捗状況に進捗パーセントを表示する内容を記述します。(※ここで今回の題目であるラベルに表示する文字列設定(進捗状況表示)の内容を記述します。)

Private Sub 実行_Click()

  Dim 進捗 As Long
  Dim 待ち時間 As Variant

  '↓処理①
  進捗状況.Caption = "0%"

  '↓処理②
  For 進捗 = 1 To 100

    '↓処理③
    待ち時間 = Now + TimeValue("0:00:01")
    Application.Wait 待ち時間

    '↓処理④
    進捗状況.Caption = 進捗 & "%"
    DoEvents

  Next

  '↓処理⑤
  MsgBox "処理が終了しました。"

End Sub

処理の流れは以下の通りとなります。

[処理①]:ラベルへの初期値セット
ラベル名:進捗状況に初期値として「0%」をセットします。

[処理②]:For~Next文によるループ処理
For~Next文を使用して変数:進捗に1~100の値をセットしながらループさせます。ループ中は以下の[処理③]及び[処理④]を実行します。

[処理③]:待ち時間を設ける
TimeValue関数を使い文字列時刻を時刻データに変換します。今回は文字列:"0:00:01"を「1秒」に変換します。変数:待ち時間に「現在の時刻(Now)+変換時間:1秒」をセットします。最後にApplication.Waitにて変数:待ち時間になるまで処理を停止させます。

[処理④]:ラベルへの進捗状況をセット
ラベル名:進捗状況に変数:進捗と”%”を合わせてセットします。
※変数:進捗に1がセットされた場合は「1%」を、90がセットされた場合は「90%」をセットします。また、DoEventsでOSへ制御を移す事で、ラベル名:進捗状況に進捗パーセントが表示されます。

[処理⑤]:終了メッセージ
For~Next文のループ処理が終了した場合、MsgBoxで「処理が終了しました。」を表示させます。

f:id:m_kbou:20210816112802p:plain

(5)上部にある実行ボタン(▶)をクリックします。

f:id:m_kbou:20210816112817p:plain

(6)テストフォームが表示されます。

f:id:m_kbou:20210816095952p:plain

(7)<実行>ボタンをクリックします。

f:id:m_kbou:20210816095922p:plain

(8)ラベル名:進捗状況にパーセントが表示されます。(※<実行>ボタンに設定した上記(4)イベントプロシージャが実行された事が分かります。)

f:id:m_kbou:20210816100005p:plain

 (9)進捗パーセントが100%になると、MsgBoxで「処理が終了しました。」が表示されます。

f:id:m_kbou:20210816100040p:plain

ラベルに表示する文字列の設定方法②(進捗状況表示)及び実行結果についての説明は以上です。

 

サンプル

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

 

おわりに

今回はラベルに表示する文字列の設定方法②(進捗状況表示)について説明しました。類似の内容にラベルに表示する文字列の設定方法③(進捗状況表示(中断可))もあります。こちらも参考にして下さい。