お世話になります。
マクロは初心者です。
セルの数値を参照して、シートをアクティブにしたいのですが
下記のような繰り返しでシートが30ぐらいあるので、簡単な
表現に出来ないでしょうか。
宜しくお願いします。
Private Sub Workbook_Open()
If 0 <= Worksheets(4).Range("M1") < 7 Then
Worksheets(4).Activate
End If
If 0 <= Worksheets(5).Range("M1") < 7 Then
Worksheets(5).Activate
End If
If 0 <= Worksheets(6).Range("M1") < 7 Then
Worksheets(6).Activate
End If
If 0 <= Worksheets(7).Range("M1") < 7 Then
Worksheets(7).Activate
End If
If 0 <= Worksheets(8).Range("M1") < 7 Then
Worksheets(8).Activate
End If
If 0 <= Worksheets(9).Range("M1") < 7 Then
Worksheets(9).Activate
End If
End Sub
あなたが書こうとしたマクロの動作を忠実に再現すると,次のように(多分)なります。
private sub Workbook_Open()
dim i as long
for i = worksheets.count to 4 step -1
if 0 <= worksheets(i).range("M1") and worksheets(i).range("M1") < 7 then
worksheets(i).select
exit sub
end if
next
end sub
あるいはそれとも,こういう事だったのかもしれません。
private sub Workbook_Open()
dim i as long
for i = 4 to worksheets.count
if 0 <= worksheets(i).range("M1") and worksheets(i).range("M1") < 7 then
worksheets(i).select
exit for
end if
next
end sub
●そもそも,あなたが今回のマクロで「どういう結果が欲しかったのか」ご相談に示されていませんので,まずそこいらを明らかにする所から始めましょう。
●サンプルマクロをみて勉強してください
If 0 <= Worksheets(4).Range("M1") < 7 Then
といった書き方は,間違いです。
質問者
お礼
有難うございました。
書いて頂いたマクロで完璧です。
.count を使うんですね。勉強になりました。
試行錯誤でやっていまして
If 0 <= Worksheets(4).Range("M1") and Worksheets(4).Range("M1")< 7 Then
は、質問した後に気づきました。
今晩は。
↓の2通りですね^^b
1個目は「全シート中の個々のシートに対して繰り返せ」で、
2個目は「1から、全シートの数まで、シート番号を繰り返せ」です。
どっちでもお好きな方を使ってください。
Sub 全シート取得()
For Each シート In Worksheets
If 0 <= シート.Range("M1") And シート.Range("M1") < 7 Then
MsgBox (シート.Name)
'シート.Activate
End If
Next
End Sub
Sub 全シート取得2()
For シートNo = 1 To Worksheets.Count
If 0 <= Worksheets(シートNo).Range("M1") And Worksheets(シートNo).Range("M1") < 7 Then
MsgBox (Worksheets(シートNo).Name)
'Worksheets(シートNo).Activate
End If
Next
End Sub
あとちなみに、IF 4<x<7 then
のように書くとVBAでは「x<7」の検査結果のみを返してきますので、
意図した動きになりません。
IF 4<x And x<7 then
と書く癖をつけておく方がいいです。
>マクロは初心者です
これからどうぞ頑張って^^b
お礼
有難うございました。 書いて頂いたマクロで完璧です。 .count を使うんですね。勉強になりました。 試行錯誤でやっていまして If 0 <= Worksheets(4).Range("M1") and Worksheets(4).Range("M1")< 7 Then は、質問した後に気づきました。