エクセル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の値で判別しようかと思ったのですがうまく
いきません。何が間違っているのでしょうか?
また、より効率的な方法があったら教えていただき
たいです。お願いします。
No.5ベストアンサー
- 回答日時:
すみませんさっきの回答って意味不明でした。
すみません(汗)責任とってコード書きます。(って処理多すぎ… )
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が無い…らしい)
回答ありがとうございます。
今回は、A列、B列、C列それぞれの列で一番下の行番号を
出し、一番大きい番号を導く、という方法をとりました。
紹介していただいた方法はかなり私には難解なんですが、
また試してみたいと思います。
No.4
- 回答日時:
「範囲内の空白セル(空白文字が表示されているセルも含む)の数を返す」
という機能を持つ、
エクセルが用意している関数”countblank”を利用しましょう。
dim a%
a = Application.WorksheetFunction.CountBlank(Range("A2:C65536"))
とします。
これでaが1以上ならデータが入ってるって事で、0なら無いって事ですね。
あとは条件分岐で処理するだけですね。
あとc65536は変数にすれば変更できますよね?
ちなみに空白セルやデータの入っているセル番地を取得するには
別の方法でないといけませんが。
No.3
- 回答日時:
こんにちは。
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列の下の方に関係ないデータが入っていたらダメですけどね。
では。
回答ありがとうございます。
今回は一つの列だけデータが入っていたり、
離れたデータも見つけるプログラムを作りたかったので、
A列、B列、C列それぞれの列で一番下の行番号を出し、
一番大きい番号を導く、という方法をとりました。
またよろしくお願いします。
No.1
- 回答日時:
毎回、シートが綺麗に初期化されていることが前提です。
'セルA3を選択する
Range("A3").Select
'使用されている(された)最後のセルまで選択する
Line = Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Rows.Count+2
ではいかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
別のセルに値が入力されたら、...
-
Excel上でのデータ数字が連番で...
-
スペースとスペースの間の文字...
-
エクセルで曜日に応じた文字を...
-
エクセルで小数を含む数値の抽出
-
エクセル:横長の表を改行して...
-
入退社日より各月末の在籍者数...
-
列の数字に100をかけたい
-
【Excel】での計算式教え...
-
エクセルで1列全部10倍したい
-
【エクセル】同じ文字を文頭に...
-
【EXCEL】指定したセルの値を他...
-
「エクセル」特定の行(セル)...
-
エクセルのsumifでかけ算してか...
-
エクセルで表示されている数字...
-
HYPERLINKとADDRESSとMATCHの組...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数の文字列のいずれかが含ま...
-
Excelの入力規則で2列表示したい
-
SUMに含まれる範囲から特定のセ...
-
数式が入ったセルを含めて、数...
-
Excel上でのデータ数字が連番で...
-
スペースとスペースの間の文字...
-
エクセル:横長の表を改行して...
-
エクセルでセルの値分の個数の...
-
列の数字に100をかけたい
-
エクセルで表示されている数字...
-
VBA 同一シート内での転記の仕方
-
別のセルに値が入力されたら、...
-
エクセルのsumifでかけ算してか...
-
エクセルで曜日に応じた文字を...
-
Excelのセル内文字の並び替えに...
-
入退社日より各月末の在籍者数...
-
HYPERLINKとADDRESSとMATCHの組...
-
エクセルで小数を含む数値の抽出
-
Excel 漢字二文字の先頭と最後 ...
-
エクセルにデータを入力すると...
おすすめ情報