- ベストアンサー
エクセルで簡単なマクロを組んだのですが…。
連続印刷を行う簡単なマクロを組んだのですが、指定行を変更しても1行目からまた印刷されてしまうのですがどうしてでしょうか?ちなみにこんなマクロです。 'リストを1行1枚の伝票形式で印刷するマクロ Sub 個票発行() Worksheets("個票").Activate Dim 個票カウンタ As Integer For 個票カウンタ = 1 To _ Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) Range("B1") = 個票カウンタ 印刷 Next 個票カウンタ End Sub よろしくお願いいたします。マクロ初心者です。
- みんなの回答 (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
その他の回答 (5)
- papayuka
- ベストアンサー率45% (1388/3066)
> 指定行を変更しても1行目からまた印刷されてしまう まさかと思いますが、Sub 個票発行マクロ を「実行するたびに」1行目から印刷してしまうって事を言っているのではないですよね? もし、最後に追加した行のみを印刷させたいって事ならこんな感じ。 Sub 個票発行() Worksheets("個票").Activate Range("B1") = _ Worksheets("一覧表").Range("A65536").End(xlUp).Row 印刷 End Sub そういう意味ではなく、実行するとn枚の「個票」を全部1行目のデータで印刷してしまうって意味なら、「個票」のB1 に実際に 1、2、3・・・とデータを入力した場合にちゃんとデータが入れ替わるか確認してみては?
お礼
お礼が遅くなってしまい申しわけございませんでした。ありがとうございました。 A1:A88として印刷はうまくいきいましたが、その後、A30:A88に訂正してもう1部印刷しようとした時にA1からまた印刷されて困っています。このプログラムで間違えはありますか?マクロ初心者で困っています。
- mshr1962
- ベストアンサー率39% (7417/18945)
#1のmshr1962です。 >この部分は間違えないかと思います。 だとすると考えられるのは 「ツール」「オプション」「計算方法」タブの 計算方法が手動になっていませんか?ご確認ください。
お礼
たびたび申し訳ございませんでした。 自動になっています。 しばらくコンピュータから離れなければなりません。もしまた原因が見つかればお願いいたします。ありがとうございました。
- mshr1962
- ベストアンサー率39% (7417/18945)
#1のmshr1962です。INDEX関数ですが =INDEX(一覧表!$A$1:$G88,B1,列数) の様になっていますか? 上記の場合B1に入力された個票カウンタの行の列数の内容を表示します。 列数=1なら一覧表のA列になります。
お礼
ありがとうございます。=INDEX(一覧表!$A$1:$G88,$B1$,列数) になっておりこの部分は間違えないかと思います。 よろしくお願いいたします。
- mshr1962
- ベストアンサー率39% (7417/18945)
#1のmshr1962です。 このマクロの設定だと毎回A9:J27を印刷になっています。 この範囲にてB1のカウンタ数を参照して内容を変更しているのですか? だとすると、A9:J27内の参照式の方がおかしいのだと思います。 おそらくVlookup関数かIndex関数を使われていると思いますが そちらの確認はしましたか?
お礼
ありがとうございました。 おっしゃる通り、毎回A9:J27を印刷するのですが、INDEX関数で参照式を入れています。参照先のセル範囲を変えているにもかかわらず、反映されず1行目からのデータが対象になって同じものが何度も出力されて困っています。お願いいたします。
補足
Range("A1:A88")この部分の数値をかえて印刷に反映させたいのです。
- mshr1962
- ベストアンサー率39% (7417/18945)
印刷の内容がわからないのですが 印刷範囲(ActiveSheet.PageSetup.PrintArea)を指定は行っていますか?
お礼
ありがとうございました。もちろんその下に続けています。 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 よろしくお願いいたします。
お礼
ご丁寧なご回答をありがとうございました。よくわかりました。感謝いたしております。