VBATips

Rangeを開始行・列/最終行・列に変換する【ExcelVBA】

Rangeから開始行や最終行を取得したい

関数を作成したい時に引数は極力減らしたいものです。
マクロでは最終行や最終列などセルのデータ取得はよく使いますが、
セル範囲を指定して引数で値を渡し、値を受け取ったプロシージャ側で分解が可能です。

Rangeから開始列・行や最終列・行を取得するコード


Public Function call_sample()
    Dim sRow As Long, sCol As Long
    Dim eRow As Long, eCol As Long
        
    '■rng(Rangeオブジェクト)を分解
    Dim rng As Range
    Set rng = Range("A2:D10")
    
    sRow = rng.Row                              ' 2 →  2行目
    sCol = rng.Column                           ' 1 →  1列目(A列)
    eRow = rng.Row + rng.Rows.Count - 1         '10 → 10行目
    eCol = rng.Column + rng.Columns.Count - 1   ' 4 →  4列目(D列)

End Function
Rangeデータを分解してRowsとColumnsに区分けしたたため、縦横でループしやすくなりました。
■結果イメージ
の場合、rng.Rows.Countで行数の最大値(2行目から10行目をで9行ある)を判断し、
開始行のRange(“A2”)2行目からと判断し、9+2-1=10と格納します。(1多くなるので引きます)

の場合、rng.Columns.Countで列数の最大値(A列(1列目)からD列(4列目)まで4列ある)を判断し、
開始列のRange(“A2”)1列目からと判断し、4+1-1=4と格納します。(1多くなるので引きます)

その他

・範囲を設定する事で、ループがしやすくなりました。
・プロシージャは引数を少なくすることで、シンプルな構成にしましょう。
今回の場合、Rangeで1つ渡せば済みますが、理解をしていないと開始行・列、最終行・列と4種類渡すことになります。少しわかりずらいですね。

コメント

タイトルとURLをコピーしました