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.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(“A2”)の1列目からと判断し、4+1-1=4と格納します。(1多くなるので引きます)
その他
・範囲を設定する事で、ループがしやすくなりました。
・プロシージャは引数を少なくすることで、シンプルな構成にしましょう。
今回の場合、Rangeで1つ渡せば済みますが、理解をしていないと開始行・列、最終行・列と4種類渡すことになります。少しわかりずらいですね。
・プロシージャは引数を少なくすることで、シンプルな構成にしましょう。
今回の場合、Rangeで1つ渡せば済みますが、理解をしていないと開始行・列、最終行・列と4種類渡すことになります。少しわかりずらいですね。
コメント