- ベストアンサー
エクセルのVBA実行中の進捗バーについて
こんにちは! エクセルのVBA実行中の進捗バーについて押し終えてください。 よくあるソフトのインスト時に表示されるインストの進捗バー?とほぼ同じ者をエクセルVBA実行時にもでるようにしたいのですが・・・ 方法を教えてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
1、テキストボックス編。 テキストボックスのテキストに四角(黒ベタ)を予めセット。 Private Sub CommandButton1_Click() Dim I As Integer Dim L As Integer Dim T As String T = Me.TextBox1.Text L = Len(T) Me.TextBox1.Visible = True For I = 1 To L Me.TextBox1.Text = Left(T, I) Pause 1 DoEvents Next I Me.TextBox1.Visible = False End Sub これで、1秒毎に、四角が1個増えていきます。 見ようでは、プログレスバーです。 2、プログレスバー編。 プログレスバーそのものを配置。 プログレスバーは、[コントロールの選択]をクリックして行います。 Private Sub CommandButton2_Click() Dim I As Integer Me.ProgressBar.Max = 20 Me.ProgressBar.Left = 200 Me.ProgressBar.Top = 200 Me.ProgressBar.Visible = True For I = 1 To 20 Me.ProgressBar.Value = I Pause 1 DoEvents Next I Me.ProgressBar.Visible = False End Sub これでも、1秒毎に、バーが伸びていきます。 上記のコードをテストするには、下記のPause関数を標準モジュールに登録する必要があります。 Public Sub Pause(ByVal PauseTime As Single) Dim Finish As Single Finish = Timer + PauseTime Do DoEvents Loop Until Timer > Finish End Sub
その他の回答 (7)
質問者さまへ …とわざわざ書くのもヘンですが。 「エクセルVBA実行時に進捗バーを表示する方法」の一つとして、 ●#1さんの、「プログレスバー編」があります。 しかし、ライセンスの観点から、 「使えるけど、使って良いかどうか、あるいは使い方」に関しては議論が存在するようです。 その他の方法として、 ●#1さんの、「テキストボックス編」 ●#2さんの、「VBA ではラベルコントロールを使って表現するか、ステータスバーなどで簡易的に表現する」 ●#6さんの、「簡単にラベルを文字の「■」などを入れる手法」 があるということのようです。 議論の是非について私はコメントする立場にありませんが、 少なくとも質問者さんのご質問やお礼自体に関して問題があったわけではありませんからご心配なく。 ※コレは「まとめ回答」というやつなので、間違えてもポイントつけてはいけません。
お礼
誠にありがとうございました。 私の質問でなにか問題かと思い心配してました。 VBAをもっと勉強せねばとおもいました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ちょっと情報が不足していたようです。ご心配かけて、すみませんです。 >元の記事・・・・私が何かしましたか?心配です。 そんなことはありませんです。以下に、そのサイトの著者が、 http://www.h3.dion.ne.jp/~sakatsu/ProgressBarTopic.htm 》※ Office のインストール又はSPアップデートにより、プログレスバーコントロールが入っている mscomctl.ocx ファイルが正規にインストールされる事が判りました(2006/7/27)。 とあります。そのいきさつを、他の掲示板で読んだのですが、それについて、詳しく語る必要はないと思い、割愛しました。 Excel2000のSPのいくつからか、インストールされるということになると、すくなくとも、Visual Basic(開発言語)を持っている人しか出来ない話ではないわけですね。かつては、私の記憶でも、そうだったのですが、以前からOffice VBAをされている方は、標準的に、MS-Office にはないという認識にあったように思います。 しかし、だいたいは、Office VBAを以前からされてきた方は、VB5/6のランタイムを入れてしまっているので、Office SPアップデートで入るということは、知らないような気がします。私自身、知りませんでした。 ある意味で、「ProgressBar Control」というのは、VBには、それは標準的にありましたが、VBAでは、仮に、それ向きに開発しても、個人的に使うだけの存在だと思いました。なかなか、VBAでは、VBランタイムを入れてくださいともいえませんしね。 だからこそ、このスレッドの最初に書いたサイトの著者(角田氏?)や、『かんたんプログラミング』(技術評論社)の大村あつしさんも、それに代わる代用法を編み出したのだと思います。(あくまでも、私の想像です。) 私の書いた 「現在のMS-Office 自体に標準的に備わっているとしたら、配布自体は関係なくなりますね。」 配布することがいけないといっても、それ自体を取りざたする必要がないのではないかなって思いました。お互いが持っているとしたら、それは、再配布することへの必要性はなくなります。私の書いたのは、そういう意味だったのですが、もちろん、その部分だけの文章を取れば、ライセンスフリーとも取られかねません。しかし、再配布権自体は認められてないと書いていますから、そこだけを捕らえて違った解釈する方はいないと信じます。 私としては、Excel上では、他のコントロールと同じように、個人としては自由に使ってかまわないよって書いたつもりなのですが、それ以外の、そのOCX などの再配布の問題は、この質問とは、また違ったステージの問題だと思いますが、ご質問者さんは気にする必要はないと思います。いろいろ試してみるのが良いかと思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ProgressBar Control って、 今は、標準で、Office についているように思えますね。 Office2000 SP3以降? http://support.microsoft.com/kb/325671/ja Office XP Service Pack 2 (SP2) の概要 MSCOMCTL.OCX は、コモンコントロールの名前は出てきますね。 VB6 ランタイム再配布バージョンでも、入っていますね。 私のところでは、ProgressBar は出せますが、こちらの環境では良く分かりません。私は、VB6は、もう入れていないだけで、あれこれ入っていますので、確信が持てません。 Developer バージョンでなければ、再頒布権はないので、ProgressBar のデザインを備えた形では配布することは出来ないという話だと思いますが、現在のMS-Office 自体に標準的に備わっているとしたら、配布自体は関係なくなりますね。もちろん、個人でお使いになる分には、まったく問題はない話ですが。
お礼
ありがとうございます。 私にはまだ、この手のVBAはむりです。分かりません。 勉強しなおします。また、何か問題でもありましたか? 元の記事・・・・私が何かしましたか?心配です。
Dim N As Integer
Private Sub CommandButton1_Click() Dim I As Integer Dim L As Integer Dim N As String L = Me.Label1.Width N = Me.Label1.Width \ 10 Me.Label1.Width = 0 Me.TextBox1.Visible = True Me.Label1.Visible = True For I = 1 To 10 Me.Label1.Width = N * I Pause 1 DoEvents Next I Me.Label1.Visible = False Me.TextBox1.Visible = False End Sub 一応、これで1秒間隔で進行ゲージが伸びていきます。
断っておきますが、エクセルは一度も操作したことのない門外漢です。 ですから、あくまでも、VBAの一般論で回答しています。 エクセル固有の実現方法があれば、的を外しています。 さて、プログレスバーの配置手順ですが、 1、メニュー-表示(V)-ツールバー(T)-コントロールツールボックスにレ点。 2、最下位のアイコンをポイントすると、[コントロールの選択]という説明文。 3、[コントロールの選択]をクリックすると、選択画面が表示されます。 4、Microsoft ProgressBar Control version 6.0 があればクリック。 これで、画面に配置できます。 なお、一番上に[デザインモードの開始・終了]ボタンがあります。 ところで、Microsoft ProgressBar Control の有無は環境によるかも知れません。 仮に無い場合は、テキストボックスを使われたらいいです。 なーに、ラベルコントロールを背景色付きでテキストボックスの上に配置すればプログレスバーが出来上がります。
- KenKen_SP
- ベストアンサー率62% (785/1258)
> プログレスバーは、[コントロールの選択]をクリックして行います。 これは 製品版 VB(VBA とは別物)などに付属する OCX コントロール のことですね。VB がインストールされていない環境で OCX をデザイン 使用すると、ライセンス違反になりますのでご注意を。 # VB 未インストール環境では OCX のプログレスバーを使用しては # いけません.....ということです。 VBA ではラベルコントロールを使って表現するか、ステータスバー などで簡易的に表現するのが良く知られた方法です。 参考URL: http://www.h3.dion.ne.jp/~sakatsu/ProgressBarTopic.htm
お礼
有難うございます。 プログレスバーそのものを配置。 プログレスバーは、[コントロールの選択]をクリックして行います。 ってなんですか? 何も分からず済みません。教えてください。