dポイントプレゼントキャンペーン実施中!

改ページごとの最終セルを取得し、それらに連番でページ番号を割り付けたいのですが上手くいきません。
またシートごとの先頭ページ番号を指定するセルもシート内に作成したいです。
例えば1ページ目のA1セルに7が入力されている場合は、1ページ目の最終セルに7、2ページ目に8と入力していき、そのシートの最終ページまで同じ作業を繰り返し改ページがなくなれば終了・・・といった流れです。

質問者からの補足コメント

  • Excel2013です。
    ヘッダー/フッダーではなくシート内にページ番号を振りたいです。
    今回のExcel資料は各ページの行数等は変わりませんが、あくまで改ページごとの最終セルにページ番号を振りたいのですが・・・

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/05/23 00:17
  • 不備な点があるということで補足
    >たぶん、A1 に7があるというのは、他ですでに6までは追わつているという意味だと思います。
    シートごとに先頭ページを決めるだけです。
    シート1に改ページで10ページある場合、改ページ1ページ目に先頭ページ番号を入力するセルがあり、そのセルに7という数字を入力しマクロを実行すると改ページ1ページ目の最終セルに7、2ページ目の最終セルに8・・・・・10ページ目の最終セルに16といった感じ代入していきたいのですが
    またシート2がある場合シート1で先頭ページを7から始めましたが、シート2でも先頭ページ7から始められるようにしたいです。
    ちなみに先頭ページ番号を入力するセルはAN1です。
    説明が上手くなく申し訳ありません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/05/23 09:34
  • tom04さんのマクロを参考にしたらできました。
    ありがとうございます。

    ちなみに
    .Cells(myRow - 1, "A") = .Range("A1") + cnt - 1
    おそらくこの文が最終セルに代入するものだと思いページ番号を入れる際固定の文字
    例えば最終セルに"資料1""ページ番号" ※このページ番号は変数です
    のように資料1を固定として代入したい場合上記の1文を変更すればいいのですか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/05/23 12:43
  • つらい・・・

    "資料1-"ところにセルの数値を代入したいのですが
    .Cells(myRow - 1, "A") = セルの番号 " - " & .Range("AN1") + cnt - 1 
    に変更すると " - " のところでコンパイルエラーが出てしまいます。取得したいセルはAK1なのですが・・・
    ※代入するのは改ページの最終行のみに変更しています
     AN1は先頭ページ番号を入力するセルで、改ページの外にあります
     1ページの範囲はA1からAI46までです。

    No.5の回答に寄せられた補足コメントです。 補足日時:2017/05/23 14:46
  • WindFallerさん補足に対するご回答ありがとうございます。
    こちらのマクロでは改ページの最初のセルにもページ番号が振られてしまいます。
    振るのは改ページごとの最終セルだけなのですが

    No.7の回答に寄せられた補足コメントです。 補足日時:2017/05/23 18:40

A 回答 (8件)

>こちらのマクロでは改ページの最初のセルにもページ番号が振られてしまいます。


> 振るのは改ページごとの最終セルだけなのですが

そうだったのですか?
読んでいませんでしたが、資料という文字がついている片方を取り去ればよいだけでは?

Range("AN1").Value は、数字のみです。
---------------------------
rec = Range("AN1").Value
If rec = 0 Then MsgBox "AN1 に、初期値が入っていません", vbCritical: Exit Sub
'Cells(1, 1).Value = "資料 - " & CStr(rec) '削除

For i = 1 To PageCount \ VRetPage
Page = .ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1," & i & ")")
 Cells(Page - 1, 1).Value = "資料 - " & CStr(rec) '★加筆
 If PageCount \ VRetPage = i Then Exit Sub '最後は番号を振らない
 'Cells(Page, 2).Value = "資料 - " & CStr(rec + 1) '削除
 rec = rec + 1
Next
End With
End Sub
    • good
    • 0
この回答へのお礼

WindFallerさん返信ありがとうございます。
アドバイス通り削除したら出来ました!
本当にありがとうございます。
説明が下手で意図をうまく伝えられずお手間をおかけして申し訳ありません。m(_ _)m

お礼日時:2017/05/23 19:35

話がどう変わったのか、私には見えていない部分もあるかもしれません。


最後のページの部分まで押さえられているはずです。このコードは、VBAとはいえ、忘れ去られていくテクニックかもしれません。


'//
Sub PageEnterSheetArea()
Dim PrntRng As Range
Dim PageCount As Long
Dim VRetPage As Long
Dim i As Long
Dim Page As Long
Dim rec As Variant

With ActiveSheet
 Set PrntRng = .Range(.PageSetup.PrintArea)
End With
With Application
VRetPage = .ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")
PageCount = .ExecuteExcel4Macro("GET.DOCUMENT(50)")

rec = Range("AN1").Value
If rec = 0 Then MsgBox "AN1 に、初期値が入っていません", vbCritical: Exit Sub
Cells(1, 1).Value = "資料 - " & CStr(rec)

For i = 1 To PageCount \ VRetPage
Page = .ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1," & i & ")")
 Cells(Page - 1, 1).Value = rec
 If PageCount \ VRetPage = i Then Exit Sub '最後は番号を振らない
 Cells(Page, 1).Value = "資料 - " & CStr(rec + 1)
 rec = rec + 1
Next
End With
End Sub
この回答への補足あり
    • good
    • 0

No.3・5です。



補足の件について・・・
あらかじめA~AI列を範囲指定 → ページレイアウトから「印刷範囲」に設定してマクロを実行してください。
(印刷範囲を設定しないとAK1・AN1も印刷範囲になり、ページ数が増えてしまうため)

