• ベストアンサー

ExcelVBAで最終行を誤認する問題の回避方法

いつもお世話になります。 ActiveSheet.Cells.SpecialCells(xlLastCell).Rowなどのコードで 最終行を取得しようとするとき、縦スクロールバーを下端まで下げた 時に空行を表示してしまうなどをすると正しく取得できなくなると いったことが起こります。現在では保存すれば修正されるみたい ですが、保存をせずに正しく取得できるようにするための方法は ありますでしょうか。 宜しくお願いいたします。

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

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

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

Excel で最終行の取得方法は複数あります。下のサイトで検証されています。 すべてを試されてはいかがでしょうか。 ノーツ/ドミノ パワーアップガイド (toru's page) - No.8 ワークシートの最終行、最終列を取得する http://www.niji.or.jp/home/toru/notes/8.html

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.4

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

こんにちは。 ダミーで良いから一度 UsedRange を使うと最終セルが補正されます。 こんな感じ。 Sub Sample()   Dim lDummy As Long   lDummy = ActiveSheet.UsedRange.Row   MsgBox ActiveSheet.Cells.SpecialCells(xlLastCell).Row End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

関連するQ&A