前提・実現したいこと
いつもこちらのコミュニティには大変お世話になっております。現在VBAを勉強中の初心者です。
質問中に不慣れな箇所が多々あるかとは存じますが、何卒ご容赦いただけますと幸いです。
(また、調べが甘い箇所がありましたら大変申し訳ありません)
ユーザーフォームのコンボボックスで選択した「月」列の連番、金額、内容を、連番別の請求書テンプレートに転記するのが最終目標です。
月によっては出力の必要のない連番もありますので、連番を基準に連番の最終行まで処理を行いたいと思っています。
例えば、ユーザーフォームで「4月」を選択した場合、
A社とC社の情報だけを請求書に転記したいです。
連番 | 1月 | 2月 | 3月 | 4月 | 5月 | 内容 |
---|---|---|---|---|---|---|
A社 | 5,000 | 2,000 | 3,000 | 3,000 | 〇〇〇 | |
B社 | 1,500 | 5,000 | 3,000 | △△△ | ||
C社 | 1,500 | 5,000 | 1,500 | 1,500 | 5,000 | □□□ |
発生している問題
以下のマクロを実行すると、処理が固まってしまいます。
おそらくFor Next文の書き方が悪いのでしょうが、ネットで調べても原因がわかりませんでした…
どなたかミスに気付かれた方がいらっしゃいましたら、お手数ですがご教授いただければ幸いです。
Private Sub 印刷ボタン_Click() '以下、ユーザーフォームに入力した情報の変数宣言 Dim 入力月 As String: 入力月 = ComboBox1.Text InputBox.Hide '以下、請求月の検索 Dim 請求月 As Range Set 請求月 = Worksheets("サンプル").Range("B1:F1").Find(What:= 入力月, LookAt:=xlWhole) If 請求月 Is Nothing Then MsgBox "シート内に対象の月がありません。請求月を選択しなおしてください" Exit Sub End If '金額のセルを選択 請求月.Select Rows(ActiveCell.Row + 1).Select Dim 金額 As Range Set 金額 = ActiveCell '連番の数だけ以下の処理を繰り返す Dim 連番最終行 As Long 連番最終行 = Worksheets("サンプル").Cells(Rows.Count, 1).End(xlUp).Row Dim 連番 As Long For 連番 = 2 To 連番最終行 'だいたい全部で300行くらいです '金額列が空白だった場合、金額が次の行に進む If 金額 = "" Then 金額 = 金額 + 1 Else '金額が空白でなかった場合 'テンプレートを新規で開く(長いため省略) '以下、契約番号の転記処理 With ActiveSheet .Range("A1").Value = 連番 '連番の転記 .Range("C15").Value = 金額 '金額の転記 .Range("F20").Value = 連番.Offset(0, 6).Value End With 'テンプレートを新規で指定の場所に保存する(長いため省略) 金額 = 金額 + 1 '次の行に進む End If Next 連番 '次の行に進む End Sub
ActiveCellはどこを指定してますか。
何か決まりがあるのでしょうか。
処理が固まると書いてありますが処理が重すぎて見た目上は動かない(処理は途中まで走っている)のでしょうか。
それともどこか無限ループにひっかって終われないのでしょうか。
質問の表では、月は横に並んでいますが、コードでは請求月をB2:B6から検索してます。そこからおかしくないですか。
>radames1000様
拙い内容にも関わらず、いつもコメントいただき本当にありがとうございます…!
金額セルを取得するための良いアイデアがひらめかず、
単純に「検索した月の真下のセルを取得する」といった考えで
検索した「月」セルを一度選択し、そのセルの真下のセルを選択し、
そこでActiveになったセルを「金額」セルとして設定する…方法をと思っておりました…
あ、月の範囲違いでわたしの理解が追い付いていませんでした。失礼しました。考え方は理解しました。
>msuguru様
コメントいただきありがとうございます!
コマンドボタンを押すとカーソルと進捗インジケーターが瞬時にチカチカと切り替わり、
10秒もせずに画面全体に白いもやがかかるという感じです。
ただ、他のご回答者様方のご指摘にありますようにFor~Next文以外にも
色々と不味いところがあるようですので、申し訳ありませんがもう一度調べなおしたいと思います…
拙い質問にも関わらずコメントいただきありがとうございましたm(_ _)m
>hetena19様
この間は助けていただきありがとうございました!
今回も初歩的な内容にも関わらずコメントいただきありがとうございます…!
全くその通りです。修正いたしました。初歩的なミスを…申し訳ありませんでした…
直接的な回答では無いのでこちらに。
Excel VBAのデバッグのやり方を学習して下さい、以下のページが参考になるかと思います。
https://www.tipsfound.com/vba/01010
>kaina様
わー!正式なデバッグのやり方があるのですね…!
何回もマクロを実行してエラーが表示されなくなるまで行うのが
デバッグなのかと今までずっと勘違いしておりました。
ご指摘いただかなければ、ずっと分からずじまいでした。
ご教授いただき、本当にありがとうございました!熟読して出直します!
データを修正してもやはり白くなった(止まる)場合は処理速度も原因かもしれません。
下記にも一度目を通してみてください。
http://www.fingeneersblog.com/1276/
https://excel-ubara.com/excelvba4/EXCEL215.html
このくらいのボリュームであれば、ご自分で解決可能と思われますので
チャレンジしてみて下さい。
>msuguru様
そういう可能性もあるのですね…とても勉強になりました!
ご丁寧に教えていただき本当にありがとうございました!
>kaina様
はい!ありがとうございました!頑張ります!
ネットで調べてみると、デバッグのやり方の動画や
記事がたくさん公開されておりましたので、色々見て勉強いたします!
回答1件
あなたの回答
tips
プレビュー