• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IF = 0 Then 空欄と認識してくれない)

エクセルマクロの条件設定について

このQ&Aのポイント
  • エクセルのマクロ実行条件について質問があります。
  • 特定の範囲のセルが全て空欄の場合にマクロを実行しないようにしたいのですが、うまく設定できません。
  • 他の方法でマクロの実行有無を判断する方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>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とかも利用できます。

ricercar6
質問者

お礼

ありがとうございます! 多用するので簡略でとても助かりました!

その他の回答 (3)

  • classical
  • ベストアンサー率29% (14/47)
回答No.4

対象セルに関数が入っているということですので、 セル内の関数を扱うプロパティ(formula)を使用します。 If Application.WorksheetFunction. _ CountA(Sheets("一覧").Range("$B4:$B28").formula) = 0 Then

ricercar6
質問者

お礼

ありがとうございます! また違った方法も勉強になります!

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

セル範囲$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

ricercar6
質問者

お礼

ありがとうございます! また違った方法も勉強になります!

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

>セルの一部、または全てのセルに4桁の数字が表示された時だけです。 4桁以上の数値でいいなら If Application.WorksheetFunction.CountIf(Sheets("一覧").Range("$B4:$B28"), ">999") = 0 Then とすればいいのでは?

ricercar6
質問者

お礼

ありがとうございます! また違った方法も勉強になります!

関連するQ&A