- 締切済み
最終行の取得について
今回、最終行を習得するにあたって壁にぶちあたってしまいました。。 まず、元dataがありましてそれを B1セル=IF($A1=0,"",A1)’下方向にペースト といったように数式を用いて空白にしたところ、 それを空白としてひらい出すことができず、別のシートに値のみ貼り付けを行っても、うまくいきません。現状このようなコードで最終行をとらえれません、何かいい方法がありますでしょうか? Range("B1").End(xlDown).Row
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 VBAでしたら、こんな簡単なコードでよいのでは? Sub TestA() Dim c As Range Set c = ActiveSheet.Columns(2).Find("*", , xlValues, 1, 1, 2) If Not c Is Nothing Then MsgBox c.Row End If Set c = Nothing End Sub '--------------------------- Sub TestB() Dim v As Variant v = Evaluate("MAX((B1:B50<>"""")*ROW(B1:B50))") If Not IsError(v) Then MsgBox v End If End Sub *VBAでは、配列出力のない関数は、配列確定は必要ありません。
- myRange
- ベストアンサー率71% (339/472)
VBAでやるなら次のように。。 未使用の列(例えば、G列)を作業列として使う方法。 B列の値をG列に代入(値のコピーではない)して G列で最終行を求める。 '---------------------------------- Sub Test() Dim LastRow As Long Range("G:G").Value = Range("B:B").Value LastRow = Cells(Rows.Count, "G").End(xlUp).Row MsgBox "最終データ行: " & LastRow End Sub '-------------------------------------- 処理が終わったら、 Range("G:G").ClearContents これでG列の値を消しておく。 以上ここまで。
- zap35
- ベストアンサー率44% (1383/3079)
「元data」が50行目まであるとして、同じシートの任意のセルに以下の式を貼り付けてください =MAX(INDEX((B1:B50<>"")*ROW(B1:B50),)) VBAでもできますが、関数の方が楽ではありませんか?
- imogasi
- ベストアンサー率27% (4737/17069)
これはVBAの質問か、関数の質問かまず表題で明記すべきでしょう。 質問には関数の話も出てくるし。 A列A1に=IF(B1="","",1) と入れてA10まで式複写しました。 たまたまB1:B10が空白なのでA1:A10は空白に見えています。 標準モジュールに Sub test02() d = Range("a65536").End(xlUp).Row MsgBox d End Sub を入れて実行すると、10と返りました。 これが質問者に都合が悪いと言うことですか。
補足
まず、現状こちらの環境で空白に見えたところが、 最終列として認識されず、 数式が入ってる最終列としての認識をされてしまうというのが、 今回の問題でございます。 当方の環境下はosXP SP3 エクセル2007 2003互換モードでの作成でございます。 現在、VBAの作成をしてますが、コード記述が未熟なためうまくいきません。 回答者様の10が返ったのはA10まで数式が入ってるということなので そのためかと。。私のしたいのは上記の場合ですと、A1~最終列まで数式が入ってると仮定しまして その数式で ””ブランクセルを返してる最終部分を見たいわけです。 部分を最終列として認識したいのです。 ぜひご教授ください。
補足
最終行を習得できました^^ なるほど~と思いました VBAで書きたかった理由はコードが存在していて、そこに+αとして 最終行の記述をしたかったのです。関数でもできるとわかりましたが、 この最終行を変数(Le)に代入するには、 Le=MAX(INDEX((B1:B50<>"")*ROW(B1:B50),)) ではないですよね??