アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロの迷い人です。

Excelの表をマクロで印刷しようと思っています。
行の数が毎回違うため、最終セルもその都度指定しなければなりません。

A1 B1
A2 B2
A3 B3
A4 B4

この例で、A5 B5 以降は空セルとします。
印刷範囲を Range("A1:B4")と書かずに、そのときどきのアクティブセルを変数に代入し、変数を使って範囲指定したいのです。

Sub MacroTest ()

Dim a As Variant
Dim b As Variant

Range("B1").Activate

Do While a <> 0
ActiveCell.Offset(1, 0).Activate '空白でなければ一つ下に移る
a = ActiveCell.Value
Loop

ActiveCell.Offset(-1, 0).Activate '上の行に移る
b = ActiveCell.Value

Range("A1:"& b).Select
End Sub

こうしてみましたがダメでした。

デバッグの方法がわからないので教えて下さい。よろしくお願いします。

A 回答 (5件)

こんにちは。



>Do While a <> 0
>ActiveCell.Offset(1, 0).Activate '空白でなければ一つ下に移る
>a = ActiveCell.Value
>Loop

ではなくて、

Do
ActiveCell.Offset(1, 0).Activate
a = ActiveCell.Value
Loop While Not IsEmpty(a)

a は、Variant ですから、値のないものは、Empty 値になります。

このように書いてもよいのですが、
a <> Empty
厳密には、これは、Empty 値ではなく、0を含みます。


>b = ActiveCell.Value

ではなくて、

b = ActiveCell.Address

だろうと思います。

私も、別のマクロでは、このように書いてきましたが、そういうワークシートをなめる方法しかなかったからです。

こういうアイデアは、今後十分に期待出来ても、今の自力のマクロは、使えるようになるまでは、苦労が多く時間も掛かります。そのままですと、普通に使えるレベルまでには到達できません。この前の私が披露したように、マクロも定石があって、その定石で書いたほうが楽なのです。

たとえば、地続きの場合は、ただ、CurrentRegion だけでよいので、それを、PrintArea に代入します。

ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range("A1").CurrentRegion.Address

これも、マクロ入門2週間目ぐらいかな。
    • good
    • 0
この回答へのお礼

Wendy02さん 
教えていただいたように直して巧くいきました。

> CurrentRegion.Address
また知識が増えました。

ありがとうございました。

お礼日時:2007/06/25 10:30

>マクロで印刷しようと思っています


したいのは、下記のどれですか。
一部は、ご質問には鼻から対象外も含めてますが。
(質問の例は印刷には的を得ていないと思う)
(1)activesheet全体を印刷 
Sub test01()
ActiveSheet.PrintOut
End Sub
(2)印刷範囲(Range)を指定する
 (A)プログラム内で固定
 (B)Range("A2").CurrentRegion.PrintOut
 (C)手動ではあるが、操作者が範囲指定して、
その後VBAが自動印刷指令
Sub test02()
Dim r As Range
Set r = Application.InputBox("印刷範囲=", Type:=8)
r.PrintOut
End Sub
 (D)アクチブセルで範囲右下隅セル指定
Sub test03()
r = ActiveCell.Row
c = ActiveCell.Column
Range(Cells(2, "A"), Cells(r, c)).PrintOut
End Sub
 (E)事実上データのある最下行をVBAで探して
そこまでの行を印刷
Sub test04()
d = Range("C65536").End(xlUp).Row
Range("A2:D" & d).PrintOut
End Sub
 (F)事前手動範囲指定(範囲指定して印刷ボタンをクリックなど)
Sub test05()
Selection.PrintOut
End Sub
 -----
これ以外があれば教えて下し。
    • good
    • 0
この回答へのお礼

imogasiさん ありがとうございました。

質問が下手でした。

印刷はエリアを区分して何枚かに分けて行います。

A1 B1 C1
A2 B2 C2
---
A3 B3 C3
A4 B4 C4

たとえば、上のように2枚に分けるとき、1枚目のRange("A1:C2")のC2、2枚目のRange("A3:C4")のA3を変数にするにはどう表すかということを知りたかったのです。
データには空セルもありますが、開始セルと終末セルを決める列(この場合 A と C )には空行はありません。

最終目的は二つありまして、
1.途中でキー入力なしに、エリアを区分して何枚かに分けて印刷するマクロを作りたい。
2.Range("R:C")のR:Cの一方、または両方に変数を入れる形は他にも使えそうなので、その記述方法を知りたい。
ということでした。

お礼日時:2007/06/25 10:37

#3です。



参考ページの例では、列がAB列固定ですね。
列方向にも自動で範囲拡張したければ以下のようにしてください。
(A列のデータの数、1行目のデータの数で印刷範囲を指定します)

=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),COUNTA(Sheet1!$1:$1))

マクロの質問なので関係ないかもしれませんが・・・
その場合は無視してくださいね。
    • good
    • 0
この回答へのお礼

ka_na_deさん ご丁寧にありがとうございます。

お礼日時:2007/06/25 10:34

マクロではありませんが、


こんな方法もあるようです。

以下のURLをご参照ください。

参考までに紹介いたします。

参考URL:http://www2.odn.ne.jp/excel/waza/print.html#SEC11
    • good
    • 0
この回答へのお礼

ka_na_deさん たびたびありがとうございます。
「エクセル技道場」は、逆引きマニュアル式で便利、不精者の私にはピッタリです。

お礼日時:2007/06/25 10:33

range("a65535").end(xlup).select


とすると、データの入っている最終行を指定できそうに思いますけど…
    • good
    • 0
この回答へのお礼

134さん ありがとうございました。

お礼日時:2007/06/25 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!