MW211 EXIT

devlog
ExcelVBA/シートの範囲(全体)
2015年07月12日
シート全体の有効範囲を得る方法。

まず以下が考えられる。
┌──────────────────────────────────────┐
│With シート                                                                 │
│    xMax = .Range("A1").CurrentRegion.Columns.Count                         │
│    xMax = .Range("A1").CurrentRegion.Rows.Count                            │
│End With                                                                    │
└──────────────────────────────────────┘
でもこれだと、途中に空欄の境目があった場合、そこまでで途切れてしまう。

なので、「Ctrl+End」を再現して代用していた。
┌──────────────────────────────────────┐
│With シート                                                                 │
│    yMax = .UsedRange.Row  ' ダミー処理                                     │
│    xMax = .Cells(1, 1).SpecialCells(xlLastCell).Column                     │
│    yMax = .Cells(1, 1).SpecialCells(xlLastCell).Row                        │
│End With                                                                    │
└──────────────────────────────────────┘
但し、この場合は、末尾の空欄(かつて何か入力していて、それを削除した場合)も
拾ってしまっていたので、「.UsedRange.Row」というダミー処理も噛ましていた。

しかし、以下が正解だったようだ。
┌──────────────────────────────────────┐
│With シート                                                                 │
│    With .UsedRange                                                         │
│        xMax = .Columns(.Columns.Count).Column                              │
│        yMax = .Rows(.Rows.Count).Row                                       │
│    End With                                                                │
│End With                                                                    │
├──────────────────────────────────────┤
│With シート                                                                 │
│    xMax = .UsedRange.Columns(.UsedRange.Columns.Count).Column              │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│End With                                                                    │
└──────────────────────────────────────┘
「.Rows.Count」だけだと、左上に空欄があった場合に
それを除外して算出してしまっていたが、
これを「.Rows(.Rows.Count).Row」とすることにより、絶対座標を得ることができた。

ちなみに、全て空欄の場合は「x=1,y=1」を返却する。
分類:ExcelVBA