dポイントプレゼントキャンペーン実施中!

Excelでデータベース的な使い方をしています。
「データ」シートにたくさんのデータがあり,
「レポート」シートのA1セルに入力した数字に該当するデータをVLOOKUP関数で読み込んでいます。
それを連続印刷するときに,
現在は
For n = 1 To 135
Range("A1").Select
ActiveCell.FormulaR1C1 = n
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next n
End Sub
というマクロで実行させています。
(ちなみにマクロの知識がほとんどなく
「新しいマクロの記録」を利用して作ったため,ほとんど意味は分かっていませんが・・・)

このマクロでも印刷できるのですが,
このままだとデータが 1 ~ 135に固定されてしまいますよね。
実際はデータ数が変動するので,そのたびにマクロの数字を変えています。

そこで考えているのが
新たに「設定」シートを作成して
そこのiとjのセルに数字を入力することで,自動的に
マクロが n = (iに入力した数字) To (jに入力した数字)
となるようにした方が便利だと考えています。

あまりマクロについての知識がないくせに
ほんのちょっとの工夫でできるような気がして・・・
あれこれ試してみたけどできません。
できれば今のマクロを根本的に変えるのではなくて
少しの変更とか追加とかでできるようにしたいのですが可能でしょうか?

ぜひ 教えてください。よろしくお願いします。

A 回答 (3件)

>そこのiとjのセルに数字を入力することで,自動的に


>マクロが n = (iに入力した数字) To (jに入力した数字)
セルが、I1とJ1セルのことだとして
For n = 1 To 135

For n= Sheets("設定").Range("I1").Value To Sheets("設定").Range("J1").Value
といった風に記述できます。
>実際はデータ数が変動する
J1セルにはCOUNTA関数などを使用してデータの数を表示させておくと便利かもしれませんね。
    • good
    • 1
この回答へのお礼

思っていた通りのことができました。
ありがとうございます。

ホントにちょっとしたことだったんですね。
サクサク実行してくれるのが
とっても楽しいです。

役に立ちました。

お礼日時:2009/09/20 22:08

データの情況が説明されて無いので、したいことが不明確。


>レポート」シートのA1セルに入力した数字に該当するデータをVLOOKUP関数で読み込んでいます、も良くわからない。
この質問には書く必要が無いのでは。
>Excelでデータベース的な使い方をしています
と大きく書いているが、エクセルはVBAが出来ないと、仕事には十分使えないと思う。VBAを勉強のこと。
この質問には書く必要なし。
ーー
質問内容だが、
(1)最終行まで一度に印刷
(2)指定した行から行まで印刷
(3)シートに、意味的に別の表が「複数あり、それらのデータ塊(表)をページを分けてシートの全表分一度に印刷する。
など考えたが、
そのどれか、またはこれら以外か、良くわからない。
(1)は
Sub test02()
d = Range("A65536").End(xlUp).Row
Range("A1:J" & d).PrintOut 'A-J列まで印刷の例"
End Sub
(2)は
Sub test03()
x = InputBox("開始行")
y = InputBox("終了行")
Range("A" & x & ":J" & y).PrintOut 'A-J列まで印刷の例"
End Sub
(3)は、例えば
(簡単な例で実行し納得し、その後確認のMsgbox行は削除して実行してください)
同一シートで、表と表が縦方向に並んでいて、その間には1行以上の空白行がある前提。
A列からデータが始まっている例。
表の実例がわからないので、下記ではうまく行かない例も想像できるがとりあえず挙げておく。
Sub test01()
d = Range("A65536").End(xlUp).Row
'MsgBox d
MsgBox "始めの行" & 1
Range("A1").CurrentRegion.Select
MsgBox Selection.Address
Selection.PrintOut
x = Range("A1").End(xlDown).Row
MsgBox "終了行" & x
'----
p1:
x = Range("A" & x + 1).End(xlDown).Row '始めの行
MsgBox "始めの行" & x
Range("A" & x).CurrentRegion.Select
MsgBox Selection.Address
Selection.PrintOut
If Range("A" & x).CurrentRegion.Rows.Count <> 1 Then
x = Range("A" & x).End(xlDown).Row
End If
MsgBox "終了行" & x
'--
If x = d Then GoTo p2 '終了
GoTo p1 '繰り返し
p2:
End Sub
    • good
    • 0
この回答へのお礼

すみません。
こちらがシロウトなので
分かりにくい説明になってしまいました。

VBAは勉強しなくては!!と思っていますが
何から手を付けたらいいのかも分からない状況です。
書店で本を探して見ていますが
自分のレベル(超初心者)にあったのが見つかっていません。
これから頑張っていこうと思います。

いちおう質問は
(2)の 指定した行から行まで印刷を意識していました。
なんとなく できました。
詳しい回答 ありがとうございました。

お礼日時:2009/09/20 22:15

InputBoxを利用して、



Dim i, j

i = Application.InputBox("開始番号を入力して下さい", Type:=1)
j = Application.InputBox("終了番号を入力して下さい", Type:=1)
If i = False Or j = False Then Exit Sub

For n = i To j
Range("A1").Select
ActiveCell.FormulaR1C1 = n
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next n

とか。
    • good
    • 1
この回答へのお礼

InputBoxというのは
今まで使ったことがありませんでした。
他の人が作っているのは使ったことがあったのですが
いつも
「どうやって作るのだろう?」程度のことを考えていました。

実際に 初めて使ってみて
簡単にできることがわかりました。

ありがとうございます。

お礼日時:2009/09/20 22:11

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A