• ベストアンサー

エクセルでファイル保存時にアラームを出したい

いつもお世話になっております。 エクセル2010を使っているのですが、複数人で同じシートを使用しているのですが、データ入力後、保存する際に特定のセルが空白の時には、何らかの警告が出るようにしたいのですが。 出来れば複数個(2-3個)のセルの空白を確認出来れば理想ですが、取りあえずは特定の1個のセルが空白だったらそのまま保存できない様な仕掛けが欲しいのですが。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

<TEST1> Sub 入力漏れ() ↑が何を意図しているのかわかりません。 こんな画面になることを期待しています。

akira0723
質問者

お礼

当方の知識不足に何度もお付き合いくださりありがとうございました。

akira0723
質問者

補足

いやいや~できました。というより出来てしまいました、実感です。 最後のNo5の回答で、コメントも含めてのコピーで良いとは思いませんでした。 1行目のの「入力漏れ()」は最初にマクロを作ろうとした時の「マクロの名前」なのですが、なぜか自動で入れてくれるので、自動で入るのでまさかこれが原因とは。 本当に何度もご回答くださり感謝いたします。 これで、後日過去の入力記録を探して、入力する必要が無くなりました。 本当にお手数をおかけしました。

その他の回答 (4)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

コードをちょっと変更し、コメントを書き加えました。 これなら通じますか? Option Explicit '//------------------------------------------------------------------------- '// 閉じるときにチェック 該当したらメッセージを表示して抜ける '//------------------------------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean)  Dim wkCount As Integer  Dim wkCounter As Integer  With ThisWorkbook   wkCount = .Sheets.Count      'シートの数を数える   For wkCounter = 1 To wkCount    'シートの数だけ繰り返す ここから    'A1をチェック ここから    If .Sheets(wkCounter).Range("A1").Value = "" Then     MsgBox Format(wkCounter, "0") & "番目のシートの" & _      "A1が未入力!", vbCritical + vbOKOnly, "確認"     Cancel = True     Exit Sub    End If    'A1をチェック ここまで    'B2をチェック ここから    If .Sheets(wkCounter).Range("B2").Value = "" Then     MsgBox Format(wkCounter, "0") & "番目のシートの" & _      "B2が未入力!", vbCritical + vbOKOnly, "確認"     Cancel = True     Exit Sub    End If    'B1をチェック ここまで   Next wkCounter          'シートの数だけ繰り返す ここまで  End With End Sub '//------------------------------------------------------------------------- '// 終了するときにチェック 該当したらメッセージを表示して抜ける '//------------------------------------------------------------------------- Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  Dim wkCount As Integer  Dim wkCounter As Integer  '以下、閉じるときと同じ End Sub

akira0723
質問者

補足

何度も本当にすみません。 もう少しだと思うので何とか出来るようにしたいのですが、トホホです。 追記していただいたことは何となくわかっているつもりですが、やはりうまく行きません。 下記の2つを試してみましたがやはりA1の確認だけでB2のチェックは無視されてしまいます。 <TEST1> Sub 入力漏れ() Option Explicit Private Sub Workbook_BeforeSave(Cancel As Boolean) Dim wkCount As Integer Dim wkCounter As Integer With ThisWorkbook wkCount = .Sheets.Count For wkCounter = 1 To wkCount If .Sheets(wkCounter).Range("A1").Value = "" Then MsgBox Format(wkCounter, "0") & "番目のシートの" & "A1が未入力!", vbCritical + vbOKOnly, "確認" Cancel = True Exit Sub End If Next wkCounter End Sub For wkCounter = 1 To wkCount If .Sheets(wkCounter).Range("B2").Value = "" Then MsgBox Format(wkCounter, "0") & "番目のシートの" & "B2が未入力!", vbCritical + vbOKOnly, "確認" Cancel = True Exit Sub End If Next wkCounter End With End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <TEST2> Sub 入力漏れ() Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim wkCount As Integer Dim wkCounter As Integer With ThisWorkbook wkCount = .Sheets.Count For wkCounter = 1 To wkCount If .Sheets(wkCounter).Range("A1").Value = "" Then MsgBox Format(wkCounter, "0") & "番目のシートの" & "A1が未入力!", vbCritical + vbOKOnly, "確認" Cancel = True Exit Sub End If If .Sheets(wkCounter).Range("B2").Value = "" Then MsgBox Format(wkCounter, "0") & "番目のシートの" & "B2が未入力!", vbCritical + vbOKOnly, "確認" Cancel = True Exit Sub End If Next wkCounter End With End Sub

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

掲示したマクロは、 シート全数のA1セルをチェックし、 未入力が1か所でもあれば、メッセージを表示して 抜けます。(スプレッドシートの画面に戻ります。) 続いて、 シート全数のB2セルをチェックし、 未入力が1か所でもあれば、メッセージを表示して 抜けます。(スプレッドシートの画面に戻ります。) つまり、 Sheet1のA1セルとSheet3のB2セルが空欄の場合は 操作者が終了しようとしたときに、 Sheet1のA1セルが未入力な旨のメッセージを表示して抜けます。 その後、 操作者がSheet1のA1セルを埋め、終了しようとすると Sheet3のB2セルが未入力な旨のメッセージを表示して抜けます。 この動作をしますので、結果的に、 シート全数のA1、B2セルが埋まるまで終了できない。 という動作をします。 その意味で、 >目的はA1とB2の「両方とも入力済みで有ること」のチェック という要望を満たしているものと思いますがいかがでしょうか? それとも、 未入力箇所が複数ある場合は 1回のチェックで、 未入力箇所の全数が表示されるようにしたいですか? それとも、 シート単位で、 A1、B2セル双方が空欄の場合は、終了を許可したいですか? 保存するときにチェックしたいということであれば 先に掲示した Private Sub Workbook_BeforeClose(Cancel As Boolean) ↑の行を Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ↑の行に変更します。 保存するときも終了するときもチェックしたいのであれば Private Sub Workbook_BeforeClose(Cancel As Boolean) ↑の行以下の全数と Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ↑の行以下の全数をと ThisWorkbookオブジェクトに配置します。

akira0723
質問者

補足

早々のご回答ありがとうございます。 HohoPapaさんの意図されている通りの事がしたいのですが、B2の空白チェックをA1のコードの後にどうやって追記するのか分かりません。 「'複数ある場合は、以下。。。」 をコピーして単に後に貼り付けてみたのですが、そのまま保存画面がでて、終了出来てしまいます。 A1チェック後の End Sub を削除してみましたが効果なし。 本当に申し訳ないのですが、何処にどのように挿入するのか教えて頂きたく。 追加するコードはそっくりそのままで良いのですよね? また、実作業してみたら保存時にアラームが出る方が有効なので、これへの回答にも感謝です。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

>ふと気づいたのですが、 >A1セルを対象にしているのですが、 >シートを特定していないのが原因ではないでしょうか? そのように思います。 以下のコードをThisWorkbookオブジェクトに書き込めば 期待のチェックができるだろうと思います。 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim wkCount As Integer Dim wkCounter As Integer With ThisWorkbook wkCount = .Sheets.Count For wkCounter = 1 To wkCount If .Sheets(wkCounter).Range("A1").Value = "" Then MsgBox Format(wkCounter, "0") & "番目のシートの" & "A1が未入力!", vbCritical + vbOKOnly, "確認" Cancel = True Exit Sub End If Next wkCounter '複数ある場合は、以下。。。 For wkCounter = 1 To wkCount If .Sheets(wkCounter).Range("B2").Value = "" Then MsgBox Format(wkCounter, "0") & "番目のシートの" & "B2が未入力!", vbCritical + vbOKOnly, "確認" Cancel = True Exit Sub End If Next wkCounter End With End Sub

akira0723
質問者

補足

ありがとうございます。 早速試してみて、全てのシートのA1、B2の入力漏れが単独でのチェックはうまく行くのですが、目的はA1とB2の「両方とも入力済みで有ること」のチェックで、この場合は、多分下記の範囲指定だと思うのですが、具体的にどのように指定するのでしょう? If .Sheets(wkCounter).Range("A1").Value = "" Then 当方マクロの自動記録で作成したものをいじる程度しかできないので、お手数ですが宜しくお願い致します。 また欲が出てきたのですが、CloseではなくSave時にチェックを掛けるのに BeforeClose を BeforSave としてみたのですが動作しませんでした。 保存時にアラームを出す方法も、もしできれるならばお願いします。 だんだん欲が出てきて済みません。

  • Nobu-W
  • ベストアンサー率39% (724/1831)
回答No.1

例えば、セルA1には必ず入力しないといけない場合 '----------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean)  If Range("A1").Value = "" Then   MsgBox "A1が未入力!", vbCritical + vbOKOnly, "確認"   Cancel = True  End If End Sub '------------------------------------------------------ こんなのは? 使えない?

akira0723
質問者

補足

ご回答有りがとうございます。 早々にご回答いただいたのに別の仕事に追われており対応遅くなり申し訳ありません。 やってみましたが、目的セルが空白でも何の変化もなく、普通に保存出来て終了してしまいます。 ファイルのopen、closeの所要時間が長くなった気がしますが、エラーメッセージは出ません。 ふと気づいたのですが、A1セルを対象にしているのですが、シートを特定していないのが原因ではないでしょうか? 使っているブックには複数のシートが有り、毎回新しいシートに入力するのでシートが増えて行きます。 マクロは記録しては使っているのですが、作成は殆どしたことが無く、申し訳ありませんが今一度教えて頂ければ幸いです。 複数で使用するBookで、表中の「日付」と「LOT No」の入力を忘れることが多いく、後で入れるのが面倒なので、まずは「LOT No」だけでもと思いますので宜しくお願いします。 ちなみに2つのセルを対象にする場合は、 If Range("A1"or"B2").Value = "" Then とかにするれば良いのでしょうか? お手数をおかけします。