はじめての親子ハイキングに挑戦!! >>

EXCELで「改ページ」をデータが変る都度 自動的に挿入する方法はありますか?
ハンドでいちいち設定するのが非常に手間です。
ご存知の方、是非教えてください。
例 <データ>
111
111 ←この行で改ページ自動挿入
222
222 ←この行で改ページ自動挿入
333 ←この行で改ページ自動挿入
444 ←この行で改ページ自動挿入

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

A 回答 (2件)

関数式では、セルの挿入、削除、改行の挿入、削除などは出来ないようです。


VBAになれば、オフラインバッチ処理の定番である、「キー
(例えば所属部)が変われば、改ページする」のは,しょっちゅう行われることです。サンプルを載せます。
Sub test01()
ma = Mid(Cells(1, 1), 1, 1)
For i = 1 To 10
  n = Cells(i, 1).Value
  a = Mid(n, 1, 1)
 If a <> ma Then
  Worksheets("sheet1").Rows(i).PageBreak = True
 End If
p01:
ma = a
Next i
End Sub
マクロの記録はやや、ややこしいですが骨子は上記の通り。
    • good
    • 1
この回答へのお礼

ありがとうございました。
ばっちりできました。

お礼日時:2002/09/13 15:05

当方はExcel2000ですけど、VBAであれば可能ではないかと思います。


例えば、A2からデータが入っているとして、簡単なプログラム例ですが、
Sub 改ページの挿入()
Dim chkData
Dim i
chkData = Range("A2").Value
For i = 3 To 65535
If Range("A" & i).Value = "" Then
Exit For
End If
If Range("A" & i).Value <> chkData Then
Rows(i).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
chkData = Range("A" & i).Value
End If
Next i
End Sub

Sub 改ページの削除()
ActiveSheet.HPageBreaks(1).DragOff Direction:=xlDown, RegionIndex:=1
End Sub

表示メニューの改ページで、実行結果をご確認ください。
ご参考になれば幸いです。m(__)m
    • good
    • 1

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

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

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

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

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

QExcelで特定の文字・記号のところで自動的に改ページしたい

2000行ぐらいあるデータを、あるカテゴリ毎に分けて印刷したいのですが、
いちいち改ページを設定するのが面倒なので・・・

例えばA列に数行おき(一定間隔ではない)に“○”が入力されて
いたときに、“○”がある行毎に改ページを設定することは可能でしょうか?

当方、あまり複雑なことは出来ませんが、若干ならマクロの理解もできます。
教えていただけると有り難いです。

Aベストアンサー

こんばんは。

以下の場合は、このようになります。
------------

○ .Cells(i + 1, 1) 1行足されている
------------改ページ

しかし、そうではなく、以下のようになるなら、このようにします。
------------

------------改ページ
○ .Cells(i - 1, 1) 1行減らす


印刷範囲を最初に設定してから、マクロを行ってください。
出来上がったら、改ページプレビューで確認してください。

標準モジュールに設定してください。

'------------------------
Sub PageBreak_enter()
Dim Rng As Range
Dim i As Long
'区切れの文字列
Const CHKSTRING As String = "○"
With ActiveSheet
 If .PageSetup.PrintArea = "" Then
  MsgBox "印刷範囲を設定してください"
  Exit Sub
 End If
  .ResetAllPageBreaks
 ' ↑(何回も行わないなら要りません)
 Application.ScreenUpdating = False
 Set Rng = .Range(.PageSetup.PrintArea)
 For i = 1 To Rng.Rows.Count
 If .Cells(i, 1).Value Like CHKSTRING Then
  'ここで、改ページを調整可
   .Cells(i + 1, 1).PageBreak = xlPageBreakManual
 End If
 Next
 End With
 Application.ScreenUpdating = True
 Set Rng = Nothing
End Sub

こんばんは。

以下の場合は、このようになります。
------------

○ .Cells(i + 1, 1) 1行足されている
------------改ページ

しかし、そうではなく、以下のようになるなら、このようにします。
------------

------------改ページ
○ .Cells(i - 1, 1) 1行減らす


