Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Microsoft 365)
ブック内複数シートでループ処理を行いたい
投稿日時: 23/09/13 15:35:22
投稿者: Yukstar

 初歩的な内容で大変恐縮なのですが、ご教示いただければ幸いです。
 
 <内容説明>
  ・ブック内にあるシート名"A1〜A3"をコピーしてシート名"B1〜B3"にそれぞれ貼付けたいです。
  (A1→B1, A2→B2, A3→B3です、実際にはもっと多くのシートがあります。)
  ・ブック内には別のシート名も複数存在します。
  ・シート名を指定して1シートずつコピーするパターンは下記のとおりで問題ないのですが
   シート数が多くあまりに長いコードになってしまう上、変数設定の数も多すぎるので困っています。
  ・シート名にA+連番→B+連番という規則性があることを活用してコードを簡素化したいです。
 
  Sub Sheet_Copy_Paste()
 
       Dim wsA1 As Worksheet
      Set wsA1 = ThisWorkbook.Sheets("A1")
 
       Dim wsB1 As Worksheet
      Set wsB1 = ThisWorkbook.Sheets("B1")
 
       wsA1.Range("A1:Z100").Copy
       wsB1.Range("A1").PasteSpecial Paste:=xlPasteValues
   
   '以降A2→B2, A3→B3と続く
 
   End Sub
 
 お手数ですが、宜しくお願いいたします。

回答
投稿日時: 23/09/13 18:29:45
投稿者: simple

こんな風に部品化したらどうでしょうか。

Sub main()
    Dim k As Long
    For k = 1 To 3
        Call Sheet_Copy_Paste("A" & k, "B" & k)
    Next
End Sub

Sub Sheet_Copy_Paste(sourceSh As String, destSh As String)
    Dim wsA1 As Worksheet
    Set wsA1 = ThisWorkbook.Sheets(sourceSh)

    Dim wsB1 As Worksheet
    Set wsB1 = ThisWorkbook.Sheets(destSh)

    wsA1.Range("A1:Z100").Copy
    wsB1.Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
# 動作確認していません。確認してください。

回答
投稿日時: 23/09/13 22:14:57
投稿者: simple

こちらが先でしたね。

Sub test()
    Dim wsA  As Worksheet
    Dim wsB  As Worksheet
    Dim k    As Long
    For k = 1 To 3      'ここは適宜修正してください。
        Set wsA = ThisWorkbook.Sheets("A" & k)
        Set wsB = ThisWorkbook.Sheets("B" & k)
        wsA.Range("A1:Z100").Copy
        wsB.Range("A1").PasteSpecial Paste:=xlPasteValues
    Next
End Sub

投稿日時: 23/09/14 16:09:04
投稿者: Yukstar

 
 simple様
 
 初歩的な質問にも関わらず、こんなにも迅速かつ丁寧に教えていただきありがとうございます。
 どちらの方法においても問題なく希望する結果を得られました。
 
 特に部品化する方法に関しては大変勉強になりました。
 こちらにてクローズとさせていただきます。
 本当にありがとうございました。