戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
一部シートをグループ化してコピー

    [191630] 一部シートをグループ化してコピー-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ みらくる -(2020/03/17(19:23))
    □U R L/
      いつもお世話になっております。
      
      4つのシート(インデックス番号28〜31)をグループ化して、右側にコピーする操作をシート数が55になるまで繰り返したいです。一度に4シートコピーするので繰返しが(55-31)/4=6回行ってから終了にしたいです。
      
      インデックス番号28〜31を繰返しコピーする理由は、この4シートは数式でつながっていて一種類の帳票を4つのシートで1枚作成する部分であるためです。
      
      以下のコードを作って試しましたが、Worksheets(Array・・・シートグループ化、コピーのところでエラーとなりました。どのように修正したらよいか教えてください。宜しくお願い致します。
      
      このマクロを作りたい理由はインデックス番号28〜31の4組のシートの数式はちょくちょく手直ししたいためです。
      自分的には繰返しはDo Untilが好きです。
      
      Option Explicit
      
      Sub シートをまとめてコピー()
      
      ' シートインデックス番号28〜31の4シートをまとめてコピー
      If MsgBox("シートインデックス番号28〜31をコピーしますか?", vbYesNo + vbQuestion) = vbYes Then
      
          Application.DisplayAlerts = False
          
          'シートインデックス番号32以降を削除(前回コピーシートを削除)
          Do Until Worksheets.Count = 31
              Worksheets(Worksheets.Count).Delete
          Loop
      
          Application.DisplayAlerts = True
      
          'シートインデックス番号28〜31の4シートをまとめてコピー(インデックス番号32以降になるように右側にコピー)
          'シートインデックス番号が55になるまでコピー
          Do Until Worksheets.Count = 55
              Worksheets(Array("Worksheets(28)", "Worksheets(29)", "Worksheets(30)", "Worksheets(31)")).Copy After:=Worksheets(Worksheets.Count)
          Loop
          
          Calculate
          MsgBox "シートインデックス番号28〜31をコピーしました", vbInformation
          
      End If
      
      End Sub
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191631] Re[1]: 一部シートをグループ化してコピー-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/03/17(20:21))
    □U R L/
      そのままの例ではありませんが、
      3個のシートをコピーする例を書いてみました。
      Sub Macro1()
          Sheets(Array(1, 2, 3)).Copy After:=Sheets(Worksheets.count)
      End Sub
      これを参考にしてみて下さい。
      
      なお、私は、これを2回繰り返そうと思ったら、普通に
      Sub Macro1()
          Dim k As Long
          For k = 1 To 2
              Sheets(Array(1, 2, 3)).Copy After:=Sheets(Worksheets.count)
          Next
      End Sub
      と書く方が分かり易いですけどね。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191632] Re[2]: 一部シートをグループ化してコピー-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/03/17(20:40))
    □U R L/

      蛇足ですが。

      ちなみに Worksheets("Worksheets(28)")といった書き方が悪い理由は、以下。

      ""で囲むとそれは単なる文字列ですから、
      28番目のワークシートという解釈はしてくれません。
      単に、"Worksheets(28)"という文字列そのままのワークシートを
      指定したことになります。たぶんそれはないでしょうから、エラーになります。

      なお、私が前記したコードでSheetsを使っていますが、
      それはマクロ記録をそのまま使って修正したからで、
      Worksheetsを使っても、多分同様の動作になるはずです。
      Sheetsでないといけないわけでもありません。




    [191633] Re[2]: 一部シートをグループ化してコピー-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ みらくる -(2020/03/17(20:53))
    □U R L/
      γ様
      ありがとうございました。
      おかげさまでコードを教えていただきましたとおり変更しましたらコピー
      できました。VBAは数式と違って難しいですね。
      
      変更前
      Worksheets(Array("Worksheets(28)", "Worksheets(29)", "Worksheets(30)", "Worksheets(31)")).Copy After:=Worksheets(Worksheets.Count)
      
      変更後
      Worksheets(Array(28, 29, 30, 31)).Copy After:=Worksheets(Worksheets.Count)
      
      個人的には繰返し文は、ForNextの方がDoUntilより難しいように思います。
      DoUntilは終了条件を入力するのでわかりやすく使いやすいのでこれしか使って
      いません。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191634] Re[3]: 一部シートをグループ化してコピー-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/03/17(21:21))
    □U R L/
      それぞれの意見があってよいですが、一般的に言われているのは、
      Do untilは、何回繰り返すか事前に想定できない時に使われ、
      事前に決まっているときは、For .. Nextのほうが使い易い、と
      されることが多いかと思います。
      For ..Nextに比して
      ・繰り返し変数のインクリメンタル(カウントアップ)を自前で書く
        必要があること(繰り返し変数があることが多い)
      ・脱出条件の書き方が難しいことがある
      ということから、一般にはFor Nextのほうが易しい、明確になる、
      と言われることが多いですね。ケースバイケースでしょう。
      
      初学者にはFor Nextを薦める方が多いですが、
      Do Untilのほうが簡単ということなら、その対象に当てはまらないのでしょう。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191635] Re[3]: 一部シートをグループ化してコピー-

    記事引用/メール受信=OFF■

    □投稿者/ マナ -(2020/03/17(21:24))
    □U R L/
      >個人的には繰返し文は、ForNextの方がDoUntilより難しいように思います。
      
      わたしは、無限ループがいやで、できれば使いたくないです。
      
      DoUntilは終了条件を入力するのでわかりやすく
      
      その条件が難しいです。
      
      Do Until Worksheets.Count = 55
      
      例えば、今回はOKかもしれませんが、55以上にしたくなります。
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191636] Re[4]: 一部シートをグループ化してコピー-

    記事引用/メール受信=OFF■

    □投稿者/ みらくる -(2020/03/17(21:55))
    □U R L/
      マナ様
      ご意見ありがとうございます。
      
      >例えば、今回はOKかもしれませんが、55以上にしたくなります。
      
      条件を=55とするとピンポイントすぎますね。54や56だと無限ループでした。
      条件は>=55が無難ですね。
      今までDoUntilをたくさん使ってきましたが、一度も無限ループになったことは
      ありません(多分)が、今回のような倍数的な使い方は初めてで条件がピンポイ
      ントすぎる場合は怖いです。今回の場合、何かの都合でコピー元のインデックス
      番号が変わってしまった場合無限ループになってしまいます。
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191637] (削除)-

    記事引用/メール受信=OFF■

    □投稿者/ / -(2020/03/17(22:13))
    □U R L/

      この記事は削除されました




    [191638] Re[6]: 一部シートをグループ化してコピー-

    記事引用/メール受信=OFF■

    □投稿者/ みらくる -(2020/03/17(22:24))
    □U R L/

      γ様

      エラーの原因を詳しく教えて下さり誠にありがとうございました。

      >""で囲むとそれは単なる文字列ですから、
      >28番目のワークシートという解釈はしてくれません。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G