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

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

アクティブにしたセルから、列右へ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と関連する良く見られている質問

QVBA(マクロ)を勉強したい

VBAを勉強したいのですが、オススメの本等教えて下さい。
今FOM出版のマクロ入門を買って勉強しています。大体の基本操作は分かった気がします。

Aベストアンサー

こんにちは。

ここら辺が参考になると思います。

日本VBA協会の参考書籍
の準拠本
http://www.vbaa.jp/training/books.htm

アマゾンのExcelVBA
http://www.amazon.co.jp/exec/obidos/ASIN/4774119660/vbaajpn-22/249-7235447-7367506

Q「R = ActiveCell」がエラーになる。

エクセルvbaです。
下記のコードのどこがおかしいのか教えてください。

Sub Macro1()
Dim R As Range

R = ActiveCell
If R Like "*1*" Then
MsgBox "1があります"
End If
End Sub

アクティブセルに「1」があれば、
MsgBoxを表示したいのですが
うまくいきません。

オブジェクト変数または With ブロック変数が設定されていません。(Error 91)
というエラーになります。

If ActiveCell Like "*1*" Then
ではなく、一度、変数Rに格納したいです。

解決策をよろしくお願いします。

Aベストアンサー

こんばんは。

×Dim R As Range '(小文字のほうが良いです。基本的には、大文字は定数です。)

すでに回答が出ていますが、Like 演算子を使って、文字の比較なら、比較の対象は、String 型のはずですね。

たとえば、

Dim v As String

それと、他の回答者さんの回答に反論を立てて申し訳ありませんが、Range クラスのDefault メンバは、Value とか、Item ではありません。

Default メンバは、
  a = Range("A1").[_Default]
  a = Range("A1").[_Default](1, 1).Value

_Default は、オブジェクトブラウザで、非表示メンバを表示させて始めて出てきます。
-------------------------------------------
Property _Default([RowIndex], [ColumnIndex])
  Excel.Range の既定メンバ
オブジェクトプラウザより
-------------------------------------------
.Value プロパティは付けたほうがよいです。オートメーションなど特殊な場合はエラーが返ります。また、インスタンスとは、クラスを雛形にして、実体化させたものを言います。Set r = ActiveCell は、単にオブジェクトを変数に代入しただけです。たとえば、ワークシートの追加や、UserForm を加えたものを、インスタンスと言います。

こんばんは。

×Dim R As Range '(小文字のほうが良いです。基本的には、大文字は定数です。)

すでに回答が出ていますが、Like 演算子を使って、文字の比較なら、比較の対象は、String 型のはずですね。

たとえば、

Dim v As String

それと、他の回答者さんの回答に反論を立てて申し訳ありませんが、Range クラスのDefault メンバは、Value とか、Item ではありません。

Default メンバは、
  a = Range("A1").[_Default]
  a = Range("A1").[_Default](1, 1).Value

_Default は、オブ...続きを読む

QマクロとVBAの違いは?

最近officeのVBAを勉強してるのですが「マクロ」と「VBA」って何が違うのでしょうか?

アクセスはマクロとVBA(VBE)が別れてるけど、
エクセルは「マクロの記録」でVBAコードが取得できますよね。

マクロとVBAは同じ意味なのか、違う意味なのか教えていただけますか?

Aベストアンサー

こんにちは。

#2さんの引用先と同じ内容ですが、日本語として出ていたはずです。

マクロとVBAを、一応、定義として把握していないと、きちんと人には教えられないと思いますね。アクセスには、一般的に、VBA側で作られたものは、マクロとは呼べません。

理由は、「マクロ」というのは、その取り扱い言語は別として、ひとつの作業(タスク)の自動実行を目的とする機能のことです。逆にいうと、ひとつの作業を実行できないものは、マクロとは呼びません。例えば、引数を必要とするユーザー定義関数は、マクロの範疇から外れます。

マイクロソフトでは、こう定義しています。

以下は、内容的に、あくまでも、VBAの範疇に対して書かれています。

マクロは、より意味の限定された用語で、引数を持たないパブリックなSub プロシージャのことだけを指します。すべてのマクロはプロシージャですが、すべてのプロシージャがマクロであるとは限りません。マクロの記録機能を使って生成されるプロシージャとOffice アプリケーションの[マクロ]ダイアログボックスから実行できるプロシージャは、すべてマクロです。

それに反して、VBAというのは、アプリケーション用のVisual Basic プログラミング言語です。

「VBA」で書かれたものを総称して、プロシージャと呼び、マクロとは厳密には意味が異なります。また、Ver.4 の「マクロ関数」で書かれたものも、プロシージャで自動実行で作業をするものも、総称してマクロと呼びます。また、ひとつのブックにあるモジュール(=プロシージャを呼び出すためのオブジェクト)群をプロジェクトと呼び、「モジュール」を組み合わせ一貫した仕事をするようにしたものを「システム」と呼んだりします。

これで、違いが分かっていただけたかと思います。

こんにちは。

#2さんの引用先と同じ内容ですが、日本語として出ていたはずです。

