アフィリエイト広告を利用しています
G-B2H5YFC4DJ
メール下書き作成
ファイルの名前を一括変更
プログレスバー
文字取り消し線の削除(制限あり)
キーでスクショを連続取得
シート名を一括変更
プロフィール
Dr.ワークさんの画像
Dr.ワーク
主に開発に関するブログです
プロフィール

広告

posted by fanblog

2022年03月10日

プログレスバーを表示

01_title.jpg

会社で使うExcel。いつの間にかExcelのために仕事をさせられていませんか?

Excelを使い倒して、仕事を楽にするツールにしちゃいましょう

この記事は、VBAを作ったものの、VBAの処理時間がかかるため、

プログレスバーで進捗状況を表示する方法の紹介です

目次
VBAのマクロに組み込みたい処理
02_before.jpg
ツールの進捗状況を表示したい

VBAを作ってみたもののデータの加工や繰り返し処理で処理時間がかかってしまうこともあるかと思います

書式設定を一括で実施したりなど速度の改善を図るほうが良いですが、

扱うデータ量によってはどうしても時間がかかります

VBAが動いているかどうかすら怪しいくらい時間がかかる処理の場合

プログレスバーを実装して視覚的に進捗が見えるとよいです

どんな効果?
03_merit.jpg
  • 処理の進捗が分かる(★ここを改善)
マクロ

Option Explicit
'---------------------------------------------------------------------------------------------------
'
' マクロ: プログレスバーを表示します。別途フォームも必要です
'
'---------------------------------------------------------------------------------------------------

Private Const WAITSEC As Long = 50  'ミリ秒

'---------------------------------------------------------------------------------------------------
' 概要:進捗バーを表示します
' 補足:実際は、<処理>でくくった範囲に、非常に時間のかかる処理が入ります
'       簡易的にfor文で重い処理に見立ててます
'---------------------------------------------------------------------------------------------------
Sub 進捗バーを表示()
    Dim i As Long
    Dim maxWidth As Long
    Dim img As Object
    Dim pas As String
    
    '進捗バー表示
    UserForm1.Show vbModeless    '実行制御を呼び出した側にすぐ戻す
    maxWidth = UserForm1.Label1.Width
    UserForm1.Label1.Width = maxWidth * (1 / 100)
    UserForm1.Label2.Caption = "処理を開始します"

    For i = 1 To 100
    
        '処理――→
        Application.Wait [Now()] + WAITSEC / 86400000
        '←――処理
        
        DoEvents
        UserForm1.Label1.Width = maxWidth * (i / 100)
        UserForm1.Label2.Caption = "処理中です..." & i & "%"
    Next i

    UserForm1.Label2.Caption = "お待たせしました、終了しました"
    Application.Wait [Now()] + 1000 / 86400000  '1秒
    Unload UserForm1

End Sub
ユーザーフォーム

ユーザーフォーム(UserForm1)を追加します

ラベルを2つ追加し、一つは進捗バー、もう一つはテキスト出力に使います

ラベル名はLabel1、Label2を使用しています

マクロの使い方

マクロをエクセルに組み込んでください
[進捗バー]マクロを実行するとプログレスバーが表示されます

サンプル
06_sample.jpg

想定している使い方です

・VBAで処理の重いマクロを上記マクロの「処理」の部分に当てはめる形です

・上記マクロでは重い処理を疑似的にfor文でまわしてます

・プログレスバーですが単純にラベルの幅を伸ばしているだけです

以上ですが、ちょっと味気ないので、次回、プログレスバーを少し華やかにしてみたいと思います 既にいくつか作成中ですが、重い処理だからプログレスバー表示しているのに、プログレスバーを 華やかにすると更に重い処理になってしまうのかな、と葛藤してます
posted by Dr.ワーク at 23:04 | Comment(0) | TrackBack(0) | VBA
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/11301756
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。