Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6685 / 13644 ツリー ←次へ | 前へ→

【43742】シートの選択 tomo 06/10/24(火) 16:02 質問[未読]
【43743】Re:シートの選択 Jaka 06/10/24(火) 16:17 発言[未読]
【43749】Re:シートの選択 tomo 06/10/24(火) 16:56 質問[未読]
【43748】Re:シートの選択 Kein 06/10/24(火) 16:54 回答[未読]
【43751】Re:シートの選択 tomo 06/10/24(火) 17:56 質問[未読]
【43754】Re:シートの選択 Kein 06/10/24(火) 18:17 回答[未読]
【43769】Re:シートの選択 tomo 06/10/25(水) 11:38 お礼[未読]
【43755】Re:シートの選択 maverick 06/10/24(火) 18:27 回答[未読]

【43742】シートの選択
質問  tomo  - 06/10/24(火) 16:02 -

引用なし
パスワード
   sheet1〜sheet10まであり、それぞれのsheetに対して、
同じマクロを実行させたいと思っています。
下記のコードをFor文等を使用して完結に表現したいのですが、
どのようにしたらよいのでしょうか?

Sub test()
Set ws1 = Worksheets("aaa(1)")
Set ws2 = Worksheets("aaa(2)")
  ・
  ・
  ・
set ws10 = Worksheets("aaa(10)")

ws1.Select
Call test2
ws2.Select
Call test2
  ・
  ・
  ・
ws10.Select
Call test2

End sub


こんなのを試したのですがダメでした。

For i = 1 to 10
 Worksheets("aaa(" & i & ")").Select
 Call test2
Next i

【43743】Re:シートの選択
発言  Jaka  - 06/10/24(火) 16:17 -

引用なし
パスワード
   やろうとしていることが全然わかりません。

test2 は、どんなコードになっているのでしょうか?

これだけでできると思いますけど、
例えば、
For i = 1 to 10
 Worksheets("aaa(" & i & ")").Range("A1").Value = 123
Next i

【43748】Re:シートの選択
回答  Kein  - 06/10/24(火) 16:54 -

引用なし
パスワード
   >sheet1〜sheet10まであり
それが対象ブック内の全シートであれば

Dim WS As Worksheet

For Each WS In Worksheets
  Call test2
Next

とすれば良いし、それ以外に違うシートがある場合、ちょっと長いけど

Dim WS As Worksheet

For Each WS In Sheets(Array("aaa(1)", "aaa(2)", "aaa(3)", "aaa(4)", _
"aaa(5)", "aaa(6)", "aaa(7)", "aaa(8)", "aaa(9)", "aaa(10)"))
  Call test2
Next

というコードでも出来ます。
あとは「選択しているシート全て」ということにするなら

Dim WS As Worksheet

For Each WS In ActiveWindow.SelectedSheets
  Call test2
Next

【43749】Re:シートの選択
質問  tomo  - 06/10/24(火) 16:56 -

引用なし
パスワード
   ▼Jaka さん:
test2 の中身は特に意味はなく、
単に複数のsheetに同じマクロを順次実行させたいだけです。

例えば、いろいろな計算手順をコード化したようなマクロがあり、
必要な数値や情報が記入されているsheet(aaa(1))に対してマクロを実行させます。
次に必要な情報は同じであるが、数値の異なるsheet(aaa(2))も同じマクロで実行し、
以降も複数のシートに対して同じマクロを実行する。
こんな感じです。

繰り返し同じ工程をする場合の、コード記入方法を教えていただきたくて、
簡単に説明してしまいました。
わかり難いようでした。失礼しました。

【43751】Re:シートの選択
質問  tomo  - 06/10/24(火) 17:56 -

引用なし
パスワード
   ▼Kein さん:
>とすれば良いし、それ以外に違うシートがある場合、ちょっと長いけど
>
>Dim WS As Worksheet
>
>For Each WS In Sheets(Array("aaa(1)", "aaa(2)", "aaa(3)", "aaa(4)", _
>"aaa(5)", "aaa(6)", "aaa(7)", "aaa(8)", "aaa(9)", "aaa(10)"))
>  Call test2
>Next
>

もうひとつ教えて下さい。
今回sheet数は10枚ですが、10枚20枚以上となると、
上記の方法だど記入が大変になります。
For文以外でも構いません。
変数を i = i + 1 のようにカウントしていくことでaaa(1)〜aaa(10)を
認識する方法はあるのでしょうか?

【43754】Re:シートの選択
回答  Kein  - 06/10/24(火) 18:17 -

引用なし
パスワード
   つまり全シートが必ず、1から並びの "aaa(?)" という名前になっている
わけですね ? (シートの並び順ではなく、数値が飛ぶことなく 1〜シート数分ある、
という意味です)それなら・・・

Dim i As Integer

For i = 1 To Worksheets.Count
  Worksheets("aaa(" & i & ")").Select
  Call test2
Next i

のようにすれば出来ますが。
 

【43755】Re:シートの選択
回答  maverick  - 06/10/24(火) 18:27 -

引用なし
パスワード
   Sub test()
  Dim i As Long
  
  For i = 1 To Worksheets.Count
    If Left$(Worksheets(i).Name, 4) = "aaa(" And Right$(Worksheets(i).Name, 1) = ")" Then
      Worksheets(i).Activate
      Call test2
    End If
  Next i
End Sub

【43769】Re:シートの選択
お礼  tomo  - 06/10/25(水) 11:38 -

引用なし
パスワード
   ▼Kein さん:
ありがとうございました。
おかげさまで,無事コード化できました。

ちなみに,シートの数値が飛んでいる場合は,↓の様に対処しました。

For i = 1 To 9
  Worksheets("aaa(" & i & ")").Select
  Call test2
Next i
For i = 11 To 19
  Worksheets("aaa(" & i & ")").Select
  Call test2
Next i

実際に作成中だったコードではシート名が,bay id,bay id (2) ・・・ bay id (10)
となっていたため,bay id (1) がなくラーが起きていたようです。
なるべく元文を記載した方が良いようですね。
回答頂いたおかげでミスに気が付きました。大変失礼しました。

回答していただいた皆様,ありがとうございました。

6685 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free