• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ 繰り返し処理の制御方法について)

エクセルマクロ繰り返し処理制御方法

このQ&Aのポイント
  • エクセル初心者のため、登録用のシートから印刷用のシートへの転記を考えています。
  • A列のセルの値が変わるまで、同じ処理を繰り返したいです。
  • エラーメッセージに従い、Loopの位置を変えましたが、無限ループに陥っています。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! こういうことですかね? 仮にA列の値が「2」(固定している間)だけLOOPするのであれば Sub test1() Dim i As Long i = 1 Do While Cells(i, 1) = 2 With Cells((i - 1) * 5 + 1, 10) .Value = Cells(i, 2) .Offset(, 1) = Cells(i, 3) .Offset(, 2) = Cells(i, 4) .Offset(1) = Cells(i, 5) .Offset(2) = Cells(i, 6) .Offset(3) = Cells(i, 7) End With i = i + 1 Loop End Sub こんな感じですかね? もし、A列の値が決まってなくて同じ値が連続するだけLoopするのであれば Sub test2() Dim i As Long With Cells(1, 10) .Value = Cells(1, 2) .Offset(, 1) = Cells(1, 3) .Offset(, 2) = Cells(1, 4) .Offset(1) = Cells(1, 5) .Offset(2) = Cells(1, 6) .Offset(3) = Cells(1, 7) End With i = 2 Do While Cells(i - 1, 1) = Cells(i, 1) With Cells((i - 1) * 5 + 1, 10) .Value = Cells(i, 2) .Offset(, 1) = Cells(i, 3) .Offset(, 2) = Cells(i, 4) .Offset(1) = Cells(i, 5) .Offset(2) = Cells(i, 6) .Offset(3) = Cells(i, 7) End With i = i + 1 Loop End Sub こんなんではどうでしょうか? あくまで個人的な考えですが、Loopを使うのであれば変数は一つにした方が良いと思います。m(__)m

Yeyen
質問者

お礼

tom04 さん ありがとうございます。昨日は質問後しばらく待ったものの、あの時間に回答をいただけるとは思っていなかったので、遅くなりました。大変参考になり、またA列の値が可変である後段のコードで、希望通りの実行ができました。ループ処理の制御のため、A列の最初の行の処理と2行目以降の処理を分けること、「With Cells((i - 1) * 5 + 1, 10)」の「(i - 1) * 5 + 1」の考え方も、大変勉強になりました。「Loopを使うのであれば変数は一つにした方が良いと思います」との点も留意したいと思います。ありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

転記元の姿: 1行が1データ A列に大分類を列記 BCDEFG列に各データ タイトル行はとりあえず無しにして1行目から実データ 転記先の姿: 5行1組で転記元1行データをこの5行の中に配置 大分類が変わるまで下向けに追記 大分類が変わったら印刷,リセットして1行目に戻る タイトル行は無しにしてとりあえず1行目から実データ 基本パターン: do A列が空っぽになるまで繰り返す  転記先初期化  do   1行を5行に転記・追記する  loop 大分類が変わるまで繰り返す  大分類が変わったら印刷する loop 作成例: sub macro1()  dim i, j  i = 1  do until cells(i, "A") = ""   j = 1   range("J:L").clearcontents   do    cells(j, "J") = cells(i, "B")    cells(j, "K") = cells(i, "C")    cells(j, "L") = cells(i, "D")    cells(j + 1, "J") = cells(i, "E")    cells(j + 2, "J") = cells(i, "F")    cells(j + 3, "J") = cells(i, "G")    j = j + 5    i = i + 1   loop while cells(i, "A") = cells(i - 1, "A")   worksheets("シート名").printout  loop end sub

Yeyen
質問者

お礼

keithin さん ありがとうございます。昨日は質問後しばらく待ったものの、あの時間に回答をいただけるとは思っていなかったので、遅くなりました。まず希望通りの実行もできました。また考え方を当初に記載していただいたおかげで、ループの前と後での条件判断が理解でき、今後の参考になりました(実際に条件判断やその位置をkeithin さんのコードから変えて、動きやエラーも確認できました…また無限ループに陥ったこともありましたが。)ありがとうございました。今後もお世話になるかと思いますが、よろしくお願いします。なお、大変恐縮なのですが、tom04 さんからも事前に有意なご回答をいただいており、今回お二方両方のご回答に優劣はつけかねるので、時間の早かったtom04 さんをベストアンサーとさせていただくこと、御容赦下さい。ありがとうございました。

関連するQ&A

専門家に質問してみよう