いつもお世話様です。
こちらで教えていただいたマクロでフッダーの前に自動で罫線を引こうとしています。
前の質問は→http://okweb.jp/kotaeru.php3?q=1310420

下記のマクロを動かすと、1ページだけの時はちゃんとフッダーの上に罫線が引けますが、2ページ目になると「インデックスが有効範囲にありません」という実行時エラーが出てしまいます。
どこがいけないのでしょうか?

Sub 自動罫線TEST()
Dim BreakSu As Integer
Dim BreakSu2 As Integer
Dim B As Integer
Dim Rw As Long
Dim LastRow As Long

For N = 1 To 3

With Cells
.ClearContents
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With

Range("A1:D" & N * 30) = N & N & N 'TESTデータ挿入

LastRow = Range("A65536").End(xlUp).Row '最終行取得
BreakSu = ActiveSheet.HPageBreaks.Count '改ページ数取得
Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC" '改ページ数を増やすダミー
BreakSu2 = ActiveSheet.HPageBreaks.Count '増えた改ページ数取得

For B = 1 To BreakSu + 1
' MsgBox B & "-" & BreakSu + 1 & "-" & BreakSu2
Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1 '改ページ前行取得(ここでエラー!)
With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom) '改ページ前罫線挿入
.LineStyle = xlContinuous
End With
Next B

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = ClearContents 'ダミー消去
ActiveSheet.PrintPreview

Next
End Sub

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

A 回答 (2件)

再度こんにちは。



姑息なコードを再アップしながらも納得いかず、
マイクロソフト技術情報を調べてみたところバグみたいですねぇ。

回避策として
追加した範囲の最後のセル(右下)を選択し、
Count,Location等を使用した後、最初のセルを選択

