こんにちは。いつもお世話になっています。

エクセルで、データーベースを作成しました。
これから日を増すごとに、データ行がどんどん増えていきます。

アクティブにしたセルから、列右へ9行、行下へ15行の範囲を印刷させたいのです。

Dim r As Integer
r = ActiveCell.Column
Dim d As Integer
d = ActiveCell.Row
Dim h As Integer
h = Cells(r.g).Offset(15, 9)
ActiveSheet.Range("rd:h").PrintOut , preview:=True

このように書いてみたのですが、動きません。
すみませんが、どうしたら良いか教えて下さい。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

次のような内容ではいかがでしょう。



Sub Test()
 Selection.Resize(16, 10).Select
 Selection.PrintPreview 'PrintOut
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!できました

お礼日時:2009/05/22 12:43

1,2番の回答がいずれもOkだと思います。



技術の話なんですが、質問者のコードが間違っています。

>ActiveSheet.Range("rd:h").PrintOut , preview:=True
r,d,hいずれも変数ですので、上記の書き方はだめ。
ActiveSheet.Range(r+d+":"+h).PrintOut , preview:=True

こうみたい書き方は大丈夫はずだ。
    • good
    • 0

既に回答は出ていますが・・・


どこでマクロがこけて、それがなぜなのか少しは考えましたか?
Range Cells についてヘルプは見ましたか?
番地指定についてr1c1形式は知っていますか?
これらを考えた上で、皆さんが提示してくれるコードをみれば理解が向上すると思います。


※提示されたコードでは g が何者か不明です。

提示されたコードを元に範囲指定だけ示します。
Dim r As Integer
Dim d As Integer
r = ActiveCell.Column
d = ActiveCell.Row
Range(cells(d,r),cells(d+15,r+9)).Select
    • good
    • 0

マクロの自動記録を利用すれば簡単にできるはずですが…



>選択しているセルから印刷範囲を設定する方法
 ActiveSheet.PageSetup.PrintArea = ctiveCell.Resize(15, 9).Address

選択範囲を印刷するなら、わざわざ印刷範囲を設定しなくても
 ActiveCell.Resize(15, 9).PrintOut copies:=1
でいけるのでは?
    • good
    • 0
この回答へのお礼

ありがとうございます!できました

お礼日時:2009/05/22 12:42

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【Excel】マクロで印刷範囲の設定

Excel2003を使用しています。
マクロで印刷範囲を設定するコードを書きました。ページを追加するマクロを実行したときに一緒に実行するようにしているのですが、コードで指定している範囲外にデータがあるせいか、その列まで印刷範囲に設定されてしまいます。このデータは印刷範囲には入れたくないのですが、どうしたらいいでしょうか?
ちなみに、印刷範囲部分のコードは
 .PageSetup.PrintArea = Range(Cells(1, 1), Cells(j, 24))
Y1セルとZ1セルにデータが入力されています。マクロを実行すると、印刷範囲がA1:Zjに設定されます。印刷範囲はX列までに設定したいのですが、可能でしょうか?よろしくお願いします。

Aベストアンサー

印刷範囲の指定は、
 ….PrintArea = "$A$1:$C$5"
のように、「A1形式の参照」で行わなければいけません。
A1形式の参照は、Address プロパティで得られるので、
 .PageSetup.PrintArea = Range(Cells(1, 1), Cells(j, 24)).Address
とするとよいでしょう。

Visual Basic のヘルプでは、「PrintArea プロパティ」のところに説明と address プロパティを使った使用例があります。

QVBA  印刷範囲 設定 EXCEL

列を参照して、その列にデータが入っている最後のセルを含む印刷範囲を自動で設定できるマクロを作りたいと思っています。質問で検索していましたが、これといったものが見つからず、誰か教えてください。

Aベストアンサー

> 列はD列目までです。可能でしょうか?

ということは、行は1行目からA列の最終入力行まで、列はA列からD列までの固定ということですね?

Sub test02()
  ActiveSheet.PageSetup.PrintArea = "$A$1:$D$" & Cells(Rows.Count, "A").End(xlUp).Row
End Sub

で、いかがでしょう?

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QエクセルVBAで、ある範囲を印刷範囲に自動設定する方法

A1・・・・・GR1 までに項目と日にちが入っています。
この下、つまり2行目以下にはところどころデータが入っています。
例えば
2行目以下にデータのある一番右の列がAW列目
2行目以下にデータのある一番下の行が7行目

である場合、印刷範囲をA1:AW7という範囲で印刷設定したいのですが、
まったくわかりません。今まで、サイトを参考にCurrentRegionで印刷
設定を自動でしていたのですが、それでは対応できないようで質問に
参りました。教えてください、よろしくお願いします。

