プロが教える店舗&オフィスのセキュリティ対策術

エクセルマクロ(VBA)初心者です。よろしくお願いします。

(1)エクセルのsheet1のセルA1の値が”0(ゼロ)”でなければ、そのシート上で任意のマクロを実行し、ゼロであれば実行せずにsheet2へとぶ

(2)同じようにsheet2のセルA1がゼロでなければ実効し、ゼロでなければsheet3へとぶ・・・の繰り返し(sheet50まであります。)

このようなマクロ(標準モジュール)の書き方を教えてください。
よろしくお願いいたします。

A 回答 (4件)

シートのActivateイベントに記述します(Sheet1の場合)


-----------------------------------
Private Sub Worksheet_Activate()
 If Range("A1") <> 0 Then
  任意のマクロ
 Else
  Sheets("Sheet2").Select 'ここをSheet毎に変える
 End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
標準モジュールでの希望でしたので、ポイントできませんでしたが、
とても参考になりました。感謝いたします。

お礼日時:2006/12/13 20:18

Sub test06()


Dim sh As Worksheet
For Each sh In Worksheets
If sh.Range("A1") <> 0 Then
MsgBox sh.Name
'AAA
Else
End If
Next
End Sub
ーーー
初心者には突飛かも知れないが、常套手段です。
In ActiveWorkBookでなくIn Worksheetsです。
AAAのところに、コメントをはずし、モジュール・ルーチン名を入れてください。

この回答への補足

さっそくのご指導をありがとうございます。
あまりに勉強が不足しているとお叱りをいただきそうですが、重ねてご指導をよろしくお願いいたします。

任意のマクロを「Macro1」とするとき、

Sub test06()
Dim sh As Worksheet
For Each sh In Worksheets
If sh.Range("A1") <> 0 Then
MsgBox sh.Name
Macro1
Else
End If
Next
End Sub

でやってみましたが、うまくできませんでした。何か間違いがありますでしょうか?

補足日時:2006/12/12 20:07
    • good
    • 0
この回答へのお礼

お礼欄をつかって恐縮ですが、
(1)A1が空白のときにうまくいかないような気がします。
(2)私の質問の仕方が悪かったのかもしれませんが、
 ご指導いただいたコードではアクティブシートでマクロが繰り返されてしまうようです。それぞれのシート上でのマクロ実行がうまくいきませんでした。よろしければ更なるご指導をよろしくお願いいたします。

お礼日時:2006/12/12 20:32

必要であれば補足をお願いします


1)A1の値が0以外で「任意のマクロ」を実行した時、次のシートも処理するのですか(そこで終わりですか?)
2)質問のマクロを実行するときSheet1が必ず選択されているのですか
3)Sheet1は一番左はじにありますか
4)「次のシート」はWorksheet(n+1)で良いですか? それとも見た目通りの順番で「次」ですか?(Sheet番号通りにSheetが並んでいるとは限らないので)

色々と疑問はありますが「Sheet1は一番左端にある。任意のマクロが実行された時点で次のシートは処理しない。次のシートとは見た目の次のシートとする」前提でマクロを書きます

Sub Macro1()
Dim CntSheet, idx As Integer
 CntSheet = Worksheets.Count
 Sheets("Sheet1").Activate
 For idx = 1 To CntSheet
   If ActiveSheet.Range("A1") <> 0 Then
     Call 任意のマクロ名
     Exit For
   Else
     If idx < CntSheet Then
       ActiveSheet.Next.Select
     End If
   End If
 Next idx
End Sub

この回答への補足

補足要求ありがとうございます。
尚、ご指導お願いいたします。

(1)A1の値が0以外で「任意のマクロ」を実行した時、次のシートも処理します。(そこで終わりではありません)
(2)マクロを実行するときSheet1が必ず選択されているとは限りません。
(3)Sheet1は一番左はじにありません。
(4)「次のシート」はWorksheet(n+1)で良いです。
★さらに、sheet1~sheet50ではマクロを実行したいのですが、そのほかのシート(いくつかあり、いろいろ名前をつけています)はマクロを実行したくはないのです。
そのような条件で可能でしょうか。よろしくお願いいたします。

補足日時:2006/12/12 19:40
    • good
    • 0

#03です。

補足ありがとうございました。
全てのシートに対して実行するなら#02さんの回答のFor Each文を利用するのが定石と思いますが、先の回答に手を入れたものを再掲します。

変更したのは2点です。
1)Range("A1").Formula で判定するようにした
2)シート名(SheetXX)のXXを取り出して条件判定に加えた

Sub Macro1()
Dim CntSheet, idx As Integer, RES
 CntSheet = Worksheets.Count
 idx = 1
 Do While idx <= CntSheet
  Worksheets(idx).Select
  If ActiveSheet.Range("A1").Formula <> 0 Then
   RES = Val(Application.Substitute(ActiveSheet.Name, "Sheet", "")) ’シート名からSheetを抜いた結果→RES
   If RES > 0 And RES < 51 Then
    Call 任意のマクロ名
   End If
  End If
  idx = idx + 1
 Loop
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。希望通りの結果がでました。
シンプルなコードですので、勉強させていただくにも理解しやすく感謝です。
心から感謝申し上げます。

お礼日時:2006/12/13 10:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!