プロが教えるわが家の防犯対策術!

ExcelのVBA について質問があります。
1つのブックの4つのシートに対して4回違うブックのシートからコピぺを繰り返そうと思っております。

Dim Wb1 As Workbook, Wb2 As Workbook, Wb3 As Workbook, Wb4 As Workbook

Dim FullPath1 As String, FullPath2 As String, FullPath3 As String, FullPath4 As String

Dim SourceRng1 As Range, SourceRng2 As Range, SourceRng3 As Range, SourceRng4 As Range

Dim TargetRng1 As Range, TargetRng2 As Range, TargetRng3 As Range, TargetRng4 As Range


Worksheets("kyu").Cells.Clear
Worksheets("nyu").Cells.Clear
Worksheets("gai").Cells.Clear
Worksheets("sesho").Cells.Clear

と、dimでの設定が4種類が4回、元のシートのクリアが4回なので、悩んだ挙句

Dim i As Integer

For i = 1 To 4

SourceRng(i).Copy
TargetRng(i).PasteSpecial Paste:=xlPasteColumnWidths
TargetRng(i).PasteSpecial Paste:=xlPasteValues
TargetRng(i).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False

i = i + 1
Next
としました。
.PasteSpecial Paste:=pasteall ではないのは、行うと図にされて貼り付け先に貼り付けされてしまうからです。


結局のところ、Dimで指定した数字は(i)としてfor文で可能なのか
Worksheetsは.Cells.Clearでまとめて表現できるのか
.PasteSpecial Paste も短く表現できないか

浅学なので、全く解決策が見いだせません。現在は1から4まで直線的にコピペをVBAで行っております。
簡略化できると嬉しいです。
まずは可能かどうか、そして解決方法を教えていただけると嬉しいです
よろしくお願いいたします。

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

  • どう思う?

    目的:一つのBookに4つsheetが存在し、それぞれ朝に日々新しいことを追加されているのを探して追加という単純作業を、マクロで自動的に完成したい、というものです

    「for 文の 繰り返し処理に使えるのかど」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2024/02/25 15:29
  • つらい・・・

    補足は手元に届いてますでしょうか。確認するすべが見当たらなくて申し訳ございません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2024/02/25 15:34
  • 目的:一つのBookに4つsheetが存在し、それぞれ朝に日々新しいことを追加されているのを探して追加という単純作業を、マクロで自動的に完成したい、というものです

    届いているかわからないので同じものを投稿させていただきました

    「for 文の 繰り返し処理に使えるのかど」の補足画像3
      補足日時:2024/02/25 15:41
  • うれしい

    文字数が多く、画像にしました。
    審査があるんですね。ありがとうございます

    No.2の回答に寄せられた補足コメントです。 補足日時:2024/02/25 16:19
  • どう思う?

    https://ideone.com/AoYyhB
    でよろしいですか?
    名前は消しているつもりです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2024/02/25 17:01
  • うれしい

    End Subで大丈夫です
    あと4回の補足しかありませんが、どうぞよろしくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2024/02/25 17:20
  • HAPPY

    とても貴重なお時間をいただき、こんなに短い分にまとめ上げてくださり、感謝です。

    まずみたところフルパス FullPath1 = "D: はどのような設定ですか?

    No.5の回答に寄せられた補足コメントです。 補足日時:2024/02/25 20:38
  • どう思う?

    そうでしたか。早速削除させていただきました。

    Private Sub copy_sheetの中にある、TargetRng.PasteSpecial Paste:=が
    2つともエラーを起こし、コメントアウトすると完了まで行くのですが
    成立させる対処方法はわかりますか?

    No.6の回答に寄せられた補足コメントです。 補足日時:2024/02/25 21:03
  • うーん・・・

    実行時 1004 rangeクラスのpastespecialメソッドが失敗しましたとでました。

    No.7の回答に寄せられた補足コメントです。 補足日時:2024/02/25 21:22
  • うれしい

    調査中失礼します。
    なぜかわかりませんが、動くようになりました
    夜遅くまでありがとうございました

    原因はわからずじまいです

    No.8の回答に寄せられた補足コメントです。 補足日時:2024/02/25 22:16

A 回答 (10件)

>なぜかわかりませんが、動くようになりました


