• ベストアンサー

EXCELマクロで空欄でマクロを止めることが出来ますか

次のような設定です。   氏名 国語 社会 数学 理科 音楽 1 山田 50 45 50 34 25 2 石田 18 34 46 34 78 …  …  …  …  …  …  … 40 山本 23 45 36 39 94 41  このような表があったときに1番から順に一人ずつ個票を作ります。印刷をしていきます。41番目の氏名が空欄なので印刷を終了させるというマクロは出来ますか。 マクロ作成レベルもツール→マクロで作成するレベルで行いたいのですが、出来ますでしょうか。教えてください。 できますか。  

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.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のリストを指定した方がはるかに簡単です。

pi-man39
質問者

お礼

ご丁寧にありがとうございました。 >ちなみに、1帳票に個人別に差し込み印刷をしたいなら、Wordの差し込み印刷でExcelのリストを指定した方がはるかに簡単です。 私もこの方法はわかるのですが。 これからもう少しマクロの作成を勉強したいと思います。 そうするといつの日か、この式を活用できると思います。 ありがとうございました。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

出来るかって質問に対しては「出来ます」が回答になります。 > ツール→マクロで作成するレベル これがマクロ記録を意味するのであれば、マクロ記録だけでは厳しいです。 条件式を書き加えるなどの処理が必要でしょう。 下記は 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

pi-man39
質問者

補足

昔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)
回答No.2

空白になったらストップ、とするなら、 Do While Cells(i,1).Value <> "" i = i + 1 '処理 Loop でいけるとおもいます。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

WorkSheets(1).Cells(65536,1).End(XlUp).Row というような感じにすると、A列の最終行を取得できます。 最終行までを印刷、としてもいいと思います。

