- ベストアンサー
ExcelVBAで最終行を誤認する問題の回避方法
いつもお世話になります。 ActiveSheet.Cells.SpecialCells(xlLastCell).Rowなどのコードで 最終行を取得しようとするとき、縦スクロールバーを下端まで下げた 時に空行を表示してしまうなどをすると正しく取得できなくなると いったことが起こります。現在では保存すれば修正されるみたい ですが、保存をせずに正しく取得できるようにするための方法は ありますでしょうか。 宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2 です。ついでに補足を。 実務的には、データのある最終行とか最終セルがほしいことがほとんど ですよね。SpecialCells(xlLastCell) でも UsedRange でもその動作仕様 を理解している場合は問題なく使えますが、こんな方法が最も確実だった りします。 Sub Sample2() Dim r As Range Set r = FindLastCell(ActiveSheet) MsgBox r.Address End Sub ' // シート内の最終データセルを求める(最後のセルではない) Public Function FindLastCell(ByVal Sh As Worksheet) As Range Dim lRow As Long, lCol As Long On Error GoTo Err_ lRow = Sh.Cells.Find(What:="*", _ LookIn:=xlValues, _ SearchDirection:=xlPrevious, _ SearchOrder:=xlByRows).Row lCol = Sh.Cells.Find(What:="*", _ SearchDirection:=xlPrevious, _ SearchOrder:=xlByColumns).Column Set FindLastCell = Sh.Cells(lRow, lCol) Bye_: Exit Function Err_: ' // case no data in the worksheet. Set FindLastCell = Sh.Cells(1, 1) Resume Bye_ End Function
その他の回答 (4)
- momoracci
- ベストアンサー率51% (14/27)
Excel で最終行の取得方法は複数あります。下のサイトで検証されています。 すべてを試されてはいかがでしょうか。 ノーツ/ドミノ パワーアップガイド (toru's page) - No.8 ワークシートの最終行、最終列を取得する http://www.niji.or.jp/home/toru/notes/8.html
- popesyu
- ベストアンサー率36% (1782/4883)
ActiveSheet.Cells.SpecialCells(xlLastCell).Row の仕様上の問題です。まぁバグと言ってしまえばそうなんですが、最早そういう仕様という認識をされた方がよいかと。VBAのサンプルサイトでもその方法を推奨しているところはあまり見かけたことはありません。あったとしても下記のようにちゃんと注意点が書かれていたりします。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_030_100.html 対策としてはFAQサイトでサンプルとしてよく挙げられている方法を使うべきかと。 例えば下記とか。 ActiveSheet.Range("$A$65536").End(xlUp).Address
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 ダミーで良いから一度 UsedRange を使うと最終セルが補正されます。 こんな感じ。 Sub Sample() Dim lDummy As Long lDummy = ActiveSheet.UsedRange.Row MsgBox ActiveSheet.Cells.SpecialCells(xlLastCell).Row End Sub
- imogasi
- ベストアンサー率27% (4737/17069)