プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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 を指定することも可能です。
    • good
    • 3
この回答へのお礼

回答ありがとうございます。
「空白を探し出して、その1個上が最終セル」のつもりだったので、
[Ctrl]+[↓] キーの時点で大正解でした!

範囲指定も巧くできました。
意外と融通利きますね、VBA(プログラマから見ると当然かもしれないけど)。

お礼日時:2007/04/11 18:09

補足。

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/11 18:17

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つ前のセルまで選択できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/11 18:15

#02、03です。

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

>#02です。誤植がありました
の誤りです
    • good
    • 0

#01です。

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

アドレスの取得


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))
などの方法があります
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/11 18:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A