
いつもお世話になります。
皆様にご教授いただき、ほぼ理想に近づいてきました。
今回ご教授いただきたいのは、作業中のブックの末尾に他のブックから4シートまとめてコピーして張り付けたいのです。現在は手作業で行っています。
作業中のブックは20シート位でその時によってシート数は変化します。sheet1のシート名は"シート一覧"、sheet2~sheet20位のシート名は”名簿””№”~"№(18)"位で一番末尾のシート名は"Sheet3"となっています。コピー元のブック名は”集計表”で4シートあり左から”集計表”、”表”、”表②”、”グラフ”のシート名です。”集計表”シートにデータが入るとその右の3シートのグラフや表が出来上がるようになっています。1シートずつ移動させると表やグラフがエラー表示となってしまうため、4シートまとめて移動したいのです。
いろいろやってみたのですが、うまくいきません。
上記の作業中のブックももともとはすべて1シートからなるブックを【エクセルアテンダント】というソフトで1ブックにまとめたものですが、ソフトを使用せず、VBAで上記作業とあわせてまとめることが出来るのであれば、その方がベストです。まとめることが出来るのであれば、”名簿”シートが先頭で”№”~”№()”の後ろに上記4シートにしたいのですが。まとめる前のブック名は”名簿”ブックの”名簿”シートと”診断書01”~”診断書18”(その時によって数は変化します)という名前のブックで1シートで出来ています。シート名はsすべて”№”です。この数あるブックをソフトでまとめると一番前に”シート一覧”というシートが、一番後ろに”Sheet3”というシートがついた、任意の名前のブックが出来上がるのです。ソフトを立ち上げたり移動したりと手間がかかることと、一度ファイル形式をxlsxからxlsに変換しないと1ブックにまとめることが出来ないのことがネックとなっています。
すべてデスクトップ上にありますが、同じフォルダにまとめることは可能です。
あわせて、ご教授いただければ、非常に助かります。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
ANo2です
>(インデックスが有効範囲にありません)
このエラーは、ブック名やシート名が見つからない時に出ます。
具体的には、
Workbooks("コピー元.xlsx")や
Worksheets(Array("SheetA", "SheetB", "SheetC")が見つからない時です。
提示しましたコードは、単純にシートをコピーするだけのものですので、両方のブック(コピー元、コピー先)が開いた状態であることが前提です。
ブックが閉じた状態で実行した場合も、該当するブックが見当たらないので、上記のエラーになります。
ブックが閉じた状態から実行するには、その前にブックを開く処理が必要になります。
fujillin様
具体的な指摘ありがとうございます。
再度確認したところ、シート名が間違っていました。すみません。
シート名を変更し、実行したら問題なく実行できました。
ブックを開く処理も追加したところ、閉じている状態でも実行できました。
後はブックを閉じる処理を追加してみます。
ありがとうございました。
No.2
- 回答日時:
ANo1です。
>sub () ・・・end subをつければよいのでしょうか?
とりあえずは、それでも動作するはずです。
再確認してみましたが、私の環境では『うまくいきます』ので『うまくいきませんでした。
』という情報からだけでは何ともわかりません。
fujillin様
さっそく回答いただき、ありがとうございます。
デスクトップ上にコピー元という名前のブックを作成(ファイル形式xlsxの為、コピー元ファイル形式だけxlsxに変更しました。)し、Sheet1,Shee2,Sheet3の3シートを確認し、他のブックに下記のコードを入れ実行すると実行時エラー9(インデックスが有効範囲にありません)と出てしまい、デバックで確認するとSet shs=の行が黄表示になります。
Sub テスト()
Set shs = Workbooks("コピー元.xlsx").Worksheets(Array("SheetA", "SheetB", "SheetC"))
Set ds = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
shs.Copy after:=ds
End Sub
何処かやり方がおかしいと思うのですが、わかりません。
ご教授お願いいたします。
No.1
- 回答日時:
こんにちは
ご質問文を追いかけて読む気になれないので、斜め読みで、きちんと理解できていませんが・・・
>一度ファイル形式をxlsxからxlsに変換しないと1ブックにまとめる
>ことが出来ないのことがネックとなっています。
頻度やその他の状況にもよりますが、これが本質的なネックであるなら、すべてのファイルをxls形式にしてしまうという手段もあるのではないでしょうか?
まぁ、どちらかと言えば逆で、xlsxに統一する方が良さそうには思いますが。
>1シートずつ移動させると表やグラフがエラー表示となってしまうため~~
1シートずつコピーしても関数等の参照先が「元ブック」になるだけで、通常はエラー表示になることはないと思います。
INDIRECT関数などのように、文字列で参照を指定しているような部分に関しては、エクセルが自動変換してくれませんので、エラーの原因となる可能性はあります。
参照変換ができないような関数式が原因であるなら、VBAで処理しても同じことが起こるはずです。
(実際の状況が不明なので、何が原因かもわかりませんが…)
>他のブックから4シートまとめてコピーして張り付けたいのです。
?現在は手作業で行っています。
手作業でも、複数シートをまとめてコピーすることは可能です。
その操作を『マクロの記録』で記録すれば、基本的なコードは得られると思います。
(一般化しないと使えない可能性は高いですが、方法はわかるはずです)
とりあえず、
「コピー元」ブックのSheetA、SheetB、SheetCをマクロのあるブック(=ThisWorkbook)の末尾にコピーするマクロの一例を、以下に記しておきますのでご参考まで
Set shs = Workbooks("コピー元.xls").Worksheets(Array("SheetA", "SheetB", "SheetC"))
Set ds = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
shs.Copy after:=ds
fujillin様 こんにちは
回答していただき、ありがとうございます。
休みでお礼が遅くなり、すみません。
>頻度やその他の状況にもよりますが、これが本質的なネックであるなら、すべてのファイルをxls形式にしてしまうという>手段もあるのではないでしょうか?
>まぁ、どちらかと言えば逆で、xlsxに統一する方が良さそうには思いますが。
あるソフトで出来上がるファイルがxlsxなんです。
>1シートずつコピーしても関数等の参照先が「元ブック」になるだけで、通常はエラー表示になることはないと思います。
すみません。やり方が間違っていました。
>その操作を『マクロの記録』で記録すれば、基本的なコードは得られると思います。
(一般化しないと使えない可能性は高いですが、方法はわかるはずです)
実際に記録させ、実行をやってみたのですが、実行されませんでした。
閉じてるブックを開くところがマクロには記録されてない部分と、シートの末尾にコピーするとしたのですがafter sheet(21)と記録され、実際は枚数が都度変化するのでこの部分も問題が出るのではと思っています。
教えていただいたコードはあとsub () ・・・end subをつければよいのでしょうか?(初歩的な質問ですみません)
コピー元のところにコピー元ブックの名前を入れ、Sheet1~Sheet3のところにシート名を入れてみたのですがうまくいきませんでした。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) エクセルの複数ブックのシートを1つまとめたい 都道府県ごとに47ブックがあり、そのシートのデータを1 5 2022/11/15 14:57
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
同じフォルダへのハイパーリン...
-
「ブックの共有」を有効にして...
-
Excel(2010)のフィルターが保...
-
Excelの警告について
-
フォルダ内の複数ファイルから...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
【マクロ】アクティブセルの時...
-
WorkBooksをオープンさせずにシ...
-
複数エクセルから特定シートの...
-
ブックのピボットを別ブックに...
-
指定ファィルの指定シートをシ...
-
参照したいブックのパス名に"["
-
Excelファイルをダブルクリック...
-
エクセル2016です。「ブッ...
-
VBA バックグラウンドで別ブッ...
-
エクセル2013 すべてのにシート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
Excelの新しい空白のブックを開...
-
VBAでブックを非表示で開いて処...
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelの警告について
-
Excelで複数ブックの同一セルに...
-
フォルダ内の複数ファイルから...
-
同じフォルダへのハイパーリン...
-
エクセルにおける,「ブック」...
-
別ブックから入力規則でリスト...
-
エクセルで別ブックをバックグ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルを開かずにpdf...
-
「ブックの共有」を有効にして...
おすすめ情報