アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記を実行すると、BC12:BC24に文字があってもなくても、
常に「時刻が入力されていません!」メッセージが表示されてしまいます。
そのセル範囲には、IF関数があるんですが・・CountAが効いていないような・・?
データの問題か記述の問題かわかりません。
解明していただきたくよろしくお願いいたします。


Private Sub Workbook_BeforeClose(Cancel As Boolean)
If WorksheetFunction.CountA(Worksheets("Sheet1").Range("BC12:BC24")) > 0 Then
If MsgBox("時刻が入力されていません!", vbRetryCancel + vbCritical, "入力チェック") = vbRetry Then
MsgBox "入力シートに戻ります", vbInformation
Cancel = True
Else
MsgBox "エクセル閉じます", vbInformation
End If
End If
End Sub

A 回答 (3件)

CountAは空白で無いセル個数をカウントする。


空白と言うのが曲者で空白キーを使って空白文字を入れたセルが"空白セル"です。
何も入って無いNULLでは無いです。
つまり何も入って無いNULLもカウントする。

だからNULLセル以外をカウントする様にします。
CountAじゃ無く、Countifを使う。
    • good
    • 1
この回答へのお礼

勉強になりました。
ありがとうございました。

お礼日時:2020/06/04 12:41

こんにちは、



また、仮に初めのIFがTRUEで下記が事項され、再試行、キャンセルのメッセージが表示され、
再試行を押下場合、すぐ下が実行されますが、キャンセルが押下された場合、Else以下が実行されます
これは、キャンセルの意味を成しますか。
また、このコードの場合、すべての範囲に1つでも値がある場合(数式がある場合を含む)End If 以下が実行され
何も表示されず、ブックが閉じられます。

一連のご質問を鑑みて、関数の意味などを調べた方が、理解が得られると思いますが、
ご質問の事象の可能性は、数式による空白があるのではないかと思います。

範囲全てが入力されていれば、と言うプロセスで、範囲内に数式によるっ空白を含む場合、
下記のような、サンプルになります。(なされたい事が変わっているなら、下記は忘れてください)

参考まで

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If WorksheetFunction.CountBlank(Worksheets("Sheet1").Range("BC12:BC24")) > 0 Then
   If MsgBox("時刻が入力されていません!", vbRetryCancel + vbCritical, "入力チェック") = vbRetry Then
    MsgBox "入力シートに戻ります", vbInformation
    Cancel = True
    Exit Sub
   Else
    Cancel = True
    Exit Sub
   End If
  End If
  MsgBox "エクセル閉じます", vbInformation
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2020/06/04 12:49

#2です


#2で示したコードは、Worksheets("Sheet1").Range("BC12:BC24")範囲に全て何かしら表示されていないと
ブックを閉じる事が出来ません。
なので、キャンセルを保存して閉じるに使用する場合、
その選択を行って実行される部分をご自身で変更するようにしてください。
   Else Cancel = True Exit Sub を削除するだけで良いかと思います。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2020/06/04 12:49

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