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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
エクセルでページをコピーして貼り付けるマクロ
Visual Basic(VBA)
-
エクセルマクロでワードの一ページ目をコピーして新たに二ページを追加して、一ページ目の内容を貼り付ける
Visual Basic(VBA)
-
ExcelVBA Range クラスの PageBreak プロパティを設定できません。
Visual Basic(VBA)
-
-
4
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
5
画像を削除したい(VBA)
Word(ワード)
-
6
外部ブック参照が#REF!になってしまう
Excel(エクセル)
-
7
エクセルで複数枚になる請求書を作成したい
Excel(エクセル)
-
8
クリックイベントなのに、2回クリックしないとフォー
Access(アクセス)
-
9
EXCELでタイトル行と一番下の行を固定して印刷したい
会計ソフト・業務用ソフト
-
10
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
-
11
PageBreak プロパティを設定できません。
Visual Basic(VBA)
-
12
【EXCEL VBA】ダブルクリックでセルのサイズに合わせて画像を挿入に機能を追加したいです。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを値でのみし...
-
Excelでマクロ実行中に画面を固...
-
セルに入力するたびにマクロを...
-
エクセル マクロ写真帳に一括で...
-
ブックの共有でVBAエラー
-
ExcelのVBAで自動採番したい...
-
VBAで行コピーして挿入
-
VBA Shapes コピーと名前
-
【Excel】マクロでページを追加...
-
EXCEL VBA 他のアプリケーショ...
-
【ExcelVBA】マクロブックを通...
-
Excelを開くときにメッセージボ...
-
エクセル 図形の寸法を取得したい
-
VBAで保存しないで閉じると空の...
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
【Excel VBA】マクロでExcel自...
-
エクセル ボタンに設定したマク...
-
Excelのマクロでボタンを押すと...
-
エクセル関数>参照ファイル名...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを値でのみし...
-
エクセル連番自動印刷について
-
VBA Shapes コピーと名前
-
Excelでマクロ実行中に画面を固...
-
【Excel】マクロでページを追加...
-
エクセル マクロ写真帳に一括で...
-
セルに入力するたびにマクロを...
-
エクセル 図形の寸法を取得したい
-
EXCEL VBA 他のアプリケーショ...
-
EXCEL 行番号や列番号が選択で...
-
ブックの共有でVBAエラー
-
【ExcelVBA】マクロブックを通...
-
エクセルに写真を挿入するマ...
-
エクセルVBAで納期管理システム...
-
VB.NETによるEXCELの行挿入
-
シート名を記入する
-
VBAの記述について 値のみの貼...
-
VBAで行コピーして挿入
-
エクセルのマクロで数値に応じ...
-
再度,ExcelVBA,public変数が消える
おすすめ情報