VBA進捗状況を可視化(数値)でお願いします

このQ&Aのポイント
  • VBA進捗状況を可視化するための簡単な記述方法を教えてください。
  • 1000回以上の作業を繰り返し、その進捗状況を数値で表示する方法を教えてください。
  • VBA上級者の方、お願いします。実行の順番も教えてください。
回答を見る
  • ベストアンサー

VBA進捗状況を可視化(数値)で

お願いします。いま以下の作業をかりに1000回繰り返し、なおかつ その進捗状況を可視化(数値で)する一番簡単な記述は どのように書けばいいのでしょうか。実行の順番も併せて VBA上級者の方、よろしくお願いいたします。 Sub 移動() ' ' 移動 Macro Range("D6:D15").Select Selection.Copy Range("H6").Select ActiveSheet.Paste Columns("G:G").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("C2").Select End Sub

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.4

No.2、No.3の蛇足です。 Range("D6:D15")を書式など無しにデータだけRange("H6:H15")にコピーしたいのでしたら以下のようにした方が実行速度は早いです。列の挿入も一行にしてます。 Sub 移動() ' ' 移動 Macro Range("H6:H15").Value = Range("D6:D15").Value Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove End Sub 最後にあった Range("C2").Select は Test() の最後でいいと思います。

krikrikirkri
質問者

お礼

KKKKKm 様 初心者に分かりやすく、何パターンも記述して頂き ありがとうございました。実行出来ました。 いろいろ応用させていただきます。ありがとうございます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.3

No.2の訂正 最後の '表示を戻します Application.ScreenUpdating = False は '表示を戻します Application.ScreenUpdating = True の間違いです フォームのテキストボックスに表示するとかプログレスバー使うとかもありますが、簡単にという事なのでステータスバーで。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

ステータスバーにカウントを出します。 Sub 移動() ' ' 移動 Macro Range("D6:D15").Select Selection.Copy Range("H6").Select ActiveSheet.Paste Columns("G:G").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("C2").Select End Sub '同じモジュールにおいて↓こちらを実行してください。 Sub Test() Dim i As Long Dim mCount As Long Dim MaxCount As Long '表示がバタバタするので止めます、 Application.ScreenUpdating = False MaxCount = 1000 For mCount = 1 To MaxCount 移動 '移動を実行します。 DoEvents Application.StatusBar = "移動中 (" & mCount & "/ " & MaxCount & ")" Next '最後にステータスバーを元に戻します。 Application.StatusBar = False '表示を戻します Application.ScreenUpdating = False End Sub

回答No.1

VBAで進捗状況を数値で表示するには、繰り返し処理の中で進捗を表示するためのメッセージボックスやセルへの出力を行うことができます。以下に、簡単な方法を示します。 Sub ProgressVisualization() Dim i As Long Dim totalRepetitions As Long Dim progressCell As Range totalRepetitions = 1000 ' 繰り返し回数 Set progressCell = Range("A1") ' 進捗状況を表示するセルを指定 For i = 1 To totalRepetitions ' 移動処理の呼び出し Call 移動 ' 進捗状況をセルに出力 progressCell.Value = "進捗: " & i & " / " & totalRepetitions DoEvents ' VBAの処理を一時停止し、他の処理を実行する Next i MsgBox "処理が完了しました。", vbInformation, "完了" End Sub Sub 移動() ' 移動 Macro Range("D6:D15").Select Selection.Copy Range("H6").Select ActiveSheet.Paste Columns("G:G").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("C2").Select End Sub 上記のコードでは、ProgressVisualizationという新しいサブプロシージャを作成し、その中で移動サブプロシージャを1000回繰り返し実行しています。繰り返し処理の中で、進捗状況をセルA1に数値で出力しています。 また、DoEvents関数を使用することで、VBAの処理を一時停止し、他の処理を実行できるようにしています。これにより、進捗状況がリアルタイムで更新されます。最後に、処理が完了したことをメッセージボックスで通知します。

krikrikirkri
質問者

お礼

FORSPOKEN様 面倒な質問にも関わらず、丁重な記述ありがとうございました。VBA超初心者ですので、又わからないことが出ましたら、よろしくお願いいたします。

