• 締切済み

VBAについて

VBAで最終行を取得する際に、""などを無視するようにしたいのですが、どうすればよいのでしょうか? 最終行は以下のように取得しています。 GYOMAX_T = SH.Cells(65536, cnt).End(xlUp).Row すみませんが、よろしくお願いいたします。

みんなの回答

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

#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)
回答No.3

>この場合どうしたらよいのでしょうか? エクセルの仕様(式が入っていれば空欄ではない)なので、回避することはできません。 通常は範囲の下端を求めるために利用するのですが、お考えの動作がなぜ必要なのかが解らないと望むような回答は得られないと思いますよ。 範囲内から空欄のセルを探したいなら、別の方法で行う必要があります。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 除外するものを指定しても、肝心な、何を探すか書かれていませんね。 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)
回答No.1

>、""などを無視するようにしたいのですが (1)""はその列の空白行ですよね。 (2)、""など、の「など」はどんなものですか。 (1)は、最終行を取得するとき問題にならないと思いますが。 質問は、意外な質問です。 無視するのは 値がスペースのセルですか。 それとも文字列の""ですか。 ーー Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d End Sub 私はこうしてますが。

madsss
質問者

お礼

回答ありがとうございます。 また、分かりづらくてすみません。 >(1)""はその列の空白行ですよね。 >(2)、""など、の「など」はどんなものですか。 (1)はそうです。空白行を無視したいのです。 通常であればexcelは無視してくれますが、 =IF(A1="XX","",A1) のようにセルに式を記述した場合、A1=XXであれば空白行を無視してくれません。 この場合どうしたらよいのでしょうか? (2)のなどは他の式を入れたときです。 よろしくお願いします。

関連するQ&A