実現したいこと
初めまして。VBA触りたての初心者です。
参考サイトを見ながら、一つのエクセルシートのデータを項目ごとに分けるVBAを組みました。(正常に稼働します)処理に時間がかからこともあり、おおよその終了時間や処理のパーセントが分かればいいなと思い、方法を探していました。その中でプログレスバーというものがあるとのことで、使用したいと思ったのですが、プログレスバーを動かすためのコードの書き方やシート分けのVBAのどの部分にプログレスバーのマクロを組み込めばいいかわからず困っています。ご助力頂ける方がいましたら嬉しく思います...!
拙い内容で申し訳ございません。少しでもお力添え頂けましたら嬉しいです。よろしくお願いいたします!
(シート分けの参考:https://fastclassinfo.com/entry/vba_sheet_tenki/)
★実現したいこと
・参考先のようなバーを作成したい
・大体の終わる時間を処理中に表示させたい
・バーが伸びていくようにしたい(ラベルを使用する)
・完了のメッセージボックスに、最終的な処理時間をのせたい
プログレスバーの参考:https://qiita.com/hetare001/items/ec062f4e9d3e91c9d2ee
発生している問題・分からないこと
参考サイトのようなプログレスバー(ラベルが伸びるように見えるもの)を作成したく、コードをどのように書けばいいか教えて欲しい
②VBAのどの部分に、プログレスバーのコードを加えればいいかわからない
該当のソースコード
Excel
1'プログラム0|変数設定の指定 2Option Explicit 3 4'プログラム1|プログラム開始 5Sub CreateSheets() 6 7 Appication.ScreenUpdating = False 8 9 'プログラム2|シート設定 10 Dim ws1 As Worksheet, ws2 As Worksheet 11 Set ws1 = ThisWorkbook.Worksheets("マクロ") 12 Set ws2 = ThisWorkbook.Worksheets("template") 13 14 'プログラム3|最終行を取得 15 Dim cmax1 As Long 16 cmax1 = ws1.Range("AV1048576").End(xlUp).Row 17 18 'プログラム4|「マクロ」シートをコピーして重複削除 19 Dim ws3 As Worksheet 20 ws1.Copy after:=ThisWorkbook.Worksheets(Worksheets.Count) 21 Set ws3 = ThisWorkbook.ActiveSheet 22 ws3.Range("A:AV").RemoveDuplicates Columns:=Array(48), Header:=xlYes 23 24 'プログラム5|プログラム4で重複削除したシートの最終行を取得 25 Dim cmax2 As Long 26 cmax2 = ws3.Range("AV1048576").End(xlUp).Row 27 28 'プログラム6|コピーしたシートを並び替え 29 With ws3.Sort 30 .SortFields.Clear 31 .SortFields.Add Key:=ws3.Range("AV1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 32 .SetRange ws2.Range("A2:AV" & cmax2) 33 .Header = xlNo 34 .MatchCase = False 35 .Orientation = xlTopToBottom 36 .SortMethod = xlPinYin 37 .Apply 38 End With 39 40 'プログラム7|重複削除、並び替えしたシートの2行目から最終行まで処理 41 Dim i As Long 42 For i = 2 To cmax2 43 Dim sample As String 44 sample = ws3.Range("AV" & i).Value 45 46 'プログラム8|「template」シートをコピー 47 Dim ws4 As Worksheet 48 ws2.Copy after:=ThisWorkbook.Worksheets(Worksheets.Count) 49 Set ws4 = ThisWorkbook.ActiveSheet 50 51 'プログラム9|コピーした「template」シートの名前を変更 52 ws4.Name = sample 53 54 'プログラム10|転記先の行数をn=2で初期化 55 Dim n As Long: n = 2 56 57 'プログラム11|「nouhin」シートのA列がtorihikiと一致したら転記 58 Dim j As Long 59 For j = 2 To cmax1 60 If sample = ws1.Range("AV" & j).Value Then 61 ws4.Range("A" & n & ":AV" & n).Value = ws1.Range("A" & j & ":AV" & j).Value 62 n = n + 1 63 End If 64 Next 65 66 'プログラム12|オブジェクト解放 67 Set ws4 = Nothing 68 Next 69 70 'プログラム13|重複削除、並び替えしたシートを削除 71 Application.DisplayAlerts = False 72 ws3.Delete 73 Application.DisplayAlerts = True 74 75 'プログラム14|新しいエクセルファイルとして保存 76 Dim newfilename As String 77 newfilename = Format(Date, "yyyy-mm-dd") & "_" & ThisWorkbook.Name 78 Application.DisplayAlerts = False 79 ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & newfilename 80 Application.DisplayAlerts = True 81 82 MsgBox "シート分けが完了しました", vbInformation 83 Application.ScreenUpdating = True 84 85'プログラム15|プログラム終了 86End Sub
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
シート分けのマクロは正常に稼働するようになりました!
プログレスバーの作成方法はなんとなく分かりましたがコードがうまく出来ず、プログレスバーを表示させること、動かすことができませんでした。
補足
◎シート分けのマクロの組んでいるエクセルブックについて
・シートは3種(参照、マクロ、template)
・AV列は 参照 のシートからVLOOKUPでデータを引っ張ってきている

2026/07/02 12:21
2026/07/02 17:33
2026/07/03 11:34
2026/07/03 15:30