エクセル マクロ プログレスバー

スポンサーリンク
スポンサーリンク

マクロ プログレスバー

エクセルマクロはVBAを用いて記述します。

今回は、進行状況をバーで示してくれる、プログレスバーを作ってみましょう。
いろいろ応用が利きますので、ライブラリ的に使用していただければと思います。

プログレスバー

エクセルでVBAによるマクロを記述します。

今回は、進行状況を示す「プログレスバー」です。

これをモジュールとして、登録していろいろなマクロで使用しましょう。

使用のイメージは次の図を見てください。

プログレスバーと書かれたコマンドボタンを押すと

のようにバーが出て、いまの進捗状況を教えてくれます。

フォーム

Alt+F11 を押すと、エディタが出ます。

挿入 ⇒ ユーザーフォーム  をクリックします。 

以下のようなユーザーフォームができます。

オブジェクト名を UserForm1 から frmProgressBar と変更します。

ユーザーフォーム     frmProgressBar

次にフォーム上にコントロールボックスからラベルを選択して張り付けていきます。

次のように作成しましょう。


それぞれのラベル名を以下のようにしてください。

  • パーセント表示用ラベル  lblPercent
  • バーのバック用ラベル   lblBackGround 長さはフォーム横幅いっぱいくらいまで
  • バー表示用ラベル     lblProgressBar
    図では長くなっていますが、張り付けるときは長さを 極小にします。0%から始まるため。

これらフォームやラベルのオブジェクト名は、べつにどんなものでもOKですが、後から見てわかりやすいように自分なりのルールを作っておきましょう。

ラベルなら lbl
コマンドボタンなら cmd
フォームなら frm とか fm
テキストなら txt

などを接頭語としてオブジェクト名の

最初に記しておきます。
こうしておくと、後から見た時に

何をしているかよくわかります。

 

一月後のあなたは、以前のあなたとは他人です。
つまり、ほとんど覚えていません。

だから、コードの中にくどいくらいに

コメントを書くべきです。

 

さて、これで準備はOKです。
つづいてコードを書いていきます。

コード

挿入から、標準モジュールをクリックします。

標準モジュールのオブジェクト名を「mdProgressBar」とでもします。

コードを書きます。

Option Explicit
Sub ShowProgressBar()  ’サブルーチンの名前、どのような名前でもOKです。

Dim InCount As Long   ’進捗具合を示す数字を入れます。
Const InCounted As Long = 1000   ’パーセントの母数になる数字を入れます。

frmProgressBar.Show vbModeless  ’vbModeless とするとマクロとエクセル操作が同時にできます。

For InCount = 1 To InCounted

With frmProgressBar
.lblProgressBar.Width = InCount / InCounted *  .lblBackGround.Width ’ラベルの長さを書き換えます。
.lblPercent.Caption = Int(100 * InCount / InCounted) & “%”  ’%を計算して表示します。
End With

DoEvents

Next InCount

Unload frmProgressBar  ’ユーザーフォームを消去します。

End Sub

このマクロを実行すると、プログレスバーを表示します。
サンプルはエクセルのシートにコマンドボタンを配して、マクロ登録しております。

実際に用いるには、

Sub ShowProgressBar()  この()内を書き換えて変数を受け渡すように知ればいいと思います。
次で実際に使用している例をあげてみます。

実際例

以下は受け渡しをしている実際の例です。
ご自分の環境や、したいことに合わせて適宜変えてください。

あるサブルーチンで以下の記述をします。

Load frmProgressBar   ’プログレスバー用のフォームをロード
frmProgressBar.Show vbModeless   ’モードレスでフォームを表示 これにより同時処理可能
Call DrawProgressBar(全体の数変数) ‘プログレスバー表示ルーチンの呼び出し

全体の数変数を引数とする。

処理・・・・・・・・・

Unload frmprogressbar

 

 

DrawProgressBar(nMax, nCount) としてサブルーチンに 全体の数変数 を渡しています

Option Explicit

Sub ShowProgressBar(nMax As Long, nCount As Long)
‘プログレスバーを表示する。

Dim nPercent As Integer
Dim nI As Long

nPercent = Int((nCount / nMax) * 100)

With frmProgressBar
.lblProgressBar.Width = nPercent
.lblPercent.Caption = nPercent & “%”
End With
DoEvents

End Sub

一度VBAで記述して、どのような場合にも使えるようにしておけば、取り出していつでも気軽に使うことができます。

コメント