とりあえずOKとしますが、どうも、Dim Excel As New Application
のexcelを使用するのがまずいように思われます。
上記を使用しないバージョンを作成しましたので、こちらもお試しください。(当方の環境では正常に動作することを確認済みです)
画面に表示したくないブックがある為に、Dim Excel As New Application
を使用したかと思いますが、これを使用せずに、非表示にするようにしました。もし、ちらつきが気になるなら、現在のを採用してください。

下記にアップしました。
https://ideone.com/ikKSnB

尚、copyの後pasteするのではなく、直接コピーする
Private Sub copy_sheet2
を作成しました。
全てコピーでOKならこちらでも良いかと思います。
こちらを使うときは、
Call copy_sheet(Fullpath(i), Frsheet(i), mb, Tosheet(i))

Call copy_sheet2(Fullpath(i), Frsheet(i), mb, Tosheet(i))
にしてください。

追伸:
本マクロを格納してあるブックは、下記のブックとは別のブックであると理解していますが、あってますか。
配信スケジュール.xlsm
未納本文.xlsm
ワークシート.xlsm
    • good
    • 0
この回答へのお礼

助かりました

夜遅くまでありがとうございました
とても感謝しております

また何か機会がありましたらぜひよろしくお願い申し上げます

お礼日時:2024/02/26 04:46

すみません。

解決には時間がかかりそうです。
返信は明日以降になります。
    • good
    • 0

>実行時 1004 rangeクラスのpastespecialメソッドが失敗しましたとでました。



承知しました。調査します。
この回答への補足あり
    • good
    • 0

>Private Sub copy_sheetの中にある、TargetRng.PasteSpecial Paste:=が


2つともエラーを起こし、コメントアウトすると完了まで行くのですが
成立させる対処方法はわかりますか?

こちらでは、正常に動作したので、問題ないと思っていましたが、
エラーメッセージは、どのような内容でしょうか。
この回答への補足あり
    • good
    • 0

>まずみたところフルパス FullPath1 = "D: はどのような設定ですか?



申し訳ありません。下記の行は、こちらで動作確認のために追加した行で
削除するのを忘れていました。下記の行は削除してください。

FullPath1 = "D:\goo\excel\goo446\配信スケジュール.xlsm"
FullPath2 = "D:\goo\excel\goo446\未納本文.xlsm"
FullPath3 = "D:\goo\excel\goo446\未納本文.xlsm"
FullPath4 = "D:\goo\excel\goo446\未納本文.xlsm"
この回答への補足あり
    • good
    • 0

下記URLにアップしました。


https://ideone.com/1y8ZKz
この回答への補足あり
    • good
    • 0

>

https://ideone.com/AoYyhB
>でよろしいですか?

上記URL参照しました。ありがとうございました。
これから確認してみます。
最後の行(152行目)のEは、End Subであると解釈します。
この回答への補足あり
    • good
    • 0

>文字数が多く、画像にしました。


>審査があるんですね。ありがとうございます
公序良俗に違反する画像の投稿が多いので、画像を審査するようになったと思われます。

提示されたソースをこちらでコピペして、実際の動作を確認したいと思いましたので、全ソースの提示をお願いしました。
申し訳ありませんが、画像ではなく、テキストで提示していただけませんでしょうか。
また、テキストのデータ量が多くて、このサイトにアップするのが大変であれば、ideへ投稿する方法もあります。
https://ideone.com/
を表示し、言語で、Textを選択します。
そこへ、表示したいテキストを貼り付け、Runをクリックすると投稿が完了します。
完了した結果のURLをこのサイトに提示していただければOKです。
この回答への補足あり
    • good
    • 1

>補足は手元に届いてますでしょうか。

確認するすべが見当たらなくて申し訳ございません。

補足は画像が含まれるものでしょうか。それであれば、画像の審査をgooの管理者がおこなうので、補足が反映されるまで時間がかかります。
現在、補足は表示されていません。
もし、画像を含まないのであれば、即時に表示されるはずですが、表示されていません。
この回答への補足あり
    • good
    • 0

>現在は1から4まで直線的にコピペをVBAで行っております。



そのマクロで実現したい処理の説明を提示していただけませんでしょうか。
そして、そのマクロ全体を提示していただけませんでしょうか。
そうすれば、良い回答が得られやすくなるかと。
この回答への補足あり
    • good
    • 1

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

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


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