- ベストアンサー
EXCELマクロで空欄でマクロを止めることが出来ますか
次のような設定です。 氏名 国語 社会 数学 理科 音楽 1 山田 50 45 50 34 25 2 石田 18 34 46 34 78 … … … … … … … 40 山本 23 45 36 39 94 41 このような表があったときに1番から順に一人ずつ個票を作ります。印刷をしていきます。41番目の氏名が空欄なので印刷を終了させるというマクロは出来ますか。 マクロ作成レベルもツール→マクロで作成するレベルで行いたいのですが、出来ますでしょうか。教えてください。 できますか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 > 今はこの式が何を意味しているかわかりません。 このマクロを実際に試すくらいは出来ると考えて良いでしょうか? for ~ next や Do ~ Loop はループ処理です。 for i = 2 to xx は 変数 i が 2 から xx までインクリメントされます。 従って、Range("A" & i) は Range("A2")→Range("A3")→Range("A4")→→→Range("Axx")まで処理されます。 xx 部分にある Range("A65536").End(xlUp).Row は、A列最終セルから Ctrl+↑キーを押した動作と同様の処理で最終行の判定に良く使われます。 Do While ~ Loop は While が True のあいだ実行されます。 変数 i = 2 で Range("A" & i)<>"" ですから、Range("A2")が空白以外ならば Msgbox行が実行されます。 その後、i = i + 1 で変数 i をインクリメントし、While で再判定されます。 ちなみに、1帳票に個人別に差し込み印刷をしたいなら、Wordの差し込み印刷でExcelのリストを指定した方がはるかに簡単です。
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
出来るかって質問に対しては「出来ます」が回答になります。 > ツール→マクロで作成するレベル これがマクロ記録を意味するのであれば、マクロ記録だけでは厳しいです。 条件式を書き加えるなどの処理が必要でしょう。 下記は A2以降のA列の値をメッセージボックスで表示します。 (いちいちメッセージが出るので試す場合は A2~A5程度にデータを入れる事) Sub Test1() For i = 2 To Range("A65536").End(xlUp).Row MsgBox Range("A" & i).Value Next i End Sub Sub Test2() i = 2 Do While Range("A" & i) <> "" MsgBox Range("A" & i) i = i + 1 Loop End Sub
補足
昔DOS版でマクロを作ったのですが、それから15年がたちました。 その時もサブルーチンで作りましたが。 今はこの式が何を意味しているかわかりません。 ご都合が良ければ細かく説明してもらえますか。 難しいようでしたら、参考になる、URLや本などでも結構です。 これからまた少しマクロを勉強していきたいと思います。 よろしくお願いします。 Sub Test1() For i = 2 To Range("A65536").End(xlUp).Row MsgBox Range("A" & i).Value Next i End Sub Sub Test2() i = 2 Do While Range("A" & i) <> "" MsgBox Range("A" & i) i = i + 1 Loop End Sub
- marbin
- ベストアンサー率27% (636/2290)
空白になったらストップ、とするなら、 Do While Cells(i,1).Value <> "" i = i + 1 '処理 Loop でいけるとおもいます。
- marbin
- ベストアンサー率27% (636/2290)
WorkSheets(1).Cells(65536,1).End(XlUp).Row というような感じにすると、A列の最終行を取得できます。 最終行までを印刷、としてもいいと思います。
お礼
ご丁寧にありがとうございました。 >ちなみに、1帳票に個人別に差し込み印刷をしたいなら、Wordの差し込み印刷でExcelのリストを指定した方がはるかに簡単です。 私もこの方法はわかるのですが。 これからもう少しマクロの作成を勉強したいと思います。 そうするといつの日か、この式を活用できると思います。 ありがとうございました。