OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBAでセルが空白かどうかを調べたい(Excel)

  • 困ってます
  • 質問No.145482
  • 閲覧数1586
  • ありがとう数6
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 69% (145/210)

エクセル2000関連でVBAを勉強し始めました。

A1~C3まで列の名前が入っていて、
A2~C2列以下(データを入れるのはA3~C3,
A4~C4・・で、どの行までデータが入っているかは
分からない状態)が空白か
どうかを調べたい時にはどう書けばよろしいのでしょうか?

・A65536~C65536まで選択し
・上向きにデータが存在するかどうかを調べていって
・最終的にActiveになっている行番号が1であれば
A2~C65536までは空白。
1じゃなければ、データがどこかに存在する。

という方法で調べようかと思ったのですが、

Dim Line As Integer
Range("A65536:C65536").Select
Range(Selection, Selection.End(xlUp)).Select
 Line = Selection.Row

でLineの値で判別しようかと思ったのですがうまく
いきません。何が間違っているのでしょうか?

また、より効率的な方法があったら教えていただき
たいです。お願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル6

ベストアンサー率 30% (3/10)

すみませんさっきの回答って意味不明でした。すみません(汗)
責任とってコード書きます。(って処理多すぎ… )

Sub macro1()'← 一例です。
Dim a$ , a1$ , b$ , b1$ , c$ , c1$ , ln%
Dim chk As Boolean
chk = True
ln% = 65537
Do While chk = True
ln% = ln% - 1
If ln% = 0 Then Exit Do
a1$ = "a" & Trim$(str$(ln%))
b1$ = "b" & Trim$(str$(ln%))
C1$ = "c" & Trim$(str$(ln%))
a$ = Range(a1$).Value
b$ = Range(a2$).Value
C$ = Range(a3$).Value
chk = LenMbcs(a$) = 0 And LenMbcs(b$) = 0 And LenMbcs(C$) = 0
Loop
MsgBox = (ln% & "行目までデータが入力されています。")

End Sub

Function LenMbcs(ByVal str As String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

として下さい。
下からA列、B列、C列のいずれにもデータが入力されていなければ、
(いずれもバイト数が0であれば)
一つ上の行を調べ、それでも入力されていなければ… 

…を繰り返し、いずれかの列に文字が入力されている行を見つけると、
その行番号をメッセージボックスで伝えてくれます。

これでいける……はず。なんせ初心者なもんで。(汗)
不足があれば応用して下さい。

注意:空白文字(" "や" ")が入力されているセルも「入力されているセル」と判断します。
   一部、VBのヘルプから引用しています。(LenMbcsの所)
   Macでは不都合を起こします。(Unicodeが無い…らしい)
お礼コメント
fuyu

お礼率 69% (145/210)

回答ありがとうございます。

今回は、A列、B列、C列それぞれの列で一番下の行番号を
出し、一番大きい番号を導く、という方法をとりました。

紹介していただいた方法はかなり私には難解なんですが、
また試してみたいと思います。
投稿日時 - 2001-10-04 22:15:44
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 33% (1403/4213)

毎回、シートが綺麗に初期化されていることが前提です。 'セルA3を選択する Range("A3").Select '使用されている(された)最後のセルまで選択する Line = Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Rows.Count+2 ではいかがでしょうか?
毎回、シートが綺麗に初期化されていることが前提です。

'セルA3を選択する
Range("A3").Select

'使用されている(された)最後のセルまで選択する
Line = Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Rows.Count+2

ではいかがでしょうか?
  • 回答No.2
レベル14

ベストアンサー率 33% (1403/4213)

すみません。一部訂正です。 最初にセルA1を選択してください。 Lineの取得時の+2は削除してください。 Lineに使用されているセルの行が返るので「3」以下ならデータ行無しの判断です。 あと一点、LineはLongで宣言してください。 ...続きを読む
すみません。一部訂正です。

最初にセルA1を選択してください。
Lineの取得時の+2は削除してください。

Lineに使用されているセルの行が返るので「3」以下ならデータ行無しの判断です。

あと一点、LineはLongで宣言してください。
補足コメント
fuyu

お礼率 69% (145/210)

回答ありがとうございます。

D列以降にA~C列以上にデータが入っている場合が
あるので、ActiveCellが使えない状況です。

何か他の方法はないでしょうか?
投稿日時 - 2001-10-04 02:46:56
  • 回答No.3
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。maruru01です。 A~C列は常に同じ行にデータが入っているとしていいですか? そうするとたとえばA列だけ見ればいいと思います。 したがって、 Dim Line As Long Range("A65536").End(xlUp).Select 'Excel2000以外のバージョンでは、総行数が違うことがあるので、 'Cell ...続きを読む
こんにちは。maruru01です。
A~C列は常に同じ行にデータが入っているとしていいですか?
そうするとたとえばA列だけ見ればいいと思います。
したがって、


Dim Line As Long

Range("A65536").End(xlUp).Select
'Excel2000以外のバージョンでは、総行数が違うことがあるので、
'Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Select
Line = Selection.Row
If Line > 1 then
  MsgBox("データ有り")
Else
  MsgBox("データ無し")
End If


これでは出来ませんか。
もちろん、A~C列の下の方に関係ないデータが入っていたらダメですけどね。
では。
お礼コメント
fuyu

お礼率 69% (145/210)

回答ありがとうございます。

今回は一つの列だけデータが入っていたり、
離れたデータも見つけるプログラムを作りたかったので、
A列、B列、C列それぞれの列で一番下の行番号を出し、
一番大きい番号を導く、という方法をとりました。
またよろしくお願いします。
投稿日時 - 2001-10-04 22:13:26
  • 回答No.4
レベル6

ベストアンサー率 30% (3/10)

「範囲内の空白セル(空白文字が表示されているセルも含む)の数を返す」 という機能を持つ、 エクセルが用意している関数”countblank”を利用しましょう。 dim a% a = Application.WorksheetFunction.CountBlank(Range("A2:C65536")) とします。 これでaが1以上ならデータが入ってるって事で、0なら ...続きを読む
「範囲内の空白セル(空白文字が表示されているセルも含む)の数を返す」
という機能を持つ、
エクセルが用意している関数”countblank”を利用しましょう。

dim a%
a = Application.WorksheetFunction.CountBlank(Range("A2:C65536"))

とします。
これでaが1以上ならデータが入ってるって事で、0なら無いって事ですね。
あとは条件分岐で処理するだけですね。

あとc65536は変数にすれば変更できますよね?
ちなみに空白セルやデータの入っているセル番地を取得するには
別の方法でないといけませんが。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