• ベストアンサー

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")のように、「""」でくくらなければ使えない ・変数は""の中に入れたら文字列として扱われる との認識があるのですが、 このようなコードは可能でしょうか。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

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 を指定することも可能です。

rem_1982
質問者

お礼

回答ありがとうございます。 「空白を探し出して、その1個上が最終セル」のつもりだったので、 [Ctrl]+[↓] キーの時点で大正解でした! 範囲指定も巧くできました。 意外と融通利きますね、VBA(プログラマから見ると当然かもしれないけど)。

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

補足。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

rem_1982
質問者

お礼

回答ありがとうございます。 わざわざ別のソースまで組んでいただいて恐縮です。 まだぱっと見にはわからない部分もありますが、 調べられそうです。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.5

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つ前のセルまで選択できます。

rem_1982
質問者

お礼

回答ありがとうございます。 少し範囲指定の仕方の幅を広げることができました。 目的のみに向かって突っ走らないで一から勉強すべきですね。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#02、03です。度々スミマセン >#01です。誤植がありました は >#02です。誤植がありました の誤りです

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。誤植がありました  Range("A1:A" & Add1) が正しいです。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

アドレスの取得 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)) などの方法があります

rem_1982
質問者

お礼

回答ありがとうございます。 無事解決しました。

関連するQ&A

専門家に質問してみよう