• ベストアンサー

ExcelVBAで数式の空白を返さないようにするに

例えば、A1~A10にある値があり、B1~B10に条件があえば上から順に参照される表があるとします。(もし条件の合う値が3つあれば、B1~B3にA列の値を表示します。あわない場合は("")で空白を返します。) この場合、VBAでB列の空白を省いた最終行を取得したいのですが、 = Range("B1").End(xlDown).Row でやると、空白でも数式が入っていたら返してしまうので困っています。 何か良い方法はないでしょうか。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

井上はるき氏の著書では、誤動作防止のため、Range.End(xlUp)に代えて下記を標準で使用する事を奨めていましたが、楽な方に走ってしまって実行できていません。(自炊してしまった書籍を開くこと無く、書いているので冗長なところ等あるかもしれません。)ご参考まで。 Sub test() Dim myCell As Range With Sheets(1).Columns(2) Set myCell = .Find(What:="*", After:=.Cells(.Rows.Count), LookIn:=xlValues, SearchDirection:=xlPrevious) End With If Not myCell Is Nothing Then Debug.Print myCell.Row End Sub

mzakom
質問者

お礼

私ではまず思いつかない解でした。ありがとうございました。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率66% (1731/2601)
回答No.2

以下の例ではいかがでしょう Sub Example() Dim c As Range Dim BottomRow As Long For Each c In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row) If c.Value <> "" Then BottomRow = c.Row End If Next End Sub

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

Sub Macro1() myRow = Cells(Rows.Count, "B").End(xlUp).Row Do While Cells(myRow, "B").Value = "" myRow = myRow - 1 Loop ' End Sub のようにしてみてはどうでしょうか。 もっといい方法があるかもしれませんが。

関連するQ&A

専門家に質問してみよう