マクロとVBAを、一応、定義として把握していないと、きちんと人には教えられないと思いますね。アクセスには、一般的に、VBA側で作られたものは、マクロとは呼べません。

理由は、「マクロ」というのは、その取り扱い言語は別として、ひとつの作業(タスク)の自動実行を目的とする機能のことです。逆にいうと、ひとつの作業を実行できないものは、マクロとは呼びません。例えば、引数を必要とするユーザー定義関数は、マクロの...続きを読む

Q「Row」と「horizontal」、「Column」と「vertical」

エクセルでは
列→Column
行→Row
だと思っていましたが
VBAだけですか?

と言うのも
列→VLOOKUP→vertical
行→HLOOKUP→horizontal

と一致しないからです。
仕様ですか?

よろしくお願いします。

Aベストアンサー

vlookupとhlookupのverticalとhirizontalは、検索の方向を明確に
示します。vlookupは表の先頭columnをverticalに検索して、一致
したrowの指定columnの値を返すのです。

QVBAとマクロ

お世話になります。田吾作7です。

ふと思ったのですが。。。

VBAとマクロの違いって何でしょう?
「マクロの記録」ボタンを押したのがマクロですか?
VBAは、MS-Officeのモジュールにユーザ自身が書き込んだら、それはVBAですか?
もしそうなら、[マクロの記録]ボタンはなぜ[VisualBasicツールバー]にボタンがあるのでしょうか。マクロを編集しやすくするためでしょうか?

記録で
Range("A1").select
それを編集で
Range("A2").select
としたらVBA?

さらに最初っから
Range("A2").select
と記録したマクロは、やっぱりマクロ?


VBAとマクロって違いあるのでしょうか?
いつも疑問に感じて、モヤモヤしてます。
だれか、このモヤモヤ感を解消してください。

よろしくお願いします。


余談ですが・・・
VBAは[VB for Application]ですよね?
Office関連のためのVBってことですよね。
でもAPIを使ってWINDOWSを制御することもできるから[for App]の意味が無いような気がする今日この頃・・・

お世話になります。田吾作7です。

ふと思ったのですが。。。

VBAとマクロの違いって何でしょう?
「マクロの記録」ボタンを押したのがマクロですか?
VBAは、MS-Officeのモジュールにユーザ自身が書き込んだら、それはVBAですか?
もしそうなら、[マクロの記録]ボタンはなぜ[VisualBasicツールバー]にボタンがあるのでしょうか。マクロを編集しやすくするためでしょうか?

記録で
Range("A1").select
それを編集で
Range("A2").select
としたらVBA?

さらに最初っから
...続きを読む

Aベストアンサー

マクロという言語があるわけではないので
決まった処理を登録しておいて後で実行できる機能を
マクロと呼んでいるんじゃないですか?

そのマクロの情報をスクリプトとして保存しておきますので
そのスクリプトがVBAという事だと思いますが。

Qエクセル =INDIRECT("Sheet"&ROW(A2)&"A1")

たびたび恐縮です。

別に質問したINDIRECT("Sheet"&ROW(A2)&"A1")について、概要は理解できました。(この式の場合、Sheet2のA1の値を表示させるものだと思います。)

よく理解していない点
*””位置、なぜ?
*&は文字列をつなぐという意味でよいのか?
*&の位置、なぜ?

多分、最初の”と最後の"が1組で中間の2つが別の1組と思います。とすると、なぜ中間部が"&---&"と表現しなければいけないのかがよく解りません。せめて、"&---"&なら理解できるような気がします。

お願いいたします。

Aベストアンサー

>*&は文字列をつなぐという意味でよいのか?

そうです。
文字の連結を行います。

>なぜ中間部が"&---&"と表現しなければいけないのかが

(! が抜けていますが・・・)
"Sheet" と "!A1" は、文字として記入されているので、""で括る必要があります。
ROW(A2) は、関数なので、"ROW(A2)" としてしまったら、ROW(A2) と言う関数は機能しません。
そうなると、INDIRECT("SheetROW(A2)!A1")という形になり、希望の動作になりません。

"Sheet"(文字)& ROW(A2)(関数)& "!A1"(文字)
"Sheet"(文字)& 2(関数の戻り値) & "!A1"(文字)
最終的に "Sheet2!A1" という文字が INDIRECT で処理されます。

QVBAとマクロの違い

こんばんは。エクセル初心者です。
VBAとマクロの違いについて教えてください。
VBAというのは、プログラミング言語のことで
よろしいのでしょうか?
そのVBAで記述されたものをマクロとよぶ
といったイメージでよろしいのでしょうか?

たとえば、あるエクセルにはいってるマクロを
実行する、ということを作業マニュアルに記述
する場合
「○○マクロを実行する」というのが
正しいのでしょうか?それとも
「VBAを実行する」というのが正しいのでしょうか?

まったく見当違いのご質問だったら申し訳ありません。
教えてください。

Aベストアンサー

「○○マクロを実行する」というほうが正しいです。

VBAは言語のことです。
マクロとは特定の操作手順をプログラムとして記述して自動化することです。