関連するQ&A

  • 超初心者がマクロ集計をすることになりました

    マクロを使った集計システムを作成することになったのですが、マクロのマの字も知らない初心者です。 以下の表を集計するマクロを初心者向けで教えてください。 氏名        作業No   月No   時間内   時間外   社員No 山本太郎      3210      5     8      0      120 山本太郎      5120      8     8      12     120 山本太郎      3210      5     4      0      120 山田花子      1203      4     8      2      320 山田花子      3210      5     8      12     320 佐藤治郎      5201      10    8      8      91 佐藤治郎      3210      5     8      8      91 佐藤治郎      3210      5     8      12     91 という表があるとします。 これを、以下のようにしたい場合のマクロを教えてください。 氏名        社員No    作業No    時間内   時間外 山本太郎       120      3210-10    12       0 山本太郎       120      5120-8     8       12 山田花子      320      1203-4     8        2 山田花子       320      3210-5     8       12 佐藤治郎       91       5201-10    8        8 佐藤治郎       91       3210-10    16       20   ※作業Noと月Noのデータを“-”をつけて結合しています。 ※1人が同じ「作業No+月No」の作業を複数行っていたら、合計します。 すみませんが、よろしくお願いします。

  • 連続印刷の簡単なマクロを組みました。どなたかお助け下さい。

     以下のようなマクロを組みました。(マクロ初心者です)下記にでてきます一覧表・個票の作成や下記に続いて入力済みの印刷のマクロには問題ないとは思いますが以下のマクロが全く動きかけしないのですが何か原因は考えられますか?今日一日中考え込んでいました。最初は、コンパイルエラーで変数の定義ができてないとの表示が出ましたので1文、付け加えたのですが全く実行されません。  'リストを1行1枚の伝票形式で印刷するマクロ Sub 個票発行() Worksheets("個票").Activate Dim 個票カウンタ As Integer For 個票カウンタ = 1 To _ Application.WorksheetFunction.Count(Worksheets("一覧表").Range("A1:A88")) Range("B1") = 個票カウンタ 印刷 Next 個票カウンタ End Sub よろしくお願い致します。 最近サーバ負荷の表示と共になかなかマイページにつながりませんので御礼の返事が遅れました折にはお許し下さいませ。

  • エクセルでマクロを使って印刷をする方法

    エクセルでマクロを使って印刷する方法がわかりません。 具体的には、  クラス  番号   名前 レベル1  01   斉藤 レベル2  02   鈴木 レベル1  03   高橋 レベル3  04   内藤 レベル2  05   山田 レベル1  06   河野 レベル3  07   佐々木 レベル1  08   山口 レベル3  09   高田 レベル2  10   杉野 このような名簿が実際は600人近く並んでいます。 クラスをフィルターにかけて、レベル1グループ、2グループ…と各グループごとに 名簿を作成しています。 現在、フィルターをかけて、各グループを1回ずつ出して印刷しています。 (各グループ、20人前後の名簿になっています) 実際、グループが50種類ぐらいあるため、 できれば、マクロを使って一度に印刷したいのですが、 良い方法をご教授願えないでしょうか? マクロは、全くの初心者で、現段階ではマクロはできておりません。 よろしくお願いします。

  • マクロで・・・・

    マクロの設定で困っています 表作成をしているのですが 名前 個数   単価   合計 山田 11    100    1100 田中 10    100    1000 広瀬 10    200    1000 山本 木村 高野 合計 31         3100 というような表作成しています。 入力する毎に数値は入力の度に変ります。 にたとえば 名前 個数   単価   合計 山田 11    100    1100 田中 10    100    1000 広瀬 山本 木村 高野 合計 21         2100 とこういう場合があったりするのですが、“セルを表示しない”を使ってマクロで空白セルの箇所を認識してセルを折りたたむことが出来ないでしょうか?

  • 教えて!エクセルでの印刷マクロ

    シート1に下のようなデータベースがあります。  受付番号 氏名 〒 住所    1    2    3 データを1から順に入力して、入力内容が日によって違いがあるのですが、入力した分だけ印刷できるマクロがわかりません。 前日、1から15まで入力して印刷、今日は16から50まで入力して、その分(16~50まで)を印刷(前日印刷した分は印刷しない)、次の日は50件入力(印刷は51~100まで)となるようなマクロです。 どなたか、ご教授くださいませ。 

  • エクセルで変数が2つある連続印刷

    VBA初心者です。困っていますのでよろしくお願いします。 エクセルでVBAを使って,個人の成績個票を連続印刷する方法について教えてください。 一枚の用紙に,上半分は1組の生徒の個票を,下半分には2組の生徒の個票を連続的に印刷します。 「個票sheetセルE3」には1組の生徒番号を,「個票sheetセルE27」には2組の生徒番号を連続的に流し込み,VLOOKUP関数によって別sheetにある成績データを読み込んでいきます。 仮に2枚(1枚は「1組の1番の生徒(101)+2組の1番の生徒(201)」の個票,もう一枚は「1組の2番の生徒(102)+2組の2番の生徒(202)」の個票)を印刷するコードはどうすれば良いのでしょうか。 下のようなコードでは組み合わせ可能な4枚の個票が印刷されてしまいました。 VBAの専門家の方,ご助言いただければ幸いです。 Sub 一組二組印刷() '個票を印刷するマクロです Dim 番号一組 As Integer For 番号一組 = 101 To 102 Sheets("個票").Range("E3").Value = 番号一組 Sheets("個票").PrintOut Next 番号一組 Dim 番号二組 As Integer For 番号二組 = 201 To 202 Sheets("個票").Range("E27").Value = 番号二組 Sheets("個票").PrintOut Next 番号二組 End Sub

  • 同じ項目よりデータを取得する

    はじめまして。 初心者でまだよく理解できていないのですが、 よろしくお願いします。 教えていただきたいことは テーブル 受講履歴 出席番号 氏名 教科1 教科2 教科3   ―――――――――――――――――――  1001    山田    2    3    5  1002    武田    4    2     1003    斎藤    5    1      1004    山本    5    3    2  1005    鈴木    3    1     テーブル 教科 教科ID 教科名 ―――――――   1   国語   2   数学   3   理科   4   社会   5   音楽 といったテーブルがあったときに、出席番号を指定すると 氏名、教科1、教科2、教科3を取得するSQLを教えて頂きたいです。 たとえば出席番号1002にした場合、  氏名 教科1 教科2 教科3 ――――――――――――――  武田  社会  数学 といった感じです。 よろしくお願いします。

  • エクセルのマクロ

    【シート1】 見積書フォーマットを作成しており、見積発行依頼があればこのシートに記入します。 【シート2】 シート1で作成した見積データを見積No.順に保存するシート。 ここからが、質問です! ・シート1で作成した見積のデータをマクロでシート2に蓄積していきたい。 ・シート2に蓄積してある見積データの見積No.を選択すると自動的にシート1に見積内容が反映され、過去の見積書を印刷することが可能。 このようなことをしたいのですが、マクロをどう組めば良いのかわかりません。 どなたか教えてください! 仕事で困ってます・・・。

  • 助けてください。印刷マクロを

    OS:XPSP2,Excel2002で印刷マクロを教えてください。 "入力シ-ト"に顧客管理用で下のようなデ-タが入っています。      A列     B列   C列  2行目:受付番号   氏名   住所; ・・・・・・S(列) 3行目 80001   玉田                      80002   山田      80003   上田       ・       ・ 受付番号はすでに85000くらい(不確定)まで入力済みです。 氏名以下をデ-タとして日々入力していき作成し、件数がかなり溜まった(数百件くらい)ときに印刷をするといった仕事です。 マクロを使って、印刷したいデ-タをMsgで”最初の番号を入力”で受付番号を入れて次に同じようにMsgで”印刷最後の番号を入力”で受付番号を入れて、その間のデ-タをA列からS列まで印刷するものです。  

  • データの集計・表示について

    エクセルやgoogleスプレッドシートで、下記のようなデータが入力されていたとします。 【元データ(シート)】         A B C D E F 1行目・・・ 山田 国語 英語  理科  社会  音楽 2行目・・・ 鈴木 理科 社会  英語  数学  国語 3行目・・・ 山田 数学 国語  英語  音楽  社会 4行目・・・ 山田 社会 英語  音楽  理科  数学 上記のデータが入力されているシートから、山田さんのデータのみを別のシートへ下記のように 集計?表示?するような関数ってありますでしょうか? 【作りたいデータ(シート)】 山田のデータのみのシート        A B C D E 1行目・・・国語 英語  理科  社会  音楽 2行目・・・数学 国語  英語  音楽  社会 3行目・・・社会 英語  音楽  理科  数学 希望としては、元データシートに5行・6行とどんどんデータを入力をしていく度に、 元データシートA列の名前で判断をし個人別で別シートにデータを1行目から順に並べたいです。 このような事は可能でしょうか? いろいろと調べてみましたがうまく調べられずわからなかったので、 質問させていただきました。 わかる方いらっしゃいましたら、回答をお願いいたします。

専門家に質問してみよう