- ベストアンサー
エクセルマクロの条件設定について
- エクセルのマクロ実行条件について質問があります。
- 特定の範囲のセルが全て空欄の場合にマクロを実行しないようにしたいのですが、うまく設定できません。
- 他の方法でマクロの実行有無を判断する方法はありますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>0 Thenが不適切なのでしょうか。 マクロ以前に、シートのどこかのセルに =COUNTA(B4:B28) と記入してみると、ゼロじゃなくてしっかり25と計算結果が出ます。COUNTA関数じゃ「””」を無視できない事が判りますね。 というワケで。 他に何を調べたら、マクロ1を「実行して良い」条件が成立したと判断できるか、アタマを柔らかくして考えてみます。 実際には、あなたのワークシートが実際にどーなってるのか次第ですけど。 >マクロを実行したい時は、$B4:$B28のセルの一部、または全てのセルに4桁の数字が表示された時だけ 「4ケタ」にどれだけのイミがあるのかイマイチ不明ですが、たとえば =COUNT(B4:B28) が1以上になっていれば、少なくとも一部または全部に「数値が存在している」ことが判ります。 例: if application.count(worksheets("一覧").range("B4:B28")) > 0 then マクロ1 end if 他にも例えばCOUNTBLANKとかも利用できます。
その他の回答 (3)
- classical
- ベストアンサー率29% (14/47)
対象セルに関数が入っているということですので、 セル内の関数を扱うプロパティ(formula)を使用します。 If Application.WorksheetFunction. _ CountA(Sheets("一覧").Range("$B4:$B28").formula) = 0 Then
お礼
ありがとうございます! また違った方法も勉強になります!
- nishi6
- ベストアンサー率67% (869/1280)
セル範囲$B4:$B28をセル単位に調べる必要があります。下は例です。 Sub マクロ0() Dim rg As Range 'セル Dim InputCheck As Boolean 'チェック結果 '一カ所でも入力があればTrue For Each rg In Sheets("一覧").Range("$B4:$B28") If rg.Value <> "" Then InputCheck = True: Exit For End If Next '終了 If InputCheck = False Then MsgBox "終了wwwwwwwwwwwwwwwwwwww" Exit Sub End If 'マクロ実行 MsgBox "Macro実行" End Sub 質問を読むと、書いてあるマクロは、求める内容と少し違うのかもしれません。 条件:セル範囲$B4:$B28には最低一カ所4桁数値の入力がある。 チェックする内容は、 1.セル範囲$B4:$B28 2.最低一カ所の入力 3.入力値は数値 4.数値は4桁限定 下に書いてみました。 Sub マクロ1() Dim rg As Range 'セル Dim Check As Boolean 'チェック結果 Dim DataCount As Integer '正当なデータ個数 Check = True For Each rg In Sheets("一覧").Range("$B4:$B28") If rg.Value <> "" Then If IsNumeric(rg.Value) Then '数字の入力の場合 If 1000 <= rg.Value And rg.Value <= 9999 Then '4桁の場合は可 DataCount = DataCount + 1 Else '4桁ではない場合は不可 Check = False: Exit For End If Else '数字以外は不可 Check = False: Exit For End If End If Next '終了 If DataCount = 0 Or Check = False Then MsgBox "終了wwwwwwwwwwwwwwwwwwww" Exit Sub End If 'マクロ実行 MsgBox "Macro実行" End Sub
お礼
ありがとうございます! また違った方法も勉強になります!
- mshr1962
- ベストアンサー率39% (7417/18945)
>セルの一部、または全てのセルに4桁の数字が表示された時だけです。 4桁以上の数値でいいなら If Application.WorksheetFunction.CountIf(Sheets("一覧").Range("$B4:$B28"), ">999") = 0 Then とすればいいのでは?
お礼
ありがとうございます! また違った方法も勉強になります!
お礼
ありがとうございます! 多用するので簡略でとても助かりました!