- 締切済み
VBAについて
VBAで最終行を取得する際に、""などを無視するようにしたいのですが、どうすればよいのでしょうか? 最終行は以下のように取得しています。 GYOMAX_T = SH.Cells(65536, cnt).End(xlUp).Row すみませんが、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
#3 ご指摘の「なぜ必要なのか」は私も知りたいところですが、 とりあえず、Find メソッドを利用するとか。 Sub Sample() Dim cnt As Long Dim lRowNum As Long Dim rSearch As Range ' // 調べる列番号 cnt = 1 ' // 調べるセルの範囲を参照 Set rSearch = Worksheets("Sheet1").Columns(cnt) ' // このとき SearchDirection:=xlPrevious にするのがコツ ' // ただし、rSearch の範囲に""以外の値がひとつないとエラーに ' // なるのでトラップしておくべし On Error Resume Next lRowNum = rSearch.Find(What:="*", _ LookIn:=xlValues, _ SearchDirection:=xlPrevious, _ SearchOrder:=xlByRows).Row On Error GoTo 0 If lRowNum = 0 Then MsgBox "値なしみたい" Else MsgBox CStr(lRowNum) & " 行と思われ" End If End Sub
- hana-hana3
- ベストアンサー率31% (4940/15541)
>この場合どうしたらよいのでしょうか? エクセルの仕様(式が入っていれば空欄ではない)なので、回避することはできません。 通常は範囲の下端を求めるために利用するのですが、お考えの動作がなぜ必要なのかが解らないと望むような回答は得られないと思いますよ。 範囲内から空欄のセルを探したいなら、別の方法で行う必要があります。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 除外するものを指定しても、肝心な、何を探すか書かれていませんね。 VBAでは、こういうのは、かなり困るものです。ループでという手もあるのですが、この場合は、セル総なめになってしまい、かなりのローテク・スタイルになってしまいます。こういう場合は、仕方がないので、ワークシート関数に頼らざるを得なくなります。MATCH関数でも可能ですが、あえて、配列数式を使ってみました。Test1 2番目は、ジャンプ機能です。 ------------------------------------------------------------ Sub Test1() Dim cnt As Variant Dim GYOMAX_T As Variant Dim Sh As Worksheet Set Sh = Worksheets("Sheet1") cnt = 1 '列 With Sh GYOMAX_T = Evaluate("MAX((R1C" & cnt & ":R65534C" & cnt & "<>"""")*ROW(R1C1:R65534C1))") End With MsgBox GYOMAX_T Set Sh = Nothing End Sub ------------------------------------------------------------- Sub Test2() Dim cnt As Variant Dim GYOMAX_T As Variant Dim Sh As Worksheet Set Sh = Worksheets("Sheet1") cnt = 1 '列 With Sh On Error Resume Next '数式の数値を探す With .Columns(cnt).SpecialCells(xlCellTypeFormulas, xlNumbers) GYOMAX_T = .Cells(.Count).Row End With On Error GoTo 0 End With If GYOMAX_T > 0 Then MsgBox GYOMAX_T End If Set Sh = Nothing End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
>、""などを無視するようにしたいのですが (1)""はその列の空白行ですよね。 (2)、""など、の「など」はどんなものですか。 (1)は、最終行を取得するとき問題にならないと思いますが。 質問は、意外な質問です。 無視するのは 値がスペースのセルですか。 それとも文字列の""ですか。 ーー Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d End Sub 私はこうしてますが。
お礼
回答ありがとうございます。 また、分かりづらくてすみません。 >(1)""はその列の空白行ですよね。 >(2)、""など、の「など」はどんなものですか。 (1)はそうです。空白行を無視したいのです。 通常であればexcelは無視してくれますが、 =IF(A1="XX","",A1) のようにセルに式を記述した場合、A1=XXであれば空白行を無視してくれません。 この場合どうしたらよいのでしょうか? (2)のなどは他の式を入れたときです。 よろしくお願いします。