印刷範囲を最初に設定してから、マクロを行ってください。
出来上がったら、改ページプレビューで確認してください。

標準モジュールに設定してください。

'------------------------
Sub PageBreak_enter()
Dim Rng...続きを読む

Q改ページの2ページ目の作り方

エクセルで、改ページプレビューを押すと、
青い線が出てきて印刷範囲を指定できますよね?
あれでA4一枚で印刷できる大きさなんですけど
2枚に分けたい時はどうすればいいのでしょうか?
増やそうとしても一枚目の範囲が大きくなるだけ
なんです。
質問の仕方がうまくなくて申し訳ないです。

Aベストアンサー

上下に分けたい場合、分割したい行の行番号を右クリックして改ページ挿入。
左右に分けたい場合、分割したい列の列番号を右クリックして改ページ挿入。

QExcelについて。特定の範囲内で自動的に改ページされることを禁止する

Excelについて。特定の範囲内で自動的に改ページされることを禁止するにはどうすればよいのでしょうか?

たとえば、「10行目から13行目の間では改ページしない」という設定はできないものでしょうか?

よろしくお願いします。

Aベストアンサー

No2-3です。

> 改ページ位置を調べ、各ページごとに改ページの位置を調節するマクロを書くことは可能ですが、しくみが複雑になってしまいます。
> そこで、各商品の紹介の範囲には改ページが入らないように設定することはできないのかと思い、質問したわけです。

特定の範囲に自動改ページが入らないようにするという設定はないと思います。
自動改ページが入った行が「商品の紹介」の部分なのかそうでないのかをなんらかの方法で判定することができれば、その直前に強制改ページを入れるなどのマクロで対処できると思いますが、こちらではどのように作成されたシートか全然わかりませんので答えようがありません。
また、仮に判定ができて強制改ページすると、それ以降の自動改ページ位置が変わってしまいますので、再帰処理なども必要になります。
しくみが複雑になるのはしょうがないと思います。

QExcelの改ページプレビューの実線と破線

Excelの改ページプレビューで、
ページの境(改ページ)が実線になっているときと破線になっていることがあります。

デフォルトで自動に設定されたものが破線で、自分で動かすと実線になるようです。

実線の改ページをやめて、すべて破線にするにはどうすればよいですか?


Excel2000

Aベストアンサー

q0716qさん、こんにちは。

>デフォルトで自動に設定されたものが破線で、
>自分で動かすと実線になるようです。

そのようですね。

>実線の改ページをやめて、すべて破線にするにはどうすればよいですか?

改ページプレビューの状態で、
シート上で右クリックして、「すべての改ページを解除」としてみるのはどうでしょうか。

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で改ページの行が分ります。

Qエクセルの改ページを行ごとに自動挿入するには?

1000行以上ある表に対して50行ごとに改ページ
したいのですが、行の幅が微妙にまちまちなので
46~53行の間で微妙にずれてしまいます。

任意の固定された行数で改ページを一気に自動挿入
する方法があれば教えてください。今は改ページプレ
ビューを見て微調整をして微妙なズレを直しています。

Aベストアンサー

#1 のmisatoannaさんの内容にかぶってしまいますが、

>行の幅が微妙にまちまちなので46~53行の間で微妙にずれてしまいます。

50行以上に「自動改ページ」がつけられる場合はよいのですが、それ以下の場合は、「手動改ページ」を入れると、2行なり3行だけのページが出来てしまいますが、それでも良いのですか?2つのマクロがあります。

1つは、手動改ページを入れるマクロで、もう1つは、それが正しく入っているか調べるマクロです。

'--------------------------------------
Sub PageBreak_enter()
'手動改ページを入れるマクロ
Dim Rng As Range, i As Long
With ActiveSheet
'マクロを実行する前に、なるべく、印刷範囲はユーザーで設定してください。
 If .PageSetup.PrintArea = "" Then
   .PageSetup.PrintArea = .UsedRange.Address
End If
  .ResetAllPageBreaks
