- ベストアンサー
VBA:セルの空白を検索
A列を上から検索して(とりあえず100行まで)最初の空白セルのアドレスを取得したいです。 Dim CellAd As Range Set CellAd = Range("A1:A100").CurrentRegion.Find(What:="ABC") If CellAd Is Nothing Then Exit Sub Else MsgBox CellAd.Address End If 以上のコードで、A列にABCがあればそのアドレスを$A$15のような形で表示できました。 検索したいのは空白なのですが、どのように指定すればよいでしょうか。 What:=""やNullではダメだったので(自分、「Null」を勘違いしてるかもしれません)。 また、ここでは取得したアドレスをmsgboxで表示させているだけですが、 実際は取得したアドレスの行番号のみを取得して変数Add1に入れ、 以降のコードのセル範囲指定として使いたいです。 「1行目からAdd1行目までをコピーする」のように。 私のレベルでは、 ・範囲指定はRange("A1:A100")のように、「""」でくくらなければ使えない ・変数は""の中に入れたら文字列として扱われる との認識があるのですが、 このようなコードは可能でしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
A1 を選択した状態で [Ctrl]+[↓] キーを押すとデータブロックの最終セル、 つまり、そのひとつ下が最初の空白セルとなります。 ご質問の用途なら、マクロの記録を利用することで End(xlDown) を使えば 良いことがわかります。あとは、それを修正。 Dim r As Range Set r = Range("A1", Range("A1").End(xlDown)) MsgBox r.Address > 範囲指定はRange("A1:A100")のように、「""」でくくらなければ使えない そんなことはありません。 Range("A2", Cells(100,"A").Select のように「文字列」で指定することも可能だし、Range オブジェクトを 使って Range を指定することも可能です。
その他の回答 (5)
- KenKen_SP
- ベストアンサー率62% (785/1258)
補足。A列以外にも空白セルがあるならこんな方法も。 Sub Sample() Dim rTable As Range Dim rBlank As Range Set rTable = Range("A1:A100").CurrentRegion On Error Resume Next Set rBlank = rTable.SpecialCells(xlCellTypeBlanks) On Error Goto 0 If Not rBlank Is Nothing Then rBlank.Cells(1, 1).Select ' または rBlank(1).Select Else MsgBox "空白セルはありません" End If Set rTable = Nothing Set rBlank = Nothing End Sub
お礼
回答ありがとうございます。 わざわざ別のソースまで組んでいただいて恐縮です。 まだぱっと見にはわからない部分もありますが、 調べられそうです。
- fly_moon
- ベストアンサー率20% (213/1046)
Set CellAd = Range("A1:A100").CurrentRegion.Find("") じゃダメですか? >・範囲指定はRange("A1:A100")のように、「""」でくくらなければ使えない Range("A1:A100")はRange(cell(1, 1), Cells(1, 100))とも表現できます。 >・変数は""の中に入れたら文字列として扱われる &演算子を使って繋ぐと使えます。 Range("A1:A" & CellAd.Row - 1).Select とすると、空白の1つ前のセルまで選択できます。
お礼
回答ありがとうございます。 少し範囲指定の仕方の幅を広げることができました。 目的のみに向かって突っ走らないで一から勉強すべきですね。
- zap35
- ベストアンサー率44% (1383/3079)
#02、03です。度々スミマセン >#01です。誤植がありました は >#02です。誤植がありました の誤りです
- zap35
- ベストアンサー率44% (1383/3079)
#01です。誤植がありました Range("A1:A" & Add1) が正しいです。
- zap35
- ベストアンサー率44% (1383/3079)
アドレスの取得 MsgBox(Range("A1:A100").SpecialCells(xlCellTypeBlanks).Cells(1, 1).Address) 行番号の取得 MsgBox(Range("A1:A100").SpecialCells(xlCellTypeBlanks).Cells(1, 1).row) 範囲指定 Range("A1:" & Add1) Range(Cells(1,1) , Cells(Add1,1)) などの方法があります
お礼
回答ありがとうございます。 無事解決しました。
お礼
回答ありがとうございます。 「空白を探し出して、その1個上が最終セル」のつもりだったので、 [Ctrl]+[↓] キーの時点で大正解でした! 範囲指定も巧くできました。 意外と融通利きますね、VBA(プログラマから見ると当然かもしれないけど)。