と書いてありましたので下記のようにしたらOKでした。
マイクロソフト、しっかりせんかいっ!(^^;;;


●のコードを追加。
-----------------------------------------------

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC"


●Range("A1").SpecialCells(xlCellTypeLastCell).Select


BreakSu2 = ActiveSheet.HPageBreaks.Count

For B = 1 To BreakSu + 1
Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1
With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
Next B

 ● Range("A1").Select

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")).ClearContents ' = ClearContents
ActiveSheet.PrintPreview

Next
End Sub
---------------------------------------------

下記マイクロソフトサイトも覗くこと!
以上です。

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

何度もありがとうございます!!!!

マイクロソフトのサイト見ました。
バグだったんですかあ・・・・。

でも、この回避方法だと、Application.ScreenUpdating = False を使ってはいけないと書いてました。

質問に書いたコードはテスト用ですが本番は画面が動かないようにApplication.ScreenUpdating = Falseを入れるつもりだったんです。

でNo1で教えていただいた
ActiveWindow.View = xlPageBreakPreview '改ページプレビュー
ではそんな制限はないですよね?(実験しましたが大丈夫のようでした)

お礼日時:2005/04/05 16:07

こんにちは。



では下記のように、●のコードを追加してみてください。
-------------------------------------------------

Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = "ABC"


●ActiveWindow.View = xlPageBreakPreview '改ページプレビュー


BreakSu2 = ActiveSheet.HPageBreaks.Count

For B = 1 To BreakSu + 1
' MsgBox B & "-" & BreakSu + 1 & "-" & BreakSu2
Rw = ActiveSheet.HPageBreaks(B).Location.Row - 1
With Range(Cells(Rw, "A"), Cells(Rw, "D")).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
Next B


● ActiveWindow.View = xlNormalView  '改ページから標準へ


Range(Cells(LastRow + 1, "A"), Cells(LastRow + 100, "A")) = ClearContents
ActiveSheet.PrintPreview
Next
End Sub
-------------------------------------------

改ページプレビューを表示して強制的に改ページ位置を取得しています。

以上です。
    • good
    • 0
この回答へのお礼

taocatさまには本当にお世話になりました。
おかげさまで無事出来上がりました!

感謝感激です。
ありがとうございました。

お礼日時:2005/04/05 15:54

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

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

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

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

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

Qエクセル VBA 水平改ページ位置の変更方法について教えてください。

おはようございます。いつも大変お世話になっています。

エクセルで、ある元のシートから、ある条件で抽出して新しいシートを作りました。
その新しいシートの印刷指定方法について教えてください。

最初だけ53行、その後50行づつ区切って印刷したいため、以下のようなVBAを書いてみました。

ActiveWindow.View = xlPageBreakPreview
Set ActiveSheet.HPageBreaks(1).Location = Range("a53")
Set ActiveSheet.HPageBreaks(2).Location = Range("a103")
Set ActiveSheet.HPageBreaks(3).Location = Range("a153")
Set ActiveSheet.HPageBreaks(4).Location = Range("a203")
Set ActiveSheet.HPageBreaks(5).Location = Range("a253")
・・・・・・

が、元のシートのデータが、日によって変動するため、新しいシートのデータが全部で120行位で終わってしまう場合があります。
その場合、100以上の指定していた部分から、
「インデックスが有効範囲にありません」と、止まってしまうのです。

日によってデータの行数は変わりますが、多い場合も同じように50行区切りで印刷したい場合には、どのようにしたら良いでしょうか?

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

おはようございます。いつも大変お世話になっています。

エクセルで、ある元のシートから、ある条件で抽出して新しいシートを作りました。
その新しいシートの印刷指定方法について教えてください。

最初だけ53行、その後50行づつ区切って印刷したいため、以下のようなVBAを書いてみました。

ActiveWindow.View = xlPageBreakPreview
Set ActiveSheet.HPageBreaks(1).Location = Range("a53")
Set ActiveSheet.HPageBreaks(2).Location = Range("a103")
Set ActiveSheet.HPageBreaks(3).Locat...続きを読む

Aベストアンサー

>どうしたら良いのでしょうか?

印刷は実行していませんが、改ページプレビューで確認しても、指定位置できちんと動作していますが・・・。

実行するときに対象のシートがアクティブ(前面)になっていますか?
そうで無いなら、ActiveSheet を Sheets("Sheet2") など書き換えてテストしてみてください。

QEXCEL、マクロ-改ページ行番号の取得方法を教えてください

EXCELで作成した表を印刷したいのですが、表が縦長で複数ページにわたります。
そこで各ページの下端にそれぞれ罫線を挿入するマクロを書きたいのですが、
改ページ位置の取得方法がわかりません。各ページの上端行でも下端行でも良いので
行番号を取得する方法はないものでしょうか?

どなたかご教授願います。

マクロ全体としては下記を考えています。

1.データの下端行の取得
2.印刷範囲の設定(横1ページ×縦複数ページ)
3.最初の改ページ位置の取得
4.ページ下端セル行の下に罫線を入れる
5.次の改ページ位置の取得
6.以下、データ最下端行まで繰り返し

(各行のセルの高さは一定ではないです。)

Aベストアンサー

難しく考えず、フッターを使ったらいかがでしょう。
フッターの1行目をスペースで連打し、フォントの設定で下線を選びます。
これで下線が表示され、丁度データと境になるのではないですか?

どうしても改ページ位置取得なら、HPageBreakオブジェクトのLocationプロパティを使ってみたらどうでしょう。
HPageBreaks (HPageBreakオブジェクトのコレクション)
ActiveSheet.HPageBreaks.Count (改ページ総数)
ActiveSheet.HPageBreaks(1).Location.Row (一番目の改ページの行)
Location.Rowで改ページの行が分ります。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QPageBreaks.Countと印刷範囲の設定について

エクセルマクロにて
A4等用紙サイズに合わせて縦横1×1のオートフィット印刷をするものを組みました。
用紙サイズからオーバーするものは縮小
用紙サイズより小さいものは1×1をオーバーするまで400%を上限に拡大を行いました。

mysheet.HPageBreaks.count >= 1 or mysheet.VPageBreaks.count >=1 _
or mysheet.PageSetup.Zoom>=400 
(省略していますが400%になるまで100%から10%ずつ拡大する処理をさせています)

参考本から上記の条件式を採用し、正常に動作するか確認したところ、どうやら、印刷範囲の設定が実施されているファイル・シートについては、
サイズ内で収まっている場合、拡大処理ループとなり、
10%ずつ拡大させていきますが、
PageBreaks.count が0 を指したままになり、増加せず上限400%までループ処理をしてしまいます。
サイズ内に収まっていないものは縮小処理なので、正常動作します。
アドインでツールバーにボタン化させ、色々なエクセルファイルに利用したいので、他ユーザーの設定した、印刷範囲の設定をクリアする訳にもいきません。
PageBreaks.countを使う以外でも何か良い方法があれば幅広く教えて頂ければと思います。
印刷ページ総枚数が2枚になったらループ処理をやめるとかでもいいのですけど。
また、印刷範囲の設定とは、関わりが無く他に問題があるではないかとも疑っていますが、とりあえず設定をクリアしたら、countがきちんと増えて、うまく動作したので、やはり個人的には印刷範囲の設定が一番あやしいと思っています。

windowsXp,excel2003です。
初投稿となります。質問の仕方が下手ですが、ぜひお力をお貸しいただければと思います。

エクセルマクロにて
A4等用紙サイズに合わせて縦横1×1のオートフィット印刷をするものを組みました。
用紙サイズからオーバーするものは縮小
用紙サイズより小さいものは1×1をオーバーするまで400%を上限に拡大を行いました。

mysheet.HPageBreaks.count >= 1 or mysheet.VPageBreaks.count >=1 _
or mysheet.PageSetup.Zoom>=400 
(省略していますが400%になるまで100%から10%ずつ拡大する処理をさせています)

参考本から上記の条件式を採用し、正常に動作するか確認したところ、どうやら...続きを読む

Aベストアンサー

> とりあえず400%に拡大させて、改ページプレビューで1×1を状態に
> することで、400%から適当な拡大サイズに変更させる処理...

そのとおりです。

> エラーとなるケースが頻発します。

On Error Resume Next としてエラーを無視させてますのでエラーで、停止
することはないはずです。
期待したとおりの動作にならない...ということをエラーと表現されたので
しょうか?

  > .VPageBreaks(1).DragOff xlToRight,1

上記の書き方をみると、私が提示したコードをそのまま試されているわけ
ではなさそうです。Excel2002 環境でテストした限り、問題はなさそう
なので、ご自分で書かれたコードの提示、シート内のデータの状況などの
説明がなければ何とも言えません。

このような再質問でしたら、まずは私が提示したものが正常に動作するか
確認し、その結果を教えて下さい。

> Vが垂直方向、Hが水平方向のような気がするのですが、

そのとおりです。

> そうすると xlToRightとxlDownが反対って単純に思ってしまいました。

垂直と水平のとらえ方が逆です。
改ページプレビューにして試してみてください。垂直改ページ(縦の線)は
左右に動かし、水平改ページ(横の線)は上下に動かします。

> とりあえず400%に拡大させて、改ページプレビューで1×1を状態に
> することで、400%から適当な拡大サイズに変更させる処理...

そのとおりです。

> エラーとなるケースが頻発します。

On Error Resume Next としてエラーを無視させてますのでエラーで、停止
することはないはずです。
期待したとおりの動作にならない...ということをエラーと表現されたので
しょうか?

  > .VPageBreaks(1).DragOff xlToRight,1

上記の書き方をみると、私が提示したコードをそのまま試されている...続きを読む

QExcelVBAの改ページの区切り位置が変更不可

下記のようなコードで印刷プレビューを出して印刷するようにしたいのですが、改ページの位置が思い通りに変更されません。
3ページに印刷で、A19(B19)の行から2ページ目とA37(B37)の行から3ページ目にしたいのですが、印刷プレビューを見るとA20の行から2ページ目でA38の行から3ページ目になってしまいます。

HPageBreaks.Add Before:=Range("A19")←ここを色々違うセルに変えたり別のコードにかえたりしても、まったく反映されません。何かが邪魔をしているのでしょうか?

どうしたら、任意の位置で改ページできるでしょうか?お願いいたします。

Sub 印刷プレビュー設定()
Dim s As Worksheet
Set s = ThisWorkbook.ActiveSheet

With s
'列非表示
.Columns("I:I").Select
Selection.EntireColumn.Hidden = True
'ワークシートを選択、印刷範囲指定する
.Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$O$54"

'余白設定
.PageSetup.TopMargin = 0
.PageSetup.BottomMargin = 0
.PageSetup.LeftMargin = 0
.PageSetup.RightMargin = 0
'水平位置の中央へ
.PageSetup.CenterHorizontally = True
'垂直位置の中央へ
.PageSetup.CenterVertically = True
'用紙を横向きに設定
.PageSetup.Orientation = xlLandscape
'用紙サイズを設定
.PageSetup.PaperSize = xlPaperA4
'印刷範囲を指定ページに収めて印刷プレビューを表示する
.PageSetup.Zoom = False '拡大縮小倍率をFitToPagesの設定に収める
.PageSetup.FitToPagesTall = 3 '縦の枚数
.PageSetup.FitToPagesWide = 1 '横の枚数

ActiveSheet.HPageBreaks.Add Before:=Range("A19")
ActiveSheet.HPageBreaks.Add Before:=Range("A37")

.PrintPreview
End With
End Sub

下記のようなコードで印刷プレビューを出して印刷するようにしたいのですが、改ページの位置が思い通りに変更されません。
3ページに印刷で、A19(B19)の行から2ページ目とA37(B37)の行から3ページ目にしたいのですが、印刷プレビューを見るとA20の行から2ページ目でA38の行から3ページ目になってしまいます。

HPageBreaks.Add Before:=Range("A19")←ここを色々違うセルに変えたり別のコードにかえたりしても、まったく反映されません。何かが邪魔をしているのでしょうか?

どうしたら、任意の位置で改ペ...続きを読む

Aベストアンサー

エクセルの基本機能として(=手動・マクロを問わず、という意味です)、たとえば「縦3×横1」のように「次のページ数に合わせて印刷」を設定すると、ユーザー定義の改ページは「無視」されます。


変更前:
.PageSetup.FitToPagesTall = 3 '縦の枚数

変更後:
.PageSetup.FitToPagesTall = false '縦の枚数は指定を解除し、ユーザー定義の改ページ(と成り行きによって自動改ページ)を優先する

QVBAでの改ページ位置の変更

こんばんわ。

検索したり、自分でも考えてみたのですが、壺にハマっているようで、
どなたかお助けください。

Excelで以下の様な表があります。
営業所コード 部署 氏名 ・・・(横幅はA4に収まるサイズです)
  001    001 AAA
  001    002 BBB
(コードに変化があるたびに、1行空白があります。)
  002    001 CCC
[------------------------] O
  003    001 DDD
  003    001 DDD
<------------------------> X
  003    002 EEE

このような表が縦にいくつも並びます。
印刷時にA4サイズの用紙からはみ出した部分について、
上記の「003」のような位置(Xの位置)に自動的に入ってしまう改ページを防ぎ、
003の一番上の行の上部(Oの位置)で改ページしたいのです。
何か良い方法はないでしょうか?

縦方向は集計のたびに変位するので、特定のルール化ができなくて困っています。

改ページ位置(行数)を取得して、その上のデータの可否をチェックしていくというのが、
Betterな方法なのでしょうか?
ページ数で20~30ページになるので、このループ処理が良いのかどうか。。。

こんばんわ。

検索したり、自分でも考えてみたのですが、壺にハマっているようで、
どなたかお助けください。

Excelで以下の様な表があります。
営業所コード 部署 氏名 ・・・(横幅はA4に収まるサイズです)
  001    001 AAA
  001    002 BBB
(コードに変化があるたびに、1行空白があります。)
  002    001 CCC
[------------------------] O
  003    001 DDD
  003    001 DDD
<------------------------> X
  003    002 EEE

このよ...続きを読む

Aベストアンサー

こんにちは。

>どこか間違っていますでしょうか?

たぶん、コードの置いてある場所が、標準モジュールではなく、シートモジュールで、いくつかの条件が組み合わされば、Rangeオブジェクトのエラーは出ます。エラーが出ないように直しました。

それと、コードを見るまで、全体を縮尺を縮めるというのは、私の想像していたものとは、かなり違ってきますね。いろいろ試してみましたが、繰り返し行うせいでしょうか、PageBreaksで取れる行が不安定ですね。以下は、垂直改ページを取るサブルーチンを加えてみました。なお、物理的水平改ページは、どんなに改ページReset しても、残りますから、1ページ1行しかないところが出てくることはあります。


Sub HBreake_Aligment2()
  Dim myPrintArea As String
  Dim DefaultPageRow As Integer
  Dim LastRow As Long
  Dim PreRow As Long
  Dim cnt As Integer
  Dim NewRow As Long
  With ActiveSheet
   If .PageSetup.PrintArea = "" Then
     MsgBox "印刷範囲を設定してください", 16
     Exit Sub
     Else
     myPrintArea = .PageSetup.PrintArea
     LastRow = .Cells(65536, .Range(myPrintArea).Column).End(xlUp).Row
     If .Range(myPrintArea).Cells(.Range(myPrintArea).Count).Row > LastRow Then
      .PageSetup.PrintArea = .Range(myPrintArea).Resize(LastRow).Address(0, 0)
     End If
   End If
   .ResetAllPagereaks
   'サブルーチン
   Call VPageDragoff
   Application.ScreenUpdating = False
   DefaultPageRow = _
   Application.ExecuteExcel4Macro("(INDEX(GET.DOCUMENT(64),1," & 1 & "))")
   PreRow = DefaultPageRow
   Do
     NewRow = MyNewRowFind(PreRow)
     .HPageBreaks.Add .Cells(NewRow, 1)
     PreRow = NewRow + DefaultPageRow
   Loop Until PreRow > LastRow
   Application.ScreenUpdating = True
   .PrintOut Preview:=True
  End With
End Sub
'
Private Function MyNewRowFind(ByVal myRow As Long)
Dim j As Long
Dim flg As Boolean
 With ActiveSheet
  '25行前まで探す
  For j = myRow - 1 To myRow - 25 Step -1
   If .Cells(j, 1).Value = "" Then
    flg = True
     Exit For
   End If
  Next j
  If myRow > j + 1 And flg Then
  MyNewRowFind = j + 1
  Else
  MyNewRowFind = myRow
  End If
 End With
End Function

Sub VPageDragoff()
'垂直改ページのドラッグオフ
Dim myVbp As Integer
With ActiveSheet
  Application.ScreenUpdating = False
   .PageSetup.Zoom = 100
  myVbp = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")
  If myVbp > 1 Then
   ActiveWindow.View = xlPageBreakPreview
   .VPageBreaks(1).DragOff xlToRight, 1
   ActiveWindow.View = xlNormalView
  End If
End With
  Application.ScreenUpdating = True
End Sub

こんにちは。

>どこか間違っていますでしょうか?

たぶん、コードの置いてある場所が、標準モジュールではなく、シートモジュールで、いくつかの条件が組み合わされば、Rangeオブジェクトのエラーは出ます。エラーが出ないように直しました。

それと、コードを見るまで、全体を縮尺を縮めるというのは、私の想像していたものとは、かなり違ってきますね。いろいろ試してみましたが、繰り返し行うせいでしょうか、PageBreaksで取れる行が不安定ですね。以下は、垂直改ページを取るサブルーチンを加えてみ...続きを読む

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

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

Aベストアンサー

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

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

Qエクセル VBA 印刷改ページ 行数設定

環境:Excel2002です

印刷する行数は毎回異なります

改ページの条件は
(1)行1から10は表題などが設定されているが6から10行を行タイトルに設定する
(2)データ30行毎に改ページする
  
   例:データ数100、行1から10に表題があるので 最終行は110
     ページ設定 1ページ:行1から40
                   行1から10の表題 プラス データ数30(行11~40)
             2ページ:行6から10の行タイトル プラス データ数30(行41~70)
             3ページ:行6から10の行タイトル プラス データ数30(行71~100)
             4ページ:行6から10の行タイトル プラス データ数10(行101~110)

印刷範囲の設定はネット上に多数紹介されていますが
私の設定したい方法は見つけることができませんでした

思考錯誤してみましたが、私のスキルでは無理でした
よろしくご教示願います

Aベストアンサー

ご相談に書かれていることを手順を追って行うと
1.印刷する行数(最終行)を調べる
2.タイトル行を設定する
3.所定の行に改ページを打つ
4.印刷範囲を設定する
5.印刷する
というだけの作業です。


実際には
事前準備:タイトル行を設定する
事前準備:所定の30行ごとに、データの有無に関係なしに改ページを埋めておく
   →挿入メニューの改ページ
マクロの仕事:最終行を調べ、印刷範囲を設定して印刷する

だけで十分です。

作成例:
sub macro1()
 dim LastRow as long
’仮にA列で最終行を調べられるとして
 lastrow = range("A65536").end(xlup).row
’仮にA:G列を印刷するとして
 activesheet.pagesetup.printarea = "$A$1:$G$" & lastrow
 activesheet.printout
end sub



もしも手抜きで何も手を動かして準備とかしたくないというなら

sub macro2()
 dim LastRow as long
 dim r as long
 lastrow = range("A65536").end(xlup).row
 activesheet.resetallpagebreaks
 for r = 41 to lastrow + 1 step 30
  activesheet.hpagebreaks.add before:=cells(r, "A")
 next r
 activesheet.pagesetup.printtitlerows = "$6:$10"
 activesheet.pagesetup.printarea = "$A$1:$G$" & lastrow
 activesheet.printout
end sub

といった具合に、丁寧に書いていけば出来ます。

ご相談に書かれていることを手順を追って行うと
1.印刷する行数(最終行)を調べる
2.タイトル行を設定する
3.所定の行に改ページを打つ
4.印刷範囲を設定する
5.印刷する
というだけの作業です。


実際には
事前準備:タイトル行を設定する
事前準備:所定の30行ごとに、データの有無に関係なしに改ページを埋めておく
   →挿入メニューの改ページ
マクロの仕事:最終行を調べ、印刷範囲を設定して印刷する

だけで十分です。

作成例:
sub macro1()
 dim LastRow as long
’仮にA列で最終行を...続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

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

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

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

宜しくお願いします。

Aベストアンサー

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


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

人気Q&Aランキング

おすすめ情報