プロが教える店舗&オフィスのセキュリティ対策術

会社でエクセル2003を使っています。

縦にデータを入力する表を作りました。
(1)氏名 (2)〒 (3)住所 (4)電話番号 (5)生年月日 (6)性別・・・など20項目を入力します。

入力完了後、別シートにデータを転記してそちらの別シートを印刷するというマクロを作りました。

例えば、その中で入力を絶対してほしい項目がありまして、それを忘れていたらメッセージボックスで「○○が未入力です」とお知らせしたいと思ってます。

いろんなサイトで調べてみたのですが…うまくいかなくて…

例文に従って作ってみたのが
Sub 円楕円4_Click()

Dim Lesson16 As Range

Dim 会員名簿 As Worksheet
If 会員名簿.Range("A8") = "" Then
MsgBox "氏名が記入されていません。"
会員名簿.Range("A8").Select
Exit Sub
ElseIf 会員名簿.Range("A9") = "" Then
MsgBox "住所が記入されていません。"
会員名簿.Range("A9").Select
Exit Sub
ElseIf 会員名簿.Range("A10") = "" Then
MsgBox "年齢が記入されていません。 "
会員名簿.Range("A10").Select
Exit Sub
ElseIf 会員名簿.Range("A15") = "" Then
MsgBox "生年月日が記入されていません。"
会員名簿.Range("A15").Select
Exit Sub



ThisWorkbook.SaveAs Lesson16

End Sub     です。

家で作ったサンプルなので、セル番号もちょっと???なのですがお許しください。

入力するデータの全てが必須入力項目ではなくて、20項目のうち7項目が必須項目と考えています。
この項目が未入力であれば「未入力ですよ」とお知らせしたいのです。

また、上の例文のセル番号は単独ですが、会社のファイルのセルは結合しています。
(たとえばA8:C8、A15:G15)と行によって結合範囲も違います。

ど素人の質問で、わかりにくいとは思いますが
なにとぞ、アドバイスいただきますようよろしくお願いします。

A 回答 (1件)

具体的なフォーマット(様式)が指定されていないので想定ですが。


最下のVBAコードと入れ替えてください。


■設定及び使用方法
(1)コード内の以下の『'◆チェック対象の設定』箇所を変更してください。
 (添付画像の設定ですと以下のようになります。項目は増やせます)

 'チェック対象とする範囲を設定
  Set myRng = Range("B2:B15")

 'チェック行半角カンマ「,」で区切って対象の行番号を設定
  myRow = Split("8,9,10,15", ",")

 '項目名を半角カンマ「,」で区切って上記チェック行に対応する順番で設定
  myTit = Split("氏名,住所,年齢,生年月日", ",")


(2)「入力チェック」マクロを実行してください。
 チェック対象のセルに未入力があれば、結果がダイアログで表示されます。


■VBAコード

Sub 入力チェック()
'◇型宣言
Dim myRng As Range
Dim myTit As Variant, myRow As Variant
Dim i As Long, cnt As Integer
Dim msg As String
Dim myTar As Range

'◆チェック対象の設定
'チェック範囲
Set myRng = Range("B2:B15")
'チェック行
myRow = Split("8,9,10,15", ",")
'項目名
myTit = Split("氏名,住所,年齢,生年月日", ",")


'◇チェック処理
'行ループ
For i = 1 To myRng.Count
  'チェック項目ループ
  For j = 0 To UBound(myRow)
    'チェック対象且つ、未入力時処理
    If myRng(i).Row = CInt(myRow(j)) And Len(myRng(i).Text) = 0 Then
      If myTar Is Nothing Then
        Set myTar = myRng(i)
      Else
        msg = msg & vbCrLf
        Set myTar = Union(myTar, myRng(i))
      End If
      msg = msg & "・" & myTit(j)
      cnt = cnt + 1
    End If
  Next j
Next i

'◇結果表示
If Not myTar Is Nothing Then
  myTar.Select
  MsgBox "以下の項目が記入されていません。" & vbCrLf & msg, vbOKOnly, "入力必須項目が未記入です"
End If
End Sub
「エクセル2003 特定のセルがブランクの」の回答画像1

この回答への補足

ありがとうございます。コピーして貼り付けてみたのですが…
「変数が定義さていません」と「Sub 入力チェック()」の部分が黄色になります。

今は、家のパソコンで「eden3616さま」と同じ表を作って試してみました。
私が何かやらかしているのでしょうか?

すいません。
よろしくお願いいたします。

補足日時:2014/07/15 23:31
    • good
    • 0
この回答へのお礼

ありがとうございます。
補足を投稿後、あーでもないこーでもない…としてみました。

「変数の強制を宣言する」のチェックを外して、Option Explicitを削除しましたところできました!!!

ありがとうございます。
早速明日、頑張ってみます。

お礼日時:2014/07/15 23:41

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