人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAの質問です。
30行目のE列に文字が入っているときに、30行目まで印刷する、60行目のE列に文字が入っているときは60行目まで印刷する、というVBAはどのよに記述したらよいでしょうか。

●質問者: izunagonago
●カテゴリ:コンピュータ
✍キーワード:VBA エクセル 印刷 記述
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ota2244
●18ポイント

PrintOutメソッドを使用すればEXCELの通常印刷と同様にデータの設定された

範囲だけが印字されると思いますがそれではダメなのでしょうか?

http://www.moug.net/tech/exvba/0070011.htm

罫線など印刷されるデータがシート内にあるのであればCellsプロパティで

有効データの範囲を取得し、PrintAreaプロパティに設定すれば印刷範囲を指定できます。


2 ● きゃづみぃ
●23ポイント

Range("E1").Select

ActiveCell.SpecialCells(xlLastCell).Select

ActiveSheet.PageSetup.PrintArea = "$E$1:" & ActiveCell.Address

とすればいいでしょう。

http://homepage1.nifty.com/tabotabo/insat/excelp/excelp04.htm


3 ● きゃづみぃ
●22ポイント

http://www.officetanaka.net/excel/vba/sheet/sheet08.htm

あ、印刷するってのが 入ってませんでした。

先ほどのソースに 以下を 加えてください。

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

◎質問者からの返答

ありがとうございます

説明が不十分だったのですが、雛形になるデータは500行くらいあります。

その中の、E30,E60に文字列が入っているときという場合で考えております。

と、いまさらいっても、takntさんから2回答もらってしまった。

どうしよう。


4 ● gong1971
●27ポイント

質問文をそのまま解釈してみました。

E列を30行毎にチェックをし、30行単位で最後に文字が入っていた行まで

印刷を行うのであれば、以下のようになります。

Dim i As Long
i = 1
Do
 If Cells(i * 30, 5) = "" Then Exit Do
 i = i + 1
Loop
If i > 1 Then
 ActiveSheet.PageSetup.PrintArea = "$1:$" & (i - 1) * 30
 ActiveWindow.SelectedSheets.PrintOut Copies:=1
End If

注意点


(前回の質問を見て...)30行毎ではなく、単にE列で一番最後にデータが

入力された行まで印刷するのであれば、以下の記述のみでOKです。

ActiveSheet.PageSetup.PrintArea = "$1:$" & Range("E65536").End(xlUp).Row
ActiveWindow.SelectedSheets.PrintOut Copies:=1

■印刷範囲を設定する(PrintAreaプロパティ)

http://www.moug.net/tech/exvba/0070011.htm

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