初めての店舗開業を成功させよう>>

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

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

A 回答 (3件)

> 列はD列目までです。

可能でしょうか?

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

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

で、いかがでしょう?
    • good
    • 3
この回答へのお礼

できました?

ありがとうございます

お礼日時:2011/05/27 10:16

> たとえば、A列を見て3行目までを印刷範囲にするといったかんじです。



わかりません。
印刷範囲は行だけでなく、列も必要です。
行はA列の最終行までとして、列はどこの最終列を指定すればいいのですか?

この回答への補足

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

補足日時:2011/05/26 10:02
    • good
    • 0

質問を誤解しているかもしれませんが、仮に参照する列がE列だとすると、



Sub test01()
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.PageSetup.PrintArea = "$A$1:" & Cells(Rows.Count, "E").End(xlUp).Address
End Sub

でいけると思います。
    • good
    • 0
この回答へのお礼

すみません表現がおかしかったみたいです。
 ABCD
1○× □
2○×△
3○ △□


たとえば、A列を見て3行目までを印刷範囲にするといったかんじです。
わかりにくくてすみません

お礼日時:2011/05/20 13:23

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

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

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

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

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

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【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 プロパティを使った使用例があります。

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....続きを読む

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行までとしていますが、必要に応じて変更して下さい

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセル2010で表の印刷範囲を自動指定したい

次の2つの質問があります。マクロ以外の方法で教えてほしいです。


【質問1】
表Aのピンク部分のみ出力したいため、以下の手順で設定したところ、表Aの黄色部分(行10)まで出力されてしまいます。どのように修正したら良いでしょうか。

※表Aと表Bの印刷範囲は縦横とも同じで、縦(列数)はA列の”1”をカウントした数(可変)です。

 1.A1に表示したい行数を入力
 2.印刷範囲を指定 → B3:D10
 3.名前の定義を設定 → 参照範囲・・・ =$B$3:OFFSET($B$3,0,2,$B$2)


【質問2】
質問1と同条件で表A(ピンク部分)と表B(オレンジ部分)を出力したい場合、どのような設定をすればよいか教えてください。


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

Aベストアンサー

 大変失礼致しました。

>マクロ以外の方法で教えてほしいです。

という一文を見落としておりました。
 マクロ以外となりますと、印刷範囲の設定を自動化する事は困難ではないかと思います。
 只、印刷範囲そのものは変更せずとも、条件付き書式を使用して、「A列に1が表示されていない行」を非表示にする事は出来るかと思います。(但し、A列に1が表示されていない行も、非表示になっているだけで、実際にはデータは存在していますから、余分な行のみを含んだページでは白紙が印刷される筈です)

A1セルセルを選択
  ↓
[ホーム]タブ内の「スタイル」グループの中にある[条件付き書式]ボタンをクリック
  ↓
現れた「スタイル」グループの中にある[条件付き書式]ボタンをクリック
  ↓
現れた選択肢の中にある[ルールの管理]をクリック
  ↓
現れた「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック
  ↓
現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択して下さい」欄の中にある[数式を使用して、書式設定するセルを決定]をクリック
  ↓
現れた「次の数式を満たす場合に値を書式設定」欄の中に

=$A1<>1

と入力
  ↓
「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック
  ↓
現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック
  ↓
現れた「分類」欄の中にある[ユーザー定義]をクリック
  ↓
現れた「種類」欄に

;;;

と入力
  ↓
「セルの書式設定」ダイアログボックスの[罫線]タブをクリック
  ↓
現れた「プリセット」欄の中にある[なし]ボタンをクリック
  ↓
「セルの書式設定」ダイアログボックスの[塗りつぶし]タブをクリック
  ↓
現れた[色なし]ボタンをクリック
  ↓
「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック
  ↓
「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック
  ↓
「条件付き書式ルールの管理」ダイアログボックスの「適用先」欄をクリック
  ↓
A1セルから「何らかのデータが存在している最終行におけるH列のセル」までの範囲をまとめて選択
  ↓
「条件付き書式ルールの管理」ダイアログボックスの[適用]ボタンをクリック
  ↓
「条件付き書式ルールの管理」ダイアログボックスの[OK]ボタンをクリック

 大変失礼致しました。

>マクロ以外の方法で教えてほしいです。

という一文を見落としておりました。
 マクロ以外となりますと、印刷範囲の設定を自動化する事は困難ではないかと思います。
 只、印刷範囲そのものは変更せずとも、条件付き書式を使用して、「A列に1が表示されていない行」を非表示にする事は出来るかと思います。(但し、A列に1が表示されていない行も、非表示になっているだけで、実際にはデータは存在していますから、余分な行のみを含んだページでは白紙が印刷される筈です)

A1セルセル...続きを読む

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

Qエクセル VBA 条件つきの印刷

エクセルVBAにおいて、
例えば「セルA1が空白でないシートすべてを印刷する」
このようなコードは可能でしょうか?
よろしくお願いします。
(エクセル2000)

Aベストアンサー

こんばんは。

Sub Test1()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
 If sh.Range("A1").Value <> "" Then
  sh.PrintOut 'Preview:=True
 End If
Next sh
End Sub

単に、こんな風にすればよいのですが、VBAを動かす前に、印刷範囲だけは確認したほうがよいかもしれません。

--それなら、VBAの意味がないではないか、と思うかもしれませんがね。(^^; もちろん、それはそれなりに方法はあるのですが。--

印刷というのは、一旦、印刷が始まると、とまらないわけですから、それで、こんなことを言っています。

sh.PrintOut Preview:=True

最初は、こんな風にして、プレビューで調べてから、印刷実行という方法もあります。


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

人気Q&Aランキング

おすすめ情報