質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

表の最終行が未入力の場合

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,004

score 15

下記画像のようにSheet1にIDと名前が入っている場合、下記のようにコードを書き未入力のセルアドレスをメッセージボックスに表示しているのですが、ID列の一番下のA8が未入力の場合もメッセージボックスに$A8$と表示したいのですが、表の最終行の未入力チェックはどうしたらできるのでしょうか?

イメージ説明

Sub 未入力テスト()
    Dim N As Long
    Dim I As Long
    Dim L As Long
    Dim L2 As Long
    Dim V As String
    Dim V2 As String

    L = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row  
    L2 = Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row  

     For N = 2 To L
        V = Worksheets("Sheet1").Cells(N, 1).Value
        If V = "" Then
            MsgBox Worksheets("Sheet1").Cells(L, 1).Address        
        End If
    Next N

     For I = 2 To L2
        V2 = Worksheets("Sheet1").Cells(I, 2).Value
            If V2 = "" Then
                MsgBox Worksheets("Sheet1").Cells(Rows.Cout, 2).Address 
            End If
     Next I
End Sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

まずはやりたいこと(仕様)を明確にしましょう。

A1を起点とする表範囲(データのある矩形範囲)内で未入力のセルのアドレスを出力する。

ということでしょうか。

だとしたら表範囲は CurrentRegion で取得できますので、下記のようなコードでOKですね。

Sub 未入力テスト1()
    Dim c As Range
    For Each c In Worksheets("Sheet1").Cells(1,1).CurrentRegion
        If c.Value = "" Then MsgBox c.Address
    Next
End Sub

列毎に処理したいなら、

Sub 未入力テスト2()
    Dim col As Range
    Dim c As Range

    For Each col In Worksheets("Sheet1").Range("A1").CurrentRegion.Columns
        For Each c In col.Cells
            If c.Value = "" Then MsgBox c.Address
        Next
    Next
End Sub

追記

質問内容が曖昧なので、いろいろな解釈の回答がついてしまう。

質問文の「表の最終行の未入力チェックはどうしたらできるのでしょうか?」ということがしたいことなのか(最終行のみのチェック)?
提示のコードでは、For 文で2行目から最終行までチェックしている。

本当はどちらがしたいことですか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/03 14:18

    回答ありがとうございます。
    A1を起点とする表範囲(データのある矩形範囲)内で未入力のセルのアドレスを出力したかったので回答の通りCurrentRegionを使ってやりたいことができました。質問が下手ですいません。ありがとうございました。

    キャンセル

0

少し修正しました。やりたいことに近づいたでしょうか。

Sub 未入力テスト2()
'    Dim N As Long
    Dim I As Long
'    Dim L As Long
    Dim L2 As Long
    Dim V As String
    Dim V2 As String
'    L = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    L2 = Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
'     For N = 2 To L
'        V = Worksheets("Sheet1").Cells(N, 1).Value
'        If V = "" Then
'            MsgBox Worksheets("Sheet1").Cells(L, 1).Address
'        End If
'    Next N
     For I = 2 To L2
        V = Worksheets("Sheet1").Cells(I, 1).Value
        V2 = Worksheets("Sheet1").Cells(I, 2).Value
            If V = "" And V2 <> "" Then
                MsgBox Worksheets("Sheet1").Cells(I, 1).Address
            End If
     Next I
End Sub

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

下記のように、LとL2が同じ値でないときの処理をすれば良いでしょう。

IF L < L2 Then
  MsgBox Worksheets("Sheet1").Cells(1,L).Address
Else If L > L2 Then
  MsgBox Worksheets("Sheet1").Cells(2,L2).Address

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る