
Dim mm As Integer
Dim ws_4 As Worksheet
Dim ws_5 As Worksheet
Dim ws_6 As Worksheet
Set ws_4 = Worksheets("4 月")
Set ws_5 = Worksheets("5 月")
Set ws_6 = Worksheets("6 月")
for mm=4 to 6 step 1
Sheets("ws_" & mm).Activate ←
ActiveSheet.Unprotect
next mm
シート名 4 月,5 月,6 月を順次アクティブにするマクロにしたつもりですが
←行でインデックスが有効範囲外というエラーメッセージがでます。
なぜなんでしょうか。解決策はありませんか。
ご教授よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
No1です。
>今後の為ご教授いただければうれしいです。
4月~3月であれば、連番とほぼ同様なので、計算で指定することも可能ですが、連番等ではない場合にはシート名を配列に入れておいて順番に呼び出せば良いです。
以下は、そんな方法での例です。
Dim sName, i As Long
sName = Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3)
For i = 0 To 11
MsgBox sName(i) & " 月"
' シートを表示するなら以下で↓
'Worksheets(sName(i) & " 月").Activate
' その後の処理
Next i
※ " 月"部分が共通なので、サンプルでは数字部分だけにしてしまいましたが、
sName = Array("4 月", "5 月", "6 月", ・・・
のようにしておく方が、実際にはわかりやすいと思います。
※ ループの制御変数(=i)の初期値や範囲が変わることにご留意ください。
No.3
- 回答日時:
横から失礼します
ご質問のコードを生かすと
配列を使えば、こんなことも出来ますが・・・
Dim mm As Integer
Dim ws_(4 To 6) As Worksheet
Set ws_(4) = Worksheets("4 月")
Set ws_(5) = Worksheets("5 月")
Set ws_(6) = Worksheets("6 月")
For mm = 4 To 6 Step 1
ws_(mm).Activate '←
ActiveSheet.Unprotect
Next mm
No.1
- 回答日時:
こんにちは
変数mmの値は、最初のループでは4になっています。
>Sheets("ws_" & mm).Activate
では「ws_4」というシート名のシートをActivateしようとしますが、「ws_4」というシート名のシートは存在しないのではないでしょうか?
ですので、エラーになっているものと推測されます。
4 月、5 月、6 月というシートを順にアクティブになさりたければ、
Worksheets( mm & " 月").Activate
とすることで、できるものと想像します。
ご回答ありがとうございました。
ご指摘の通り実行させると解決いたしました。
実を言うと本ファイルのシートは今年の4月から12月までと来年の1月から3月まで存在します。その為シート名を("ws_" & mm)におきかえ,来年の1月から3月を 「ws_13」「ws_14」「ws_15」にし,「ws_4」から「ws_15」を処理させようとしました。
シート名は実際のシート名で判別させるべきなのですか。
ご指摘の方法で For文を4月~12月と1月~3月を作れば問題は解決するのですが今後の為ご教授いただければうれしいです。
お手数おかけしますがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Visual Basic(VBA) 抽出結果を別シートに貼り付ける 2 2022/07/09 22:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Codeがわかりません(自作の...
-
エクセルvba ハイパーリンクに...
-
Excel VBA 指定シートの有無確認
-
ユーザーフォームに入力したデ...
-
エクセル Worksheet_Calculate
-
Excel チェックボックスにチェ...
-
エクセルのシート名変更で重複...
-
excelのマクロで該当処理できな...
-
VBAで以下の処理をする方法があ...
-
IFステートの中にWithステート...
-
エクセルのVBAの変更点がわ...
-
セルにBook名が入っていて、そ...
-
マクロの結合
-
原本シート複写してリストの氏...
-
excel|シートのリンク方法について
-
VBA初心者 シート名などについて
-
入力した項目別に色分けをした...
-
シートの枚数について
-
Excel 同一ブック内のシート(1)...
-
作ったマクロに不備があるかど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報