• ベストアンサー

エクセルで簡単なマクロを組んだのですが…。

連続印刷を行う簡単なマクロを組んだのですが、指定行を変更しても1行目からまた印刷されてしまうのですがどうしてでしょうか?ちなみにこんなマクロです。 'リストを1行1枚の伝票形式で印刷するマクロ Sub 個票発行() Worksheets("個票").Activate Dim 個票カウンタ As Integer For 個票カウンタ = 1 To _ Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) Range("B1") = 個票カウンタ 印刷 Next 個票カウンタ End Sub よろしくお願いいたします。マクロ初心者です。

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

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

#5です。 えーと、話が噛みあってませんが、 For 個票カウンタ = 1 To _  Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88"))  Range("B1") = 個票カウンタ  印刷 Next 個票カウンタ 上記の、Range("A1:A88") を Range("A30:A88") したのに「1行目からまた印刷されてしまう」って事を言っているのならば当然なんですが、、、 Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) は A1:A88 に入っているデータの個数を数えているだけです。仮にA1:A88にデータが全部入っているなら「88」になります。 For i = xx To yy 文 は xx から yy までの数字を変数 i に一つずつ代入する構文です。上記の例では変数「個票カウンタ」に1~88を一つずつ代入し、それを Range("B1") に代入していますので、 For 個票カウンタ = 1 To 88   Range("B1") = 個票カウンタ   印刷 Next 個票カウンタ この文は Range("B1") に 1~88までを順番に代入してSub「印刷」を呼んでいる訳です。 Range("A1:A88") を Range("A30:A88") にしたとしても A1:A88に入っているデータの個数「88」がA30:A88入っているデータの個数「59」になるだけなので、1~59までを Range("B1") に代入してSub「印刷」を呼ぶ事になるだけです。つまり For 個票カウンタ = 1 To xx としている以上、必ず 1 から始まります。 このままの文で、30行目から印刷したいなら Range("A1:A88")のままで For 個票カウント = 1 を = 30 にすれば30行目から印刷するハズです。 ちなみに下記は印刷したい範囲を実行中に指定するサンプルです。 実行するとダイアログが出ますので、マウスで一覧表シートの A30:A32 等を選択してからOKすると 30~32を個票シートのB1に代入して印刷します。 想像だけで書いているので、上手く動くかは解かりません。 試すならテスト用ブックで。 Sub Test() Dim r As Range, i As Long Dim stRow As Long, edRow As Long On Error GoTo ER:  Worksheets("一覧表").Activate  Set r = Application.InputBox _      ("マウスで印刷したい範囲のA列を選択して下さい。", _       "印刷行指定", Type:=8)  stRow = r.Row : edRow = stRow + r.Rows.Count - 1  With Worksheets("個票")   .Activate   .PageSetup.PrintArea = "$A$9:$J$27"    For i = stRow To edRow     .Range("B1") = i     .PrintOut    Next i  End With ER: End Sub

ransuke
質問者

お礼

ご丁寧なご回答をありがとうございました。よくわかりました。感謝いたしております。

その他の回答 (5)

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

> 指定行を変更しても1行目からまた印刷されてしまう まさかと思いますが、Sub 個票発行マクロ を「実行するたびに」1行目から印刷してしまうって事を言っているのではないですよね? もし、最後に追加した行のみを印刷させたいって事ならこんな感じ。 Sub 個票発行()  Worksheets("個票").Activate  Range("B1") = _   Worksheets("一覧表").Range("A65536").End(xlUp).Row  印刷 End Sub そういう意味ではなく、実行するとn枚の「個票」を全部1行目のデータで印刷してしまうって意味なら、「個票」のB1 に実際に 1、2、3・・・とデータを入力した場合にちゃんとデータが入れ替わるか確認してみては?

ransuke
質問者

お礼

お礼が遅くなってしまい申しわけございませんでした。ありがとうございました。 A1:A88として印刷はうまくいきいましたが、その後、A30:A88に訂正してもう1部印刷しようとした時にA1からまた印刷されて困っています。このプログラムで間違えはありますか?マクロ初心者で困っています。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

#1のmshr1962です。 >この部分は間違えないかと思います。 だとすると考えられるのは 「ツール」「オプション」「計算方法」タブの 計算方法が手動になっていませんか?ご確認ください。

ransuke
質問者

お礼

たびたび申し訳ございませんでした。 自動になっています。 しばらくコンピュータから離れなければなりません。もしまた原因が見つかればお願いいたします。ありがとうございました。 

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

#1のmshr1962です。INDEX関数ですが =INDEX(一覧表!$A$1:$G88,B1,列数) の様になっていますか? 上記の場合B1に入力された個票カウンタの行の列数の内容を表示します。 列数=1なら一覧表のA列になります。

ransuke
質問者

お礼

ありがとうございます。=INDEX(一覧表!$A$1:$G88,$B1$,列数) になっておりこの部分は間違えないかと思います。 よろしくお願いいたします。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

#1のmshr1962です。 このマクロの設定だと毎回A9:J27を印刷になっています。 この範囲にてB1のカウンタ数を参照して内容を変更しているのですか? だとすると、A9:J27内の参照式の方がおかしいのだと思います。 おそらくVlookup関数かIndex関数を使われていると思いますが そちらの確認はしましたか?

ransuke
質問者

お礼

ありがとうございました。 おっしゃる通り、毎回A9:J27を印刷するのですが、INDEX関数で参照式を入れています。参照先のセル範囲を変えているにもかかわらず、反映されず1行目からのデータが対象になって同じものが何度も出力されて困っています。お願いいたします。

ransuke
質問者

補足

Range("A1:A88")この部分の数値をかえて印刷に反映させたいのです。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

印刷の内容がわからないのですが 印刷範囲(ActiveSheet.PageSetup.PrintArea)を指定は行っていますか?

ransuke
質問者

お礼

ありがとうございました。もちろんその下に続けています。 Range("A9").Select ActiveWindow.SmallScroll Down:=18 Range("J27").Select ActiveWindow.SmallScroll Down:=-18 Range("A9:J27").Select Range("J27").Activate ActiveWindow.SmallScroll Down:=20 ActiveSheet.PageSetup.PrintArea = "$A$9:$J$27" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True よろしくお願いいたします。

関連するQ&A