• ベストアンサー

エクセルマクロで教えていただきたいです。

ある処理プログラムをつくりました。 同じ処理を数千行にわたって繰り返すのですが、一瞬では到底終わらないため「進捗状況」を表示させたいと思うのですが、何かよい方法はございませんでしょうか。 「現在○○行を処理しています」なんていうメッセージが出せればいいかななんて考えてます。 Msgboxを使用することも思いついたのですが、これだと何かしらボタンを押さないと次へ進まない(と思っていますが違います?)ので自分の意図することと違うなぁという感じです。 よい方法教えてください。よろしくお願いします。 Windows98SE、EXCEL2000を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.3

Application.Statusbar="現在" & cnt & "行目…" とすれば、ステータスバーにメッセージが表示されます。 最後は Application.Statusbar=False で元に戻ります。

tarobei
質問者

お礼

あ!いいですね、コレ! 単純で、しかもカッコイイ(?)・・・ 私が思い描いていたのに近いように思います。 使わせていただきます。 ありがとうございました。

その他の回答 (4)

  • diashun
  • ベストアンサー率38% (94/244)
回答No.5

#2です。 「ラベルコントロール」はVBAのコントロールのひとつで、デフォルトではExcelメニューバーには表示されていないので、次の手順でツールバーに貼り付けてください。 1.メニューバーの「ツール」→「ユーザー設定」をクリックし「ユーザー設定ダイアログ」画面を表示。 2.「ツールバー」タブで「コントロールツールボックス」にチェックを入れる。 3.「閉じる」ボタンをクリック。 以上で「コントロールツールボックス」が表示されます。 そのボックスの中に「A」で表示されているのが、「ラベル」コントロールです。 文字通り、テキストを表示するためのコントロールで、フォントの種類、文字の大きさ、色の設定など各種プロパティが設定できます。 これを仮に「Workbook」の「Sheet1」に貼り付けた場合、VBEのSheet(1)オブジェクトとして指定するには、Sheet1のコード表示画面で、 「ThisWorkBook.Sheets(1).Label1」(デフォルト)で指定しプロパティ設定できます。また、これらのコントロールは印刷せずにSheet上で表示するだけにしたりすることも出来ます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

VBではプログレスバーというコンとロールがありますが、エクセルVBAでは使えるかどうか判らないので、テキストボックスとラベルコントロールで代用してみます。 Sheet1において、 メニュバー部の余白で、マウスの右クリックをして 「コントロールツールボックス」をクリックする。 テキストボックス(アイコンはab|)のアイコンをクリックしてSheet1へ貼りつける。 またラベル(アイコンはA)のアイコンをクリックしてSheet1に貼りつける。 この2つのコントロールの高さサイズを同じに調整し、また左辺同志を重ねる(同位置)ように位置づける。 ラベルの上で右クリックしプロパティウィンドウを出し、Caption(Label1となっている)をDELキーで削除し、BackColorをその行の右欄右の方でクリックしてパレット・タブを選び、色を選択強して色パレットをクリックする。 もう一つコマンドボタンを貼りつける。 Sheet1のコマンドボタンをダブルクリックすると VBE画面に飛び Private Sub CommandButton1_Click() End Sub がVBE画面に現れるから、そこに下記を貼りつける。 Private Sub CommandButton1_Click() Sheet1.Label1.Visible = True Sheet1.TextBox1.Visible = True For i = 1 To 1000 Sheet1.Label1.Width = Sheet1.TextBox1.Width * i / 1000 If i Mod 100 = 0 Then Sheet1.Label1.Caption = Int(i / 10) & "%完了" End If Next i Sheet1.Label1.Visible = False Sheet1.TextBox1.Visible = False End Sub VBE画面の実行-デザインモードを脱し、Sheet1の画面に戻り、コマンドボタンをクリックして見てください。 進行状況が図示表示されます。 コマンドボタンは、テストをして見てもらうキッカケのためで、本番では要りません。 上記コードの主要部をご質問者の処理ループの中にいれてください。 Visible関係はループに入る前と脱出後にいれてください。 (私のパソコンは旧式CPUですので、テストしてみるには丁度適度の速さでしたが、速いCPUのパソコンでは1000を増やす(3箇所変更要)とゆっくりになるのではと思います。) Sheet1.Label1.Caption = Int(i / 10) & "%完了"は 別のラベルを直下貼りつけ、そこで表示するほうがよいかも。はじめの時文字が全部は出ないなどのことに気づきましたが、説明を短くするため上記のままとしました。

tarobei
質問者

お礼

ご丁寧な説明をありがとうございます。 なんか高度そうですね!でもこれができたらもっとカッコイイかも! やってみます!ありがとうございました。

  • diashun
  • ベストアンサー率38% (94/244)
回答No.2

処理する行数を求める関数を作り、適当な行数処理毎にエクセルシートの適当なセル、またはラベルコントロールなどを表示させて、「現在○○行を処理しています」等というメッセージを表示してはどうでしょう。 これだとメッセージボックスのようにボタンを押して作業を中断することはありません。 <コーディング例> Option Explicit Sub メッセージ表示(lngCnt As Long) Application.ScreenUpdating = False ThisWorkbook.Sheets(1).Activate Select Case lngCnt Case 1000 Range("D3") = "現在 " & lngCnt & " 行を処理しています。" Case 2000 Range("D3") = "現在 " & lngCnt & " 行を処理しています。" Case 3000 Range("D3") = "現在 " & lngCnt & " 行を処理しています。" Case 4000 Range("D3") = "現在 " & lngCnt & " 行を処理しています。" Case 5000 Range("D3") = "現在 " & lngCnt & " 行を処理しています。" End Select End Sub 「lngCnt」(処理行)を引数にしています。 この引数を渡す処理は出来ますでしょうか?

tarobei
質問者

補足

ありがとうございます。 ラベルコントロールって何でしょうか。 よろしければご教示ください。 よろしくお願いします。

  • capa0218
  • ベストアンサー率24% (54/222)
回答No.1

同じ処理を繰り返すって言うのは ループを使っているのでしょうか? 何処かのセルに 処理ごとに”現在○○行を処理しています”って入れる ではダメでしょうか? 同じセルに入れていくようにすれば カウンターのように見えると思いますよ

tarobei
質問者

お礼

ありがとうございます。 おっしゃる通り、この方法でいけますね! でももうちょっと欲を出して、ウィンドウを開いてかっこよく(?)してみたい気がします。 ありがとうございました。

関連するQ&A

  • エクセルマクロで進捗状況を表示させたい

    いつもお世話になります。こんなことできますか? プログラムの進捗状況を表示させたいのですが、 ステータスバーの表示だと隅っこの方ですし、表示も小さいので、画面の真ん中にメッセージウィンドウを出せないかななんて考えてます。 進捗状況は刻々と変わるので、Msgboxだといちいち「OK」を押さないといけなくなり実用的ではありません。 画面真ん中に表示する方法、何かいい方法ありませんか。

  • Excelマクロ

    宜しくお願い致します Excel2007でマクロを使用します 例えば、 MsgBox"今日は" と書きます (その下には、あることを実行される「タグ?」が色々書かれていて実行されます) 実行ボタンを押すと、「今日は」と背景が白色、文字が黒色でメッセージが表示されますが、この文字とか背景の色を目立つ様に好きな色に変える方法は有るでしょうか。

  • エクセルマクロ インプットボックスの使い方

    エクセル2013です。 マクロの途中で作業者にマウスで列を選択してもらい その取得した列番号を使って、いろいろ処理を行うマクロを作りました。 Sub 実験() Dim マウス選択 As Range Dim 選択列 Dim 選択月表示 Dim 質問 Dim 最終列 Dim 最終行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 On Error GoTo myError Set マウス選択 = Application.InputBox("編集したい月の列を選択してください", Type:=8) 選択列 = マウス選択.Column 選択月表示 = Cells(8, 選択列).Value 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" Else MsgBox "プログラムを中断します" Exit Sub End If ---処理内容---- myError: MsgBox "キャンセルが押されました。プログラム終了します。" End Sub 通常列を選択してくれればインプットボックス内には $V:$V などと表示されますが 行を選択されると $35:$35 などと表示され セルの一部を選択されると $D$40 などと表示されます。 行やセルを選択してもエラーなく最後まで進みますが選択した場所によっては とんでもない結果になってしまいます。 基本、列以外を選択したらメッセージボックスでアラームするか プログラムを停止させたいのですがどのような方法が有りますでしょうか? よろしくお願いします。

  • エクセルマクロ 自動でMSGボックスを閉じてクリッ

    エクセル2010を使っています。 Sub ボタン2 をクリックし、処理が終わったときに、メッセージボックスを出しているのですが、それを数秒後に自動で閉じた後、自動でボタン1をクリックさせたいのですが。 ご存知の方よろしくお願いいたします。 MsgBox "抜き出し終了 "

  • Excel 指定行削除マクロ

    Excel の表で、「行削除」ボタンを押したとき、次の手順で動くマクロを作りたいと思っています。 1.メッセージボックスで削除する行のクリックをうながす。 2.該当行がクリックされ、メッセージボックスのOKボタンが押される。 3.2番目のメッセージボックスに変えて、クリックされた行の A 列のセル(名称欄)   の値(○○)をボックスに取り込んで「○○を削除します」と表示させる。 4.OKボタンが押されたら、その行全体を削除する。 なるべく簡便な方法を教えてください。よろしくお願いします。

  • エクセル上でVB6を使っています。

    エクセル上でVB6を使っています。 時間のかかる計算をしている最中は、 小さいウィンドウを画面中央に出して、処理中であることを知らせたいです。 MsgBox ("計算中です。")と入れるとOKボタンが表示されます。 これだとOKを押されて、メッセージが消えるので、良くありません。 OKボタンを非表示にして、計算が終わったらメッセージを消すことは出来ませんでしょうか?

  • Excel97で自動的に行挿入させるマクロのつくりかた。

    こんにちは。 マクロ超超初心者です。 WN98SE、Excel97です。 やりたいことは、たとえば、 B1に1001 B2に1001 B3に1002 B4に1003    ・    ・    ・ と入っていたとします。 ここで、1001から1002に変わる(又、1002から1003に変わる)とき、その間の行に3行空行を自動的に挿入させたいのですが、どういうマクロの記述をすればできるのでしょうか・・・。 それを新規ブックでもボタンひとつで実行させるにはどのような設定をしたらよいでしょうか。 どなたか教えてください。 よろしくおねがいします。

  • Excel2003でのマクロをExcel2010で

    Excel2003で動くことを確認されているマクロが組み込まれているスプレッドシートをExcel2010で使おうとすると以下のエラーメッセージが出ます。 「コンパイルエラー プロジェクトまたはライブラリが見つかりません」 そしてマクロのコードが表示されます。 Excel2010を擬似的にExcel2003に変更してこのプログラムを使いたいと考えています。やり方を教えてください。 なおWindows7です。

  • マクロがわかるとは?

    MOUSのExcel、Word上級の試験合格しているのですが、マクロ組めるってことだよね?すごいね!と言われたことが過去に何度かあります。 MOUS試験で出てくるマクロってただ開始ボタン押して、何か処理して終了ボタン押して…ってだけだったような気がするので、別に「組める」ってほどのものでもないと思うのです(--; 「マクロ組める」というからにはVBAでプログラム作れるレベルを想像してしまうので、初めて「マクロ組めるんだね」と言われたときは、以前のMOUS試験にはVBA出てたのかと思ったくらいです。 世間一般的にExcel、Wordのマクロを理解しているというのはどういうレベルのことなのでしょうか? やっぱりボタンで処理を記録するってことだけですか?それともVBAでプログラム書けるってことですか?

  • エクセルのコピー貼り付けマクロ

    EXCEL2003を使用しております。 用品の使用記録簿を作っております。 Sheet”入力”で日付や社員名や品目を入力し、(登録)のマクロボタンを押せばSheet”集計”(約100行)に1行目から順次貼りつく表を考えているのですが、うまくできません。 ご存知の方は、教えてくださいお願いいたします。

専門家に質問してみよう