今回の場合、特定の処理なので「マクロ」という表現を使いましょう。

QExcel2003 =TEXT(MOD(ROW(),3),"aaaa")

=TEXT(MOD(ROW(),3),"aaaa")

Excel のこの関数の意味を知りたいです。aaaa はたとえば「日曜日」などの表示形式ということ、row は行列番号、 mod は割り算のあまり、というのはわかります。これはどういうものを得る数式なのでしょうか?オートフィルしたら「日曜日」「月曜日」「土曜日」の循環になりました。

Aベストアンサー

=MOD(ROW(),3)

をコピーしてみれば分かるのでは?
「1」「2」「0」……が連続しますね?

日付のシリアル値で
「0」は「1900年1月0日 土」
「1」は「1900年1月1日 日」
「2」は「1900年1月2日 月」

を表しています。「1月0日」は本当は存在しませんし「1900年1月1日」
は「月曜日」なんですが Excelの問題で「1900年2月29日」が存在して
しまっているせいで ずれてこのようになっています。

それはともかくとして 「1」「2」「0」……を繰り返すので 表示形式
が「aaaa」だと「日」「月」「土」を繰り返すことになる訳です。

QVBAとマクロの違い

VBA初心者です。
会社の人からVBAとマクロの違いについて質問され、ちゃんと説明できませんでした。
なにがちがうんでしょうか?
私は「VBAのプログラミング=マクロを組む」と思ってました。
よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

Excel(2000)については、No.1の方の説明通り、
「マクロ = VBAというプログラミング言語で記述された一塊の動作」
です。
したがって、miyacさんの、
「VBAのプログラミング=マクロを組む」
で、おおよそあっています。
また、自分で書いたコードをマクロとして登録することも出来ます。
しかし、Access(2000)での"マクロ"は少しニュアンスが異なります。
Accessの場合は、マクロはいくつかの動作・操作は順に登録しておき、それを自動実行させる、という使い方です。自分で書いたコードをマクロとして登録するというやり方ではありません。(本当はそういうやり方も出来ますが。)
したがって、VBAとマクロは何となく別物のような印象を受けます。
それにAccessでは、「マクロを組む」という表現は通常使いません。
ただし、マクロをVBAに変換することが出来ますし、マクロに登録する各動作・操作も、VBAで自分で書くことが出来ます。
ですから、結局同じことなんですけどね。
まとめると、「マクロは自動実行処理を登録すること」で、「VBAはそのアプリケーションのあらゆる操作を記述すること」ですかね。
では。

こんにちは。maruru01です。

Excel(2000)については、No.1の方の説明通り、
「マクロ = VBAというプログラミング言語で記述された一塊の動作」
です。
したがって、miyacさんの、
「VBAのプログラミング=マクロを組む」
で、おおよそあっています。
また、自分で書いたコードをマクロとして登録することも出来ます。
しかし、Access(2000)での"マクロ"は少しニュアンスが異なります。
Accessの場合は、マクロはいくつかの動作・操作は順に登録しておき、それを自動実行させる、という使い方です。...続きを読む

Q条件に一致しない行を全て削除した場合「ActiveSheet.ShowAllData」がエラーになる

条件に一致しない行を全て削除し、フィルタモードを解除したいのですが
エラーになってしまいます。
下記のコードを実行して
1つでも条件と一致する「あああ」があれば
ActiveSheet.ShowAllData
を実行してフィルタの解除ができるのですが
「あああ」がない時は
「実行時エラー1004 workSheetクラスのShowAllDataメソッドが失敗しました。」
となってしまいます。

Selection.AutoFilter Field:=1, Criteria1:="<>あああ" 'あああと等しくない
Rows("2:65536").Delete
ActiveSheet.ShowAllData

そしてフィルタの青い三角マークをクリックして「すべて」を選んでも青いままです。

現在は「On Error Resume Next」で対応していますが、VBAでちゃんと処理する方法はないでしょうか?

Aベストアンサー

こんばんは。

こんな感じになるかと思います。

Sub Test1()
  With ActiveSheet
    .Range("A1").CurrentRegion.AutoFilter _
    Field:=1, Criteria1:="=あああ"  'あああと等しくない
    If WorksheetFunction.Subtotal(3, .AutoFilter.Range.Columns(1)) > 1 Then
      Application.DisplayAlerts = False
      With .AutoFilter.Range
        .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete
      End With
      Application.DisplayAlerts = True
    End If
    .ShowAllData 'すべての表示 (▼が残ります)
    .AutoFilterMode = False 'フィルタの解除
  End With
End Sub

こんばんは。

こんな感じになるかと思います。

Sub Test1()
  With ActiveSheet
    .Range("A1").CurrentRegion.AutoFilter _
    Field:=1, Criteria1:="=あああ"  'あああと等しくない
    If WorksheetFunction.Subtotal(3, .AutoFilter.Range.Columns(1)) > 1 Then
      Application.DisplayAlerts = False
      With .AutoFilter.Range
        .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete
      End With
  ...続きを読む


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

人気Q&Aランキング