- ベストアンサー
エクセルでセルに入力しないと保存出来ない方法ありますか?
エクセルであるセルにデータ(数字や文字)を入力しないと、そのファイルが保存出来ない様な設定が出来るものでしょうか? 相手にデータの入力をお願いして、全ての項目を入力完了しないとそのファイルが保存出来ないという設定にしたいのですが、そういう設定方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBAでやるしかないようですね。 Alt+F11キーを押してください。 VisualBasicEditorが立ち上がります。 左のVBAProjectをクリック ThisWorkbookをクリック 右の広い白いところに以下をコピー&ペースト Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Sheets("Sheet1").Range("A1") = "" Or Sheets("Sheet1").Range("B1") = "" Then MsgBox "AIセルに入力してください。" Cancel = True End If End Sub これでSheet1のA1とB1に入力がないと保存できなくなりました。
その他の回答 (2)
- hakobulu
- ベストアンサー率46% (1655/3578)
もっと簡単な方法があるかもしれませんが、次のようにしておくと、入力すべき箇所を空白にしたままファイルを閉じようとすると、メッセージが表示され、しかも、その空欄の箇所がアクティブになりますから、入力者の方もわかりやすいかもしれませんね。気が向いたら試してみてください。 <準備> データ入力するのはSheet2(データ入力)という名前のシートで、セル番地は A1:B3,D2,C5 の3ブロックと仮定しておきます。どこでもいいのですが(ここでは仮にe1としておきます)次の式を記述しておいてください。 =COUNTA(A1:B3,D2,C5) 1、visual basic画面のVBAProjectで「ThisWorkbook」を右クリックしてコードを表示させて下さい。 2、上の方に細長い窓が2つあると思いますが、 左の方で「Wokbook」 右の方で「BeforeClose」を選択して下さい。 3、次のようになるように記述してみてください(コピペ可能)。 但し下のコードはデータ入力箇所が、「データ入力」という名前のシートの「A1:B3,d2,c5」の3ブロックにあると仮定してますから、その部分は書き換える必要があります。計算式が入っているセルもSheet2.Range("e1") というのは、あくまで仮定ですから変更してください。がんばってください。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheet2.Range("e1") <> 8 Then With ActiveWorkbook.Worksheets("データ入力").Range("A1:B3,d2,c5") Set c = .Find("", LookIn:=xlValues) If Not c Is Nothing Then ' firstaddress = c.Address c.Activate MsgBox "この欄が未入力です" End If Cancel = True End With End If End Sub
- hiro823
- ベストアンサー率25% (74/285)
おはようございます。 > 全ての項目を入力完了しないとそのファイルが保存出来ないという設定 入力する項目(のセル)は決まってる、のかな? 決まってないのかな? 決まっている、と仮定して、と。 if関数を使うのはどうでしょうか? 例えば... =IF((LEN(A1)>=1),"OK","NG") =もし、A1セルに入っている左辺が右辺以上の場合は"OK"、より下の場合は"NG" とか。 他はVBA。上記のif関数よりもう少し詳細を書くようなカンジになるかと。 それでは。
補足
早速のご回答ありがとうございます。 入力する項目は決まっております。 早速教えて頂いた内容で試してみました。 しかしながら、関数を入れたセルがブランクになって いても”NG”のサインはでるのですがNGのままでデータが保存できてしまいます。 これを一切保存出来ない様には設定できないものなのでしょうか? 他のやり方としてVBAというものがあるみたいですが、初心者にも簡単にできる内容でしたらお教え願います。
お礼
大変わかり易い説明で、助かりました。 ありがとうございます。