
No.4
- 回答日時:
こんにちは。
> もともと、空き行を想定していたりすると、レイアウトが崩れたりするので、
> あまり好まれません。
確かにそうですね^^;
では、空行をパラメータとしてもっておき、ページの切れ目ではなく、ページの
頭に改ページを挿入するというロジックでどうですか?
Sub InsTemplate()
Dim Sh As Worksheet
Dim rSrc As Range
Dim rDst As Range
' 設定 ------------------------------------------------------------
' 雛形ごとに空行を設けたいとき(現在 1 行)
Const MARGIN_ROW As Long = 1
' 雛形のセル範囲(行の高さもコピーするので行全体で指定します)
Set rSrc = Worksheets("Sheet1").Rows("1:40")
' 貼り付け先のシート
Set Sh = Worksheets("Sheet2")
' -----------------------------------------------------------------
Application.ScreenUpdating = False
' 既存データの有無で分岐処理
If Application.CountA(Sh.Cells) = 0 Then
' 空シートの場合は貼り付け先を1行目とし列幅をテンプレートにそろえる
Set rDst = Sh.Rows(1)
rSrc.Parent.Cells.Copy
rDst.PasteSpecial xlPasteColumnWidths
Else
' 既にデータがあるシートなら使用済み最終セルから転記先を参照
Set rDst = Sh.UsedRange
Set rDst = Sh.Rows(rDst.Cells(rDst.Count).Row + MARGIN_ROW + 1)
End If
' 雛形を複写
Sh.Activate
rSrc.Copy
rDst.PasteSpecial xlPasteAll
' 雛形の頭に水平改ページを挿入(rDst.Row = 1 のエラートラップ)
On Error Resume Next
Sh.HPageBreaks.Add Before:=rDst
On Error GoTo 0
' 印刷範囲を拡張
Sh.PageSetup.PrintArea = Sh.UsedRange.Address
' 後始末ほか
Application.ScreenUpdating = True
' 貼り付け先までスクロールさせます
Application.Goto Reference:=Selection, Scroll:=True
Set rSrc = Nothing: Set rDst = Nothing: Set Sh = Nothing
End Sub
' # マクロ勉強中とのことですから、#1 ご回答が汎用的・シンプルで一番良い
' # と思います。ご参考までということで。
KenKen_SPさん、おはようございます。
詳しいご回答ありがとうございます<(_ _)>
#3のWendy02さんのご指摘で、確認がてらシート名を入力しなおしたところ、うまくいきました。KenKen_SPさんのおっしゃるとおり、#1 ご回答が汎用的・シンプルで一番良いとのことなので、今回は#1のhana-hana3さんのコードを使わせていただきました。
KenKen_SPさんが記載してくださったコードは今後の参考にさせていただきます。
ありがとうございました。
No.3
- 回答日時:
こんにちは。
>『実行時エラー9 インデックスが有効範囲にありません』
それは、実際のシート名と、マクロのSheets("Sheet1") が合っていないからではないでしょうか?インデックスというのは、シート名のことのはずですから。
私も考えてみましたが、
>Sheet1のA1:X40の範囲を2ページ目としてコピペして追加したいのですが、マクロで可能でしょうか?
この手のマクロは、私の考え方からすると、かなりむつかしいです。
2ページ目に入るためには、 A1:X40 次は、どこに貼り付けるか?
と同じ質問ですね。難問だと思います。
要するに、二つの方法があると思います。
1. ページの切れ目に、手動改ページを入れること。
(比較的簡単です。もともと、空き行を想定していたりすると、レイアウトが崩れたりするので、あまり好まれません。)
2. 貼り付けた後の水平自動改ページの位置を探すこと。
2 は、貼り付け時点では、1ページが決まっていないわけで、水平自動改行(HPageBreak) がありません。したがって、そのまま貼り付けると、ページの切れ目にデータが載って、データが切れ切れになってしまいます。
以下のコードは、一旦、印刷領域を削除し、自動改行による印刷領域からページ数を取り、次に、1ページの行数を取り出しています。次に貼り付けた時に、データが切れる場合もあるので、それをもう一度、1ページの行数とページ数で掛けて、その位置を設定し直し、再度、次のページの最初の行を取り出しています。
今のところ、A列の最後尾に対して、印刷範囲を取っていますので、不用意に下の場所にあると、それを印刷領域にまで入れてしまいます。それを注意して行ってください。
こちらでは、上手くできましたが、これは、かなり難しい種類のマクロです。
#1 のhana-hana3 さんので上手く行きましたら、こちらのは、参考にするだけで結構です。
いずれにしても、Ver 4 マクロ関数以外には、この方法は思いつきませんでした。
'貼り付けは、標準モジュールをお勧めします。
'-------------------------------------------------------
Sub AddPages()
Dim i As Integer
Dim oPageRow As Integer '元のページ行数
Dim aPageRow As Integer '再度取得したページ行数
Dim PageCount As Integer 'ページ数
'注意:これは、A:X までの列が、1ページに収まることを想定して作られています。
Const PAGE_EXT As String = "A1:X40" '1ページの大きさ
Const MYSHEET As String = "Sheet1" 'コピー元シート
On Error Resume Next
With ActiveSheet
.PageSetup.PrintArea = ""
PageCount = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))") + 1
If PageCount = 0 Then PageCount = 1
oPageRow = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),0,0)")
If oPageRow = 0 Then oPageRow = Range(PAGE_EXT).Rows.Count 'ダミー
i = PageCount * oPageRow - 1 '次のページの開始位置を探す
'貼り付けた後の状態のダミーを作る
.PageSetup.PrintArea = .Range(PAGE_EXT).Resize(Range(PAGE_EXT).Rows.Count * (PageCount + 1)).Address
aPageRow = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),0,0)")
If oPageRow <> aPageRow Then
i = PageCount * aPageRow '次のページの開始位置を探す
End If
Worksheets(MYSHEET).Range(PAGE_EXT).Copy .Cells(i, 1)
.PageSetup.PrintArea = .Range("A1", .Range("A65536").End(xlUp)).Resize(, 24).Address
End With
On Error GoTo 0
End Sub
Wendy02さん、おはようございます。
いつもご丁寧な回答ありがとうございます。
>>『実行時エラー9 インデックスが有効範囲にありません』
>それは、実際のシート名と、マクロのSheets("Sheet1") が合っていないからではないでしょうか?インデックスというのは、シート名のことのはずですから。
とのご指摘がありましたので、シート名を再入力してみましたところ、うまくいきましたので、Wendy02さんのおっしゃるとおり、#1 のhana-hana3 さんのコードを使わせていただきました。
これに、アクティブセルから39行下までを印刷範囲に指定するコードを書き加えて、無事完成しました。
今回、Wendy02さんが記載してくださったコードはとってもムズカシイですね。。。(@_@)
今後の参考にさせていただきます。ありがとうございました。
No.2
- 回答日時:
>『実行時エラー9 インデックスが有効範囲にありません』
どのような方法で実行されていますか?
貼付け先のセル(左上)は選択されていますか?
この回答への補足
>どのような方法で実行されていますか?
標準モジュールに教えていただいたコードを書いて、「Alt」+「F8」キーでマクロを実行しました。
>貼付け先のセル(左上)は選択されていますか?
左上のセルを選択した状態でマクロを実行しました。
お手数かけて申し訳ありませんが、よろしくお願いします。
No.3のWendy02さんの回答より
>>『実行時エラー9 インデックスが有効範囲にありません』
>それは、実際のシート名と、マクロのSheets("Sheet1") が合っていないからではないでしょうか?インデックスというのは、シート名のことのはずですから。
とご指摘がありましたので、ひな形(Sheet1)のシート名を再度入力しなおして、コードの方も入力しなおしてみたところ、うまくいきましたので、シート名が一致していなかったようです。
『インデックスが有効範囲にありません』というメッセージがどういうことを意味しているのかがわかりませんでしたので、お手数かけて申し訳ありませんでした。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 12:00
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/09 14:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) VBA Userform転記のみ編集可 1 2023/06/29 11:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
エクセルでページをコピーして貼り付けるマクロ
Visual Basic(VBA)
-
エクセルマクロでワードの一ページ目をコピーして新たに二ページを追加して、一ページ目の内容を貼り付ける
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
ExcelVBA Range クラスの PageBreak プロパティを設定できません。
Visual Basic(VBA)
-
5
EXCEL-VBAで印刷時のページ番号を取得したい
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
クリックイベントなのに、2回クリックしないとフォー
Access(アクセス)
-
10
【EXCEL VBA】ダブルクリックでセルのサイズに合わせて画像を挿入に機能を追加したいです。
Visual Basic(VBA)
-
11
ワイルドカード「*」を使うとうまくいかないマクロの添削をお願いします
Visual Basic(VBA)
-
12
特定のセルに数値が入っているシートのみ印刷する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを値でのみし...
-
【Excel】マクロでページを追加...
-
セルに入力するたびにマクロを...
-
Excelでマクロ実行中に画面を固...
-
VBA Shapes コピーと名前
-
ブックの共有でVBAエラー
-
エクセル連番自動印刷について
-
エクセル マクロ写真帳に一括で...
-
マクロで非表示シート内にある...
-
EXCEL 行番号や列番号が選択で...
-
【ExcelVBA】マクロブックを通...
-
エクセルVBAで納期管理システム...
-
EXCEL VBA 他のアプリケーショ...
-
シート名を記入する
-
エクセルファイルの回数期限の...
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
エクセル関数>参照ファイル名...
-
Excel マクロの編集がグレーに...
-
エクセル ボタンに設定したマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA Shapes コピーと名前
-
エクセルファイルを値でのみし...
-
Excelでマクロ実行中に画面を固...
-
エクセル マクロ写真帳に一括で...
-
セルに入力するたびにマクロを...
-
【Excel】マクロでページを追加...
-
エクセルVBAで納期管理システム...
-
エクセル連番自動印刷について
-
EXCEL VBA 他のアプリケーショ...
-
エクセル 図形の寸法を取得したい
-
【ExcelVBA】マクロブックを通...
-
ブックの共有でVBAエラー
-
再度,ExcelVBA,public変数が消える
-
EXCEL 行番号や列番号が選択で...
-
worksheet_changeの一時無効化
-
VBAで行コピーして挿入
-
EXCEL上にコマンドボタン...
-
エクセルファイルの回数期限の...
-
VBAの記述について 値のみの貼...
-
VBでエクセルに罫線を引くには?
おすすめ情報