Aベストアンサー

VBAでやるなら、まどろっこしいが、各行各列について、最下、最右の最大値を行や列で、総当りで探す。
Sub test01()
retu = 26 'Z列まで
Gyou = 100 '100行まで
c = 1
r = 1
For i = 1 To Gyou
For j = 1 To retu
ri = Cells(Gyou, j).End(xlUp).Row
r = WorksheetFunction.Max(r, ri)
Next j
cj = Cells(i, retu).End(xlToLeft).Column
c = WorksheetFunction.Max(c, cj)
Next i
Range(Cells(1, 1), Cells(r, c)).Select
End Sub
というロジックになるのかな。
ーー
データの入りそうな最大限を適当に見繕って、それに修正してください。
上記コードは範囲指定だけのコード。
印刷範囲にするなら
Range(Cells(1, 1), Cells(r, c)).Select
がRange(Cells(1, 1), Cells(r, c)).PrintOut
となる。

VBAでやるなら、まどろっこしいが、各行各列について、最下、最右の最大値を行や列で、総当りで探す。
Sub test01()
retu = 26 'Z列まで
Gyou = 100 '100行まで
c = 1
r = 1
For i = 1 To Gyou
For j = 1 To retu
ri = Cells(Gyou, j).End(xlUp).Row
r = WorksheetFunction.Max(r, ri)
Next j
cj = Cells(i, retu).End(xlToLeft).Column
c = WorksheetFunction.Max(c, cj)
Next i
Range(Cells(1, 1), Cells(r, c)).Select
End Sub
というロジックになるのかな。
ーー
データの入りそうな最大限...続きを読む

QエクセルVBAで、範囲指定を変数でしたいとき

Rows(\"10:20\").select という記述が可能ですが、この10と20を変数ro1とro2で指定したいのですが、Rows( ro1 & ":" & ro2).select ではエラーになってしまいます。
どのようにすれば良いでしょうか?

Aベストアンサー

> エラーになってしまいます。

エラーの”内容”を書かないと。。

> 実際には、Activeシートでなく別シートの行を選択したかったので、

Select メソッドは、ActiveSheet 以外のモノに対して実行すると失敗します。
つまり、「Activeシートでなく別シートの行」は Select できません。
これは VBA の仕様です。

  Sheet1.Activate
  Rows(ro1 & ":" & ro2).Select

のように Select する直前に、Sheet1 を Active にしてやれば良いでしょう。

ActiveSheet を切り替えたくないのであれば、コードを最適化します。
例えば、行の削除なら

  Sheet1.Rows(ro1 & ":" & ro2).Delete

のように シートを Active にしたり、行を Select する必要はありません。

QEXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには

お世話になっております。
タイトルの通りの質問なのですが、
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するにはどうすればよいのでしょうか?

たとえば、A1のセルに「ABC」と入力されていたとします。
その「ABC」をヘッダーに自動的に出力できるようにしたいのです。
できればマクロは使いたくありません。

宜しくお願いします。

Aベストアンサー

「表示」メニューの「ヘッダーとフッター」では、セル参照を指定することはできません。
「行タイトル」や「列タイトル」しか使用できません。
「行タイトル」を使用するには「ファイル」メニューの「ページ設定」で「シート」タグを選択してください。
ここで「行タイトル」にA1でしたら1行目を選択すればOKです。
ただし、行丸ごとですので注意してください。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QExcel最後の行まで選択するマクロの書き方

こんにちは。

Excel 2010を使用しています。
マクロの記録でデーターを並び替えています。
やりたいことは並び替えたデーターをすべてコピーして
新しいブックにコピーすることです。

ただ毎回データーの行数が異なるのでマクロの記録では
対応できません。
どのようにマクロを書けば、最終行を見つけてすべての
行がコピーできるか書き方をお教えください。

よろしくお願いいたします。

Aベストアンサー

マクロの記録でも対応できますよ!

1. 表の中の1つのセル(項目のセルなど確実にその表と指示できるセル)を選択する
2. [Ctrl]+[Shift]+[*] 表全体の選択
あとは目的のようになるように記録してください

Range("A1").Select
Selection.CurrentRegion.Select
といった具合です

QEXCEL あるセルに数字が入力されれば既存マクロ実行させたい

ボタン等のグラフィックオブジェクトのマクロ実行は簡単なのですが、
ある位置のセルにデーターが入力されれば、
既存のマクロを自動実行させることできますか?

Aベストアンサー

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if Range(ある位置) <>"" then call 既存のマクロ名
End Sub

ある位置と既存のマクロ名を変更して使ってみてください。
あと このVBAは 操作するワークシートのほうに記述します。


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

人気Q&Aランキング

おすすめ情報