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

エクセルで、A列に文字入力した場合、同じ行の
B・C・D列に1つでも空欄があると、
保存できなくする設定を教えていただけますか?
例えば次のような場合です。
例1:A2に文字入力し、B・Cは入力しているがDが空欄のまま。
例2:A5に文字入力し、Bは入力しているがC・Dが空欄のまま。
※A列が空欄の場合は、B・C・Dは空欄でOKです。

質問者からの補足コメント

  • 早速ありがとうございます。
    私の説明不足でした。申し訳ございません。
    画像のようなファイルになっており、
    複数の相手が10行目以下の白いセルに入力していく形です。
    相手が何行目まで入力するかは相手によります。
    この状態で、相手がA列に入力しているのに
    BCDEに1つでも未入力セルがある場合、
    エラーメッセージ(できれば)とともに
    保存できないようにしたいのですが、
    可能でしょうか?
    なお、お礼は月曜日以降になってしまいます。
    併せてお詫び申し上げます。

    「エクセルで未入力の際、エラーメッセージを」の補足画像1
      補足日時:2015/01/30 18:00
  • お二方、ありがとうございます。

    たびたび申し訳ございませんが、
    CとDがリストから選択するセル、
    BとEは直接入力するセルです。
    宜しくお願い致します。

      補足日時:2015/02/02 12:00

A 回答 (4件)

No.1・2です。



補足の
>複数の相手が10行目以下の白いセルに入力していく形です。
>BCDEに1つでも未入力セルがある場合

を見逃していました。

前回のコードはすべて消去し、↓のコードに変更してみてください。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 'この行から
Dim i As Long, c As Range
With Worksheets("Sheet1")
For i = 10 To .Cells(Rows.Count, "A").End(xlUp).Row '★
If .Cells(i, "A") <> "" Then
Set c = Cells(i, "A").Resize(, 5).Find(what:="", LookIn:=xlValues, lookat:=xlWhole) '★
If Not c Is Nothing Then
MsgBox "未入力セルがあります。"
c.Select
Exit For
Cancel = True
End If
End If
Next i
End With
End Sub 'この行まで

※ 「★」の行を少し変えています。
こんなんではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

素晴らしい!
完成しました!ありがとうございました!

お礼日時:2015/02/03 09:32

こんにちは。



少し口を挟ませていただきますが、画像をみて、最初のご質問と合わせると混乱しますね。

>相手がA列に入力しているのにBCDEに1つでも未入力セルがある場合、
画層からすると、
A列に対して右側のセルが結合状態であるなら、B列以降の結合されているセルまで、基本的には、その結合部分のデータは左端でしか認識されません。

なお、データのあるなしの判定は、
=COUNTA(A:A)
=COUNTA(B:D)

全体でなければ、一定の範囲で、ワークシート関数を書き換えて、マクロコードに埋め込めばよいです。

なお、見えない数式が埋め込まれている場合、
 =COUNTIF(A:A,"=*")
で検出が可能です。つまり、数式は数に入れないようにも可能です。
  =COUNTA(A:A) - COUNTIF(A:A,"=*")
ということです。

'//ThisWorkbook モジュールに貼り付ける
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI = True Then
    MsgBox "これブックは上書き保存のみです。", vbExclamation
    Cancel = True
    Exit Sub
  End If
  With Worksheets("Sheet1") '←シート名
  If WorksheetFunction.CountA(.Range("A:A")) > 0 Then '←ここを調整
   If WorksheetFunction.CountA(.Range("B:D")) = 0 Then '←ここを調整
     MsgBox "B列からD列が、空白のままで、保存が出来ません。", vbCritical
     Cancel = True
   End If
  End If
  End With
End Sub
'//
    • good
    • 0
この回答へのお礼

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

お礼日時:2015/02/03 09:33

No.1です。



画像を拝見すると8・9行目が結合されているようですが、
それは考えないで・・・

前回のコードの
>For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row

>For i = 8 To .Cells(Rows.Count, "A").End(xlUp).Row
に変更してみてください。

おそらく前回同様の動きになると思います。m(_ _)m
    • good
    • 0

こんにちは!



>保存できなくする設定を教えていただけますか?
「上書き保存」ができないようにしてみました。

VBAになりますが、一例です。
Alt+F11キー → 画面左下の「ThisWorkbook」をダブルクリック → カーソルが点滅しているところに
↓のコードをコピー&ペーストしてください。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 'この行から
Dim i As Long, c As Range
With Worksheets("Sheet1")
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
If .Cells(i, "A") <> "" Then
Set c = Cells(i, "A").Resize(, 4).Find(what:="", LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
MsgBox "未入力セルがあります。"
c.Select
Exit For
Cancel = True
End If
End If
Next i
End With
End Sub 'この行まで

このファイルを一旦
ファイルの種類は「マクロ有効BOOK」として名前を付けて保存します。

次にファイルを立ち上げたとき、B~D列に空白セルがあると
何らかのデータを入力しない限り「上書き保存」ができなくなります。

※ メッセージボックスは表示されますが、
ファイルを閉じることはできます。m(_ _)m
    • good
    • 0

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