- ベストアンサー
excel VBA プログレスバーについて(初心者)
VBA初心者の質問です… excelで入力されている値を用いて、グラフ作成する簡単なデータを作りました。 特に問題なくグラフは出来たのですが、グラフ作成が1つではなく数個同時(順番)に作成しているため時間が掛かってしまいます。 この処理中にプログレスバーを表示出来ればと思い質問を致します。 私なりに調べ(goo内)下記サンプルを発見し、簡単なのでこれを使をうかと思うのですが、UserForm1の処理前にUserForm2.showだけでは UserForm2の処理が終わらないと処理をしません…当然ですよね… 本当に初心者で申し訳ないのですが、UserForm1の処理最中にUserform2のプログレスバーを表示するのにはどうすればいいのでしょうか… 【サンプル】 Private Sub UserForm_Activate() With Label1 .SpecialEffect = 2 .BackColor = vbBlue www = .Width .Width = 0 End With For i = 1 To 1000 Me.Caption = i Label1.Width = i / 1000 * www Me.Repaint Next End Sub また他におすすめなやり方があれば教えて頂ければ… 初心者な質問で申し訳御座いません。
- みんなの回答 (5)
- 専門家の回答
関連するQ&A
- LabelとFrameでプログレスバー VBA
お世話になっております。 Excel2003を使用しております。 LabelとFrameを使い、プログレスバー表示したいと思っております。 ユーザーフォーム上に、 Label と Frameを置き、 Frameの中にLabelを置きます。 (ここは上手くできているか不安です) UserFormInitializeに With Me.Label1 .Top = 1 .Left = 1 .Width = 1 .BackColor = vbBlue BarWidth = Me.Frame1.Width - 6 End With そして、ためしにコマンドボタンを設置して、 Dim i, 最大値 As Long 最大値 = 100000 BarWidth = Me.Frame1.Width - 6 Do If i = 0 Then Me.Label1.Width = BarWidth * 1 / 最大値 Else Me.Label1.Width = BarWidth * i / 最大値 End If i = i + 1 Loop Until i = 最大値 上記のように記入してみました。 一瞬で表示されてしまいますし、 一度処理が終わっても、青いバーが表示されたままで どうすればいいのか良く分かりません。 最後に Me.Label1.Width = 0 と書けばいいのは分かりましたが… どうしたら、バーの伸び具合をゆっくり見られますか? 回答よろしくお願い致します。
- ベストアンサー
- Excel(エクセル)
- プログレスバーでの経過状況表示
vb.netでのtimerのようなものをやりたくてvbaでプログレスバーを使用して経過状況を表示するプログラムを作りました。プログレスバー自体での視覚的な経過状況表示はできたのですが、現在のパーセンテージをlabelに表示することができません。 Private Sub CommandButton4_Click() Dim i As Long Application.Visible = False i = 1 For i = i To 1000000 UserForm1.ProgressBar1.Value = i / 1000000*100 UserForm1.Label1.Caption =UserForm1.ProgressBar1.Value i = i + 1E-44 Next Application.Visible = True End Sub 上記のようにするとプログラム終了時にlabel1に現在のプログレスバーの値が表示されますが、進行中には表示されないのです。これを進行中も表示させるにはどうしたら良いのでしょうか?
- ベストアンサー
- Visual Basic
- Labelでプログレスバーの表示
いつも大変お世話になっております。 動作が重いマクロ、プログラムが多いため、 プログレスバーを表示させたいと思っています。 フォームを20個以上準備しており、 それに対し プログレスバーを使いたいのが10個程度であり、 今後増えるかもしれません。 そのため、標準モジュールを利用し、簡単に プログレスバーを設定できないかと思っています。 '=================== 【標準モジュール Module1】 Sub Bar_progressBarData(Byval UserFormName as string, Byval MaxData as Long,LabelName as string) 'UserFormName 引用するところ?のユーザーフォーム名 'MaxData バーの最大値設定 'LabelName バー表示するラベル名 'ProgressBarの初期設定などをやる End sub '------------------------- Sub Bar_progressBarInt(Byval UserFormName as string, Byval MaxData as Long,LabelName as string) 'UserFormName 引用するところ?のユーザーフォーム名 'MaxData バーの最大値設定 'LabelName バー表示するラベル名 'ProgressBarの値を増やしていく(増加させていくプログラム) End sub '================= 【UserForm Test】 Sub DataChangeGraph() 'ループが多いデータ Call Bar_progressBarInt(Me.Name,10,"Label1")'バーの値を増加させていく End Sub Private Sub UserForm_Initialize() Call Bar_progressBarData(Me.Name,10,"Label1")'初期設定(例として、max10にしました) End Sub Maxの値、プログレスデータに使用する値は グローバルに設定してしまうというのも楽かもしれません。 しかし、この続きの肝心なプログラムが分かりません。 「プログレスバーの作り方」 h ttp://www.h3.dion.ne.jp/~sakatsu/ProgressBarTopic.htm このサイトが良いと評判でしたので、 見ましたが何をしているのか良く分かりませんでした。 Widthを設定? Dim sngBarMaxWidth As Single? そして、私がやりたいこととは少し違うようです。 私がやりたいのは、フォーム上に毎回プログレスバー用のプログラムを書くのが面倒だったので、 標準モジュールとしてSubプロシージャを作成(日本語? そして、それを引用してプログレスバーの設定を簡単に終わらせる ということがしたかったのです。 できれば、ラベルなど Excelに標準で備わっているものを使用したいと思っています。 プログレスバー専用のツール(参照設定などを用いるもの) はその後にエラーが出たとき困るので、使いたくありません。 なんとなく伝わったでしょうか? 回答よろしくお願い致します。 Excel2003 VBA
- ベストアンサー
- Excel(エクセル)
- VBA DoEvents関数の働きと使い方を知りたい
下記のような UserForm上の Module コードを書いてももらったのですが、DoEvents の働きが分からないのです。どなたか分かりやすく説明していただけませんでしょうか? Private i As Integer Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = Me.Label1.Caption Then Me.Label2.Caption = "正解です" Else Me.Label2.Caption = "不正解です" End If DoEvents If i < 20 Then i = i + 1 Label_Up Me.TextBox1.Value = "" Cancel = True Else MsgBox "終了です" End If End Sub Private Sub UserForm_Initialize() i = 1 Label_Up End Sub Private Sub Label_Up() Me.Label1.Caption = Sheets("Sheet1").Range("A1:A20").Cells(i).Value DoEvents End Sub
- ベストアンサー
- その他(ソフトウェア)
- VBAでUserFormでProgressBarとLabelを同時表示できない理由は?
VBAでUserFormをつかってProgressBarとLabelを同時に表示させる。つもりでしたが、ProgressBarが満たされた後Labelが表示されます。その理由と対策を教えて下さい。そのコードを以下に示します。 Sub a() With UserForm1 .Show vbModeless .Label1 = "始めのテキスト" End With s = 1 e = 20000 For i = s To e UserForm1.Label1 = "始めのテキスト" UserForm1.ProgressBar1.Value = i / e * 1000 Next i End Sub お願いします。
- ベストアンサー
- オフィス系ソフト
- VBA:ユーザフォームのラベルの指定の仕方教えてください。
今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。 Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか? やはり、UserForm1.Label3などのように番号をきちんと書かないとダメでしょうか?本当は、ラベルが82個ありその一つ一つにコードを割り当てるのが大変です。また、きれいなコードで書きたいと思うからです。宜しければ、ご教授願います。 -------------------------------------------- Sub セルの値をラベル表示する() For i = 1 To 20 With UserForm1.Label(i) .Caption = Cells(1, i) End With Next i End Sub
- ベストアンサー
- Visual Basic
- エクセルVBA フォームへ動的に貼り付けたボタンのクリックイベントを検知する方法を教えてください
(1)excel97にのVBAでフォームを作成します。 デフォルトの場合はUserForm1という名前がつきます。 (2)標準モジュールとして下記のコードを作成します。 Sub ボタンを付けて表示() Dim btn As Control With UserForm1 ’ボタンを"button"という名前で作成します Set btn = .Controls.Add("Forms.CommandButton.1", "button") ’ボタンの設定をします With btn .Top = 5 .Left = 5 .Height = 20 .Width = 200 .Caption = "push me!" End With ’フォームの設定をし、表示します .Height = 60 .Width = 220 .Show End With End Sub (3)マクロを実行するとフォームが表示されます。 そこでこのボタン("push me!"と表示されています)をクリックします。 このクリックを検知してマクロを動かしたいのですが可能でしょうか? なおUserForm1に下記のコードを付けてみたのですがクリックは検知できませんでした。 Private Sub button_Click() MsgBox "You click the button." End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルVBA初心者です。
エクセルVBA初心者です。 ユーザーフォームを使ったセルの上書きについて質問があります。(以下は自分が作成済みの内容) A B りんご 1 みかん 2 これらがセルにあります。この中から上書きしたいものを取得します。 ユーザーフォーム1にリストボックスとコマンドボタンを1つずつ設置し、そのリストボックスにA列の文字を入れました。リストボックスの中から上書きしたい文字を選択し、コマンドボタンを押すと、ユーザーフォーム2が表れ、そこには2つのテキストボックスと1つのコマンドボタンがあります。 ここからが分からないのですが、例えば上書きしたい文字に「みかん」を選び、ユーザーフォーム2のテキストボックス1に「バナナ」、テキストボックス2に「3」といれると A B りんご 1 バナナ 3 このようにしたいのです。 実際はもっと複雑な内容のものを作成しております。しかし上記の疑問が解決すれば、今自分が抱えている問題も解決すると思います。 以下はユーザーフォーム1のコードです。これを提示することにより回答される方が楽になるかどうかは分かりませんが、一応提示しておきます。(lstRowを使っている理由はA列とB列の文字・値が増加していく可能性があるため) Private Sub UserForm_Initialize() CommandButton1.Enabled = False Dim lstRow As Long Dim i As Long Dim q As Long ListBox1.Clear ListBox1.ColumnCount = 2 ListBox1.ColumnWidths = "200 pt" lstRow = Cells(Rows.Count, 1).End(xlUp).Row q = 0 For i = 2 To lstRow With ListBox1 .AddItem .List(q, 0) = Cells(i, "C").Value End With q = q + 1 Next End Sub ============================================================================ Private Sub CommandButton1_Click() UserForm2.TextBox1.Value = Me.ListBox1.Value Unload UserForm1 UserForm2.Show End Sub
- ベストアンサー
- Visual Basic
- Excel VBAについて
Excel VBAにおいて、Sheetの選択した行によって値を表示するUserFormを変更したいと思っています。 現在以下のようにしたのですが、実行すると「SubまたはFunctionが定義されていません」というエラーが表示されます。 「Controls("UserForm" & x).Label1.Caption =」のところをどのようにしたらよいのでしょうか。 Private Sub CommandButton1_Click() If ActiveCell.Row = 5 Then UserForm1.Show x = 1 ElseIf ActiveCell.Row = 6 Then UserForm2.Show x = 2 End If End Sub Private Sub Worksheet_Selection Change(Byval Target As Range) Controls("UserForm" & x).Label1.Caption = ・・・
- ベストアンサー
- Visual Basic
- エクセルVBAのコンボボックス
エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
またお答え頂き本当にありがとう御座います。 教えて頂いたプログラムまだ試していませんが(他の仕事で手があかず…)、実際に使わせて頂きます。 初心者な私に丁寧に教えていただきありがとう御座いました。もっと勉強したいと言う気持ちになっていますので、 今後また質問させて頂くことがあれば教えて頂ければ幸いです。