[[20160520090253]] 『空白チェック』(ちな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空白チェック』(ちな)

初心者につき、教えてください。

可変する列行の表内で空白チェックをし、
そのセル位置をメッセージで表示させたいのですが、
うまくコードが組めず、悩んでおります。

表構成は、
F列〜(最大AK列まで)
8行目〜
です。

ご指導ください。

=↓自分で組んだものです↓=

※F〜AK列・8行目以降を「inputFLD」として名前設定しています。

Dim errFlg As Boolean
Dim Msg1 As String
Dim Msg2 As String
Dim ToCol As Long
Dim ToRow As Long

Dim x As Long
Dim y As Long
y = 6

With .Range("inputFLD")

ToRow = .Cells(.Rows.Count, 1).End(xlUp).Row - .Rows(1).Row + 8
ToCol = .Cells(1, .Columns.Count).End(xlToLeft).Column - .Columns(1).Column + 1

 For x = 8 To ToRow
  Do While y <= ToCol
   If IsEmpty(.Cells(x, y)) Then
    Msg1 = x
    Msg2 = y - 1
    errFlg = True
 Exit For
   End If
    y = y + 1
  Loop
 Next x

End With

 If errFlg Then
  errMsg = "・数量:" & Msg1 & "行目" & Msg2 & "列目"
   GoTo EXIT_NG
 End If

→名前設定にも関わらず
 位置情報がうまく取得されず、
 「x=」や「y=」と開始位置を結局指定しているのも気になっています。

また、セル位置のメッセージ表記も「●行目○列目」としていますが
ユーザーとしたら「B●」「G●」という表記の方がわかりやすいとも思います。
(これは必須条件ではないので、簡単な表示設定で教えて頂ければ幸いです。)

どこを直すとうまく動作するのか教えていただけますと とても助かります。
よろしくお願い致します。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


With .Range("inputFLD") としているのに、そこから更にx=8分ずれた位置を見ているのが原因でしょう。
以下は変更案です。

 Sub test()
    Dim errMsg As String
    Dim R As Range

    For Each R In Range("inputFLD")
        If IsEmpty(R) Then
            errMsg = "・数量:" & Replace(R.Address, "$", "") & "セル"
            Exit For
        End If
    Next R

    MsgBox errMsg
 End Sub
(???) 2016/05/20(金) 09:58

あ、Gotoは、もしかして空欄セルにカーソルを移動させたい、とか?

 Sub test2()
    Dim errMsg As String
    Dim R As Range

    For Each R In Range("inputFLD")
        If IsEmpty(R) Then
            errMsg = "・数量:" & Replace(R.Address, "$", "") & "セル"
            Exit For
        End If
    Next R

    If errMsg = "" Then
        MsgBox "ok"
    Else
        MsgBox errMsg
        Range(R.Address).Select
    End If
 End Sub
(???) 2016/05/20(金) 10:04

更に深読みすると、空欄が複数あった場合、1つチェックしては終わってしまうので、まとめて表示するほうが使いやすかったりしませんか?

 Sub test3()
    Dim errMsg As String
    Dim R As Range

    For Each R In Range("inputFLD")
        If IsEmpty(R) Then
            If errMsg = "" Then
                errMsg = "・数量:"
            Else
                errMsg = errMsg & ", "
            End If
            errMsg = errMsg & Replace(R.Address, "$", "")
        End If
    Next R

    If errMsg = "" Then
        MsgBox "ok"
    Else
        MsgBox errMsg
    End If
 End Sub
(???) 2016/05/20(金) 10:10

ご教示ありがとうございます。

最初に記載いただいたコードで組んでみたところ、
「inputFLD」で設定している範囲の最終列・行が最終とは限らないため
これだと使用しないセルでもエラーメッセージが出てしまいます。

6列目に「UNITFLD」という名前設定した必須項目の範囲セルを設けており、
そこから最終列判定ができるとは思うのですが・・・
どうでしょうか?

ちなみに、
複数の空白がある場合のメッセージ表示は
都度でもまとめてでも大丈夫です。
※実は、他項目でも入力(空白)チェックをまわしていて
 ここでまとめたところで他のチェックでは別でメッセージが出ることになるので。

せっかくご親切に何度もご提示いただいたのに
説明不足と知識不足で申し訳ありませんが、
引き続きよろしくお願い致します。
(ちな) 2016/05/20(金) 11:04


範囲名が実際の末尾とは無関係であり、6列目が必須なのであれば、以下でどうでしょうか?

    For Each R In Range("F8:AK" & Cells(Rows.Count, "F").End(xlUp).Row)
(???) 2016/05/20(金) 13:01

返信遅くなりましたが、ありがとうございます。
参考になりました。
なんとかなりそうです。
(ちな) 2016/05/20(金) 18:16

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.