Set Rng = Range(.PageSetup.PrintArea)
For i = 50 To Rng.Rows.Count Step 50
   .Cells(i + 1, "A").PageBreak = xlPageBreakManual
Next i
End With
 Set Rng = Nothing
End Sub

'--------------------------------------
Sub CheckMPageBreak()
'正しく、50行目に改ページが入っているか調べるマクロ
Dim TotalPage As Integer
Dim p As Long
Dim i As Integer
 TotalPage = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))")
For i = 1 To TotalPage - 1
 p = Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1, " & i & ")")
 If p Mod 50 <> 1 Then
   MsgBox p & " ページ目が、違います。", 64
 End If
Next i
End Sub
'--------------------------------------

#1 のmisatoannaさんの内容にかぶってしまいますが、

>行の幅が微妙にまちまちなので46~53行の間で微妙にずれてしまいます。

50行以上に「自動改ページ」がつけられる場合はよいのですが、それ以下の場合は、「手動改ページ」を入れると、2行なり3行だけのページが出来てしまいますが、それでも良いのですか?2つのマクロがあります。

1つは、手動改ページを入れるマクロで、もう1つは、それが正しく入っているか調べるマクロです。

'--------------------------------------
Sub PageBreak_e...続きを読む

QVBAでデータが変わった切れ目で改ページしたい

例えばA列に担当者コードが1から100まであって昇順に並んでいます。この表を印刷するときにデータが変わったところで改ページの挿入がしたいのですが、どうやればいいのかわかりません。
手作業でするとすごく時間がかかってしまいます。しかも毎週出すデータなので。
お願いします


あと、データのある範囲を選択してその部分を印刷範囲に設定したいのですがVBAでどのようになるでしょうか。

Aベストアンサー

概ねこんな感じかと・
(あくまでサンプルなので実データに合わせて変更して下さい)
'データの変わり目で改ページ挿入
'解除するときは、右クリックから「全ての改ページの解除」
Do While Worksheets(SheetName).Cells(rindex, cIndex) <> "" '空白セルでない間
If Worksheets(SheetName).Cells(rindex - 1, cIndex) <> Worksheets(SheetName).Cells(rindex, cIndex) Then '1つ前の行とデータが違ったら
If rindex <> 6 Then '最初の行は除く
Worksheets(SheetName).Range("B" + Trim$(Str$(rindex))).Activate
ActiveWindow.SelectedSheets.HPageBreaks.Add ActiveCell '改ページ挿入
' ActiveWindow.SelectedSheets.VPageBreaks.Add ActiveCell
End If
End If
rindex = rindex + 1
Loop

>データのある範囲を選択してその部分を印刷範囲に設定したいのですがVBAでどのようになるでしょうか。
ActiveSheet.PageSetup.PrintArea = Selection.Address
Selection は、現在選択されている範囲
Selection でなくても、適当なRange オブジェクトでよい。

概ねこんな感じかと・
(あくまでサンプルなので実データに合わせて変更して下さい)
'データの変わり目で改ページ挿入
'解除するときは、右クリックから「全ての改ページの解除」
Do While Worksheets(SheetName).Cells(rindex, cIndex) <> "" '空白セルでない間
If Worksheets(SheetName).Cells(rindex - 1, cIndex) <> Worksheets(SheetName).Cells(rindex, cIndex) Then '1つ前の行とデータが違ったら
If rindex <> 6 Then '最初の行は除く
Worksheets(SheetName).Range("B" ...続きを読む

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列で最終行を...続きを読む

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") など書き換えてテストしてみてください。

Qエクセルでページ数をあるセルに表示させたい

どこかのセルに、そのシートで印刷される
ページ数を表示するような計算式orマクロはありますでしょうか。
質問が分かりにくかったらすみません。

Aベストアンサー

次の方法は如何でしょうか。
(1)挿入→名前→定義で名前欄に任意名(仮にaaa)、参照範囲欄に =GET.DOCUMENT(50) →OK
(2)表示セルを選択→F3キー押下→aaaを選択→OK→enter


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

人気Q&Aランキング