Sub Sample3()
Dim cnt As Long, pCnt As Long, myRow As Long
Dim rowCnt As Long
With ActiveSheet
pCnt = .HPageBreaks.Count
.Range("A1") = .Range("AN1")
Do Until cnt = pCnt
cnt = cnt + 1
myRow = .HPageBreaks(cnt).Location.Row
.Cells(myRow - 1, "A") = .Range("AK1") & "-" & .Range("AN1") + cnt - 1
.Cells(myRow, "A") = .Range("AN1") + cnt
Loop
'//最終ページ、最終行の操作//
rowCnt = .HPageBreaks(cnt).Location.Row - .HPageBreaks(cnt - 1).Location.Row
.Cells(myRow, "A").Offset(rowCnt - 1) = .Range("AK1") & "-" & .Cells(myRow, "A")
End With
End Sub

※ 細かい検証はしていません。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さんご返信ありがとうございます。
説明が下手で申し訳ありません。
アドバイスは今後のマクロ作成に参考にさせていただきます。
いろいろ勉強になりました。本当にありがとうございました。

お礼日時:2017/05/23 19:42

No.3です。



各ページの最終行に 資料1-○ ←「○」はページ番号 としてみました。
尚、おそらく最終行がきっちりとページ内に収まるというコトはほとんどないと思います。
前回のコードでは最終ページの最終行には何も表示されないので
最終ページの最終行にも 資料1-○ と表示するコードを追加してみました。

Sub Sample2()
Dim cnt As Long, pCnt As Long, myRow As Long
Dim rowCnt As Long '★
With ActiveSheet
pCnt = .HPageBreaks.Count
Do Until cnt = pCnt
cnt = cnt + 1
myRow = .HPageBreaks(cnt).Location.Row
.Cells(myRow - 1, "A") = "資料1-" & .Range("A1") + cnt - 1
.Cells(myRow, "A") = .Range("A1") + cnt
Loop
'//★ 最終ページ、最終行の操作//
rowCnt = .HPageBreaks(cnt).Location.Row - .HPageBreaks(cnt - 1).Location.Row
.Cells(myRow, "A").Offset(rowCnt - 1) = "資料1-" & .Cells(myRow, "A")
End With
End Sub

※ 最終ページのひとつ前のページで1ページの行数を割り出していますので
前提条件として、最後の2ページのレイアウトは同じとします。m(_ _)m
この回答への補足あり
    • good
    • 0

#2の回答者です。



>ちなみに先頭ページ番号を入力するセルはAN1です。
ということですから、
#2の中のコードで、15行目付近にある、
PageCount = .ExecuteExcel4Macro("Get.Document(50)")
----------------------------------
rec = Cells(1, 1).Value ←この部分から、
------------------------------------------
以下のように書き換えればよいでしょう。
----------------------------------
rec = Range("AN1").Value  'ここから、以下2行を入れる
If rec = 0 Then MsgBox "AN1 に、初期値が入っていません", vbCritical: Exit Sub
Cells(1, 1).Value = rec
------------------------
For i = 1 To PageCount \ VRetPage
    • good
    • 0
この回答へのお礼

参考にしながら頑張ってみます!
ご回答ありがとうございます。

お礼日時:2017/05/23 12:46

こんにちは!



各ページのA列の最初のセルと最後のセルに同じページ番号を入れたい!というコトですよね?
セルの高さによって1ページ当たりの行数が変わってきますので、A列のA1セル以外にデータはない!とします。

Sub Sample1()
Dim cnt As Long, pCnt As Long, myRow As Long
With ActiveSheet
pCnt = .HPageBreaks.Count
Do Until cnt = pCnt
cnt = cnt + 1
myRow = .HPageBreaks(cnt).Location.Row
.Cells(myRow - 1, "A") = .Range("A1") + cnt - 1
.Cells(myRow, "A") = .Range("A1") + cnt
Loop
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 0

以下は、Excelのバージョンは関係がないというか、Ver.4 のマクロ関数を使用しています。



位置関係はあっているはずですが、番号の振り方がいまいちはっきりしません。
たぶん、A1 に7があるというのは、他ですでに6までは追わつているという意味だと思います。

'//
Sub PageEnterSheetArea()
Dim PrntRng As Range
Dim PageCount As Long
Dim VRetPage As Long
Dim i As Long
Dim Page As Long
Dim rec As String

With ActiveSheet
 Set PrntRng = .Range(.PageSetup.PrintArea)
End With
With Application
VRetPage = .ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")
PageCount = .ExecuteExcel4Macro("Get.Document(50)")
rec = Cells(1, 1).Value
For i = 1 To PageCount \ VRetPage
Page = .ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1," & i & ")")
 Cells(Page - 1, 1).Value = rec
 If PageCount \ VRetPage = i Then Exit Sub '最後は番号を振らない
 Cells(Page, 1).Value = rec + 1
 rec = rec + 1
Next
End With
End Sub
この回答への補足あり
    • good
    • 0

エクセルはどのバージョンですか?


印刷で、ヘッダー/フッダーの指定はできませんか?
フッダーでページ番号挿入を設定すれば、印刷時に割り付けて印刷されます。

印刷ではなくて、可視化したいのでしょうか?
>1ページ目のA1セルに7が入力されている場合は、1ページ目の最終セルに7、2ページ目に8と入力していき
1ページの行数や列数は変動するのですか?
この回答への補足あり
    • good
    • 0

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

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