関連するQ&A

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

  • VBAマクロエラー【オーバーフローしました。】

    以下のVBAマクロで突然エラーが出るようになってしまいました。 原因がわからず困っています。 どなたかご教授ください。 該当部分 :S = Range("B2").End(xlDown).Row エラーMrg:実行時エラー'6': オーバーフローしました ----------マクロ文---------- Sub 部担コード読み替え() Dim R_Count As Integer Dim P_Sheet As String Dim S As Integer 'データ取込用のファイルを開く Workbooks(D_Book).Activate Sheets("Data1").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("Data2").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Columns("G:G").Select Selection.Insert Shift:=xlToRight Range("G2:G" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("G1").Value = "キー" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub

  • excel vba

    (1)下記のマクロに出てくるApplication.CutCopyMode = False というのは何でしょうか。 (2)また自分でマクロ記録してあるシートを、別のシートにコピーしたとき Application.CutCopyMode = False Selection.Copy というのが、付くときとつかないときがあったんですがなぜそのようなことがおきるのか。 (3)またSelection.Copyというのは何ですか。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/1/11 ユーザー名 : ××××× ' ' Workbooks.Open Filename:="C:\aaa\bbbbb\cccc\aaaa_1.xls" Columns("H:H").Select Application.CutCopyMode = False Selection.Cut Columns("E:E").Select Selection.Insert Shift:=xlToRight Columns("I:I").Select Selection.Cut Columns("G:G").Select Selection.Insert Shift:=xlToRight With Selection.Font .Name = "MS 明朝" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With ActiveSheet.PageSetup.PrintArea = "$A$1:$L$61" ActiveWorkbook.Save End Sub

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

  • 離れた列をvbaで数値で選択するには?

    Sub Macro1() Range("a:c,e:g").Select End Sub を数値にしたいのですが、 Sub Macro2() Range(Columns(1), Columns(3) & ":" & Columns(5), Columns(7)).Select End Sub だと、rangeでコンパイルエラーになります。 http://okwave.jp/qa/q7329478.html を見たのですが、 どうすればいいのかわからないので教えてください。

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • VBAの勤務割表の式を短く

     月間の勤務割表を作成しています。 1列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)とし1列3行を名前の定義で13種類作成してあります。 別シートの各セルの入力番号に応じて13種類を貼り付けていますが、式を簡単にできませんでしようか?  お教えくださいませんでしょうか?勉強不足は否めませんが。 尚名前の定義は、1行3列に1--で勤務1・""-""で日勤・""公休""で公等にしてあります。 OS Windows7 Office2010 Sub 図形の貼付け2() If Worksheets("メイン").Range("J9").Value Then Select Case Worksheets("メイン").Range("J9").Value 1人-1日 Case 1: ActiveSheet.Range("勤務1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 2: ActiveSheet.Range("勤務2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 3: ActiveSheet.Range("勤務3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("日勤1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("日勤2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("日勤3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select Else Select Case Worksheets("メイン").Range("I9").Value Case 2: ActiveSheet.Range("明け").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("夜勤").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("公").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("有").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 7: ActiveSheet.Range("特").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 8: ActiveSheet.Range("振").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 9: ActiveSheet.Range("欠").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select End If End Sub

  • VBA エラー表示についての原因がわかりません

    お世話になります。 現在、社内集計作業のため下記のようなマクロを組みました。 条件として保存動作をすると実行…ということで諸々調べた結果、VBE→ThisWorkBookから指定のプロシージャを選んで、その中にコードを記入する、ということが多数でしたので、それに倣いました。 ところが、いざ下記コード内容で実行しようとすると「インデックス範囲が有効ではありません」とストップをかけられる上、最初の新規ワークブック追加~コピペすら正しく行われません。 標準モジュールでは正しく実行してくれるのですが、このようなケースでエラーになる理由がよくわかりません。 つきましては、下記コードがエラーとなる理由、そして可能であればどのように修正をすればよいかお教えください。 ご面倒をおかけしますが、よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' Macro2 Macro ' ' Columns("A:A").Select Range("A:FU").Select Selection.Copy Workbooks.Add ActiveSheet.Paste Columns("FU:FU").Select Application.CutCopyMode = False Selection.Copy Columns("FT:FT").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("FT:GF").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("A:A").Select Range(Selection, Selection.End(xlToRight)).Select Selection.NumberFormatLocal = "G/標準" Sheets("Sheet3").Select Application.DisplayAlerts = False 'メッセージを出さない ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = False 'メッセージを出さない Sheets("Sheet2").Select ActiveWindow.SelectedSheets.Delete Range("A1").Select Columns("A:A").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks _ :=False, Transpose:=False ChDir "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)" Application.DisplayAlerts = False 'メッセージを出さない ActiveWorkbook.SaveAs Filename:= _ "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)\第○営業部.xlsx", _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ActiveWindow.Close End Sub

  • vba 不揃いの行数にカーソル位置対応

    os_xp //// ex_2003 Sub goo() ' goo Macro ' Keyboard Shortcut: Ctrl+g ' Range("A65524").Select Selection.End(xlUp).Select Rows("669:669").Select '(1)-----次回及び 他のシートは不揃いの為 Selection.Copy Rows("670:670").Select '(2)-----(1)が位置が変化するからここも対応 ActiveSheet.Paste Application.CutCopyMode = False Range("A669:F669").Select '-----範囲の変更ありの予定 Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False Range("BD669:BG669").Select '-----範囲の変更ありの予定 Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False Range("A672").Select '(3)-----次回及び 他のシートは不揃いの為 最後に記録の2段下にカーソルが来て欲しい End Sub ' 'どのシートでも (1) (2) (3) が対応してくれないか?。 '

  • Excelマクロの繰り返しの書き方

    Excelマクロで、下記のような操作を、B4行から、B100まで 繰り返したいです。 このような行を、100行まで書くのは、面倒なので、 For Nextや、Do loopを使いたいのですが、 いろいろな指南書を読んでも、セル内の書式がイマイチ理解できないので、 申し訳ないのですが、どなたか、ご指南いただけないでしょうか? Range("B4").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("B6").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 同様な問題ですが、下記を50行繰り返したい、 上記のご回答をいただければ、下記も理解できると思うのですが 下記も作れないで困っています。できれば、これも教えていただければ助かります。 Range("A5").Select Selection.EntireRow.Delete Range("A6").Select Selection.EntireRow.Delete Excelのversionは2019です。 以上、よろしくお願いします。

専門家に質問してみよう