• ベストアンサー

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

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

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

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

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

akira0723
質問者

お礼

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

akira0723
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答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% (454/692)
回答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% (454/692)
回答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% (725/1832)
回答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 とかにするれば良いのでしょうか? お手数をおかけします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル 未入力セルがあると保存できなくなるように

    エクセル 未入力セルがあると保存できなくなるようにする エクセルで特定の複数セルに未入力があると保存できなくなるようにしたいのです。 (例:M12、AD12、M13、U13、AD13、K14、N14、Q14、Z14、AC14) また複数シートで、シート名は作成者各個人にてバラバラになります。 ※VBAでSheet1などと特定ができなくなると思います。 そのような状況でVBAなどで設定は出来ますでしょうか? よろしくお願い致します。

  • エクセルで保存時に空白セルをチェックしたい

    エクセル2010です。 先日ここで、複数あるシートの特定のセルが空白の時には「A1セルが空白です」というアラームが出るようなマクロを丁寧に教えてもらってうまく行ったのですが、別のBookで同じアラームを出したいのですが、少し条件が違っており、自分では何とも修正できませんのでお助け下さい。 先日教わったコードは複数ある全シートの特定のセルについて検証するのですが今度のBookでは、入力シートが予め余分に10枚程度コピーで作ってあるので、同じコードでは未入力の書式シートにも何か入力していないと保存できないことになり、未入力のシートに何か入れてしまうと入力シートとの区別がつかないことになります。 つまり、Activeシートだけチェックするようなマクロにしたいのですが。 ちなみに先日教えてもらったコードは下記の通り。 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

  • エクセルの保存時にSheet1で保存する

    いつもお世話になっております。 エクセル2016で他のシートでファイルを保存しても必ずSheet1で保存するようにしたいのですが。 目的は開くときに必ずSheet1で開いてくるようにしたいのです。 以前オープンマクロを自作したらエクセルが開かなくなってしまって非常に焦ったことがあるので出来れば保存時のマクロでお願いします。 尚、Sheet1にはオープンマクロが組んで有り必ずA列が表示されるようになっています。(問題ないでしょうか?) 過去にA列が隠れていたためにB列からデータを入力してしまい苦情になったことがあるので再発防止対策です。 その後シートが増えたので別のシートで保存してしまった場合の対策です。

  • エクセル2013 シートのデータ読み込みで

    エクセル2013 あるBookにシートが複数枚あります。 各シートのL1に氏名が入力されていたら、他のセルのデータを氏名とともにシート40にある幾つかのセルに読み込みます。 氏名が入力されていないと、シート40の氏名その他のデータが「0」になってしまいます。 氏名が入力されていない場合は、シート40のセルが「0」ではなく「空白」にしたいのですが 方法を教えてください。

  • エクセルの特定のシートのみを保存するマクロ

    を作成できればと思っています。 このブック内にはたくさんのシートがあります。 毎日データ更新するのですが、そのうち1シートのみ、他の人に送信する必要があるので、たとえば(理想は)編集が済んだ時点で、あるシートに設けたコマンドボタンのようなものをクリックしたときに、その必要な1シートがコピーされて、別のエクセルファイルとして保存されるのが理想です。 マイドキュメント内の、「ファイル」という名前のファイルに保存をしたいと思っています。 今は、必要なシートのシート名をクリックして、コピーを選び、新しいシートを作成して、、、という作業をしています。これを端折ることができないか、と考えております。 なお、このシートを保存するとき、そのシート名は、ある特定のセルの入力値になることが理想です。 というのも、そのマクロが起動するたびに、全く同じ名前で上書き保存されていくのは困りますので、、、 どなたかお詳しい方がいらっしゃいましたらどうぞお願いいたします。

  • エクセルをcsvで保存する

    こんにちは、是非教えて下さい。 エクセル2007を使用しています。 このファイルはcsvテキスト形式で提出しなければならないのですが、 エクセルsheet1にA列に値を入力して エクセルsheet2のA列に並び替えます。 この項目には前スペース右詰と指定があります。 エクセルsheet2に並び替える際にセルA列に =REPT(" ",12-LEN(sheet1!A1))&sheet1!A1 を入れました(A2、A3、、、と続きます) csvに保存して確認(メモ帳)したら、 エクセルsheet1で値を入力してない所には(下の図の「 _ 」)スペースが入ってしまいました!! (エクセル)        A 1 123456 2 (未入力) (メモ帳)                   ,______123456,,(現在) ,____________,,(現在)             ↓ ,______123456,,(現在と同じ) ,,,(理想) 上の(理想)のように詰めたいのですが よい数式を教えて下さい。 初心者なので説明をいれて頂けると少しは理解できそうです。 よろしくお願いしますm(__)m

  • エクセルを閉じる時に保存メッセージを表示させずに保存しないで閉じるには

    いつもお世話になります。初心者ですのでよろしくお願いします。 あるエクセルファイル(定型の表、セルはブランク)で毎回違うデータを入力して印刷しています。 印刷後そのファイルを閉じる際に、ツールバーの右側の×をクリックして閉じますが、データを入力しているのでいつも「'ファイル名xls'への変更を保存しますか?」というメッセージが表示され「いいえ」を選択して閉じています。 このファイルは、データを入力して印刷することが目的なので、×をクリックしたらこのメッセージを表示させないで、データも保存せずにファイルを閉じたいのですが、そのような設定はできるでしょうか? よろしくお願いします。

  • エクセルの関数をおしえて

    こんにちは いつもお世話になっています エクセルの関数について教えてください。 例えば、A列の、あるセルに商品名を入れるとB列の同行セルに、その商品名に対応した特定のデータを入力するにはどうすればいいでしょうか。商品名と、それに対応したデータは別シートにあり、それを呼び出すような形にしたいのです。つまり、A1に「abc」と入力したら、自動的にB1に、「abc」に対応した特定のデータが入力されるようにしたいのです。A列のどこに入力しても、そのセルの横のセルに対応データを表示させたいのです。 関数名だけでもかまいません。よろしくお願いします

  • Excelのフィルタオプションについて

    いつもお世話になります。 Excel2010 Windows7で作業をしています。 1000行、10列程度のデータからフィルタオプションを利用し、条件を2つ設定してデータを抽出しています。 抽出は同一シートで行っています。 抽出自体は問題なく行えるのですが、抽出した行から下のセルが空白になってしまいます。セルが挿入されているような気配はなく、空白のセルで上書きされているような雰囲気です。 抽出したデータをさらに参照して、他のセルに代入する、などの操作もしているので、できれば抽出する行の下にも計算式などを入力したいのですが、これは操作が悪いのでしょうか。それとも仕様なのでしょうか。 参照しているデータには特に空白セルはありません。 条件については唯一のものではなく、同じ値のものが複数存在しますが、2つの条件を設定することで唯一のデータを選択することができます。 抽出したいのは1行です。 よろしくご教授ください。

  • エクセル マクロでシートをデスクトップに保存する

    ファイルにある複数のシートの中から、Bシートだけを抜き出してデスクトップに保存するマクロがわかりません。マクロ記録でコードの確認はできますが、 保存先がC\user\自分のユーザー名¥Desktopとなっているので、他の人に配布して別のパソコンで使用できるものでしょうか。 理想としては、 複数あるシートの中からひとつだけを抜き出して、デスクトップに保存。 抜き出したシートの名前は、指定してあるセルに入力された単語。 抜き出したシートを開いた時に「更新 更新しない」のリンクのメッセージが表示されない。 このようにしたいです。

専門家に質問してみよう