フィルをマクロで操作し、その戻り値をRangeとする関数
先日は、フィルをマクロで操作してみた。
infoment.hatenablog.com
でも、これだけだと面白くない。そこで、作成した連続データ範囲を戻り値とする関数にしてみた。
このために必要な情報は、
初期値+増分値のn倍が、停止値となっていない場合
の振る舞いについてだ。どういうことかというと、例えば
- 1から10まで4ずつ増やせ
と命じたとき、最後の値が幾つになるかで、戻り値の範囲が決まるということ。
A.は、停止値手前の最大値。次の値で停止値を超えるため、ここで終了する。
B.は、停止値そのもの。超えようとして停止値に気づき、これを表示して終了。
C.は、停止値ピッタリで止まることが出来ず、停止値を飛び越えて終了。
実験してみると、正解はAだった。そこで先日のサブプロシージャを、次のように作り替えてみた。
Function DataSeriesRange(destination_range As Range, _ Optional dsStart As Long = 1, _ Optional dsStep As Long = 1, _ Optional dsStop As Long = 10, _ Optional dsRowCol As XlRowCol = xlRows, _ Optional dsType As XlTrendlineType = xlLinear, _ Optional dsDate As XlDataSeriesDate = xlDay, _ Optional dsTrend As Boolean = False) As Range On Error GoTo er: With destination_range .Value = dsStart .DataSeries dsRowCol, dsType, dsDate, dsStep, dsStop, dsTrend End With Dim ResizeIndex As Long ResizeIndex = WorksheetFunction.RoundDown((dsStop - dsStart) / dsStep, 0) + 1 Select Case dsRowCol Case xlRows Set DataSeriesRange = destination_range.Resize(, ResizeIndex) Case xlColumns Set DataSeriesRange = destination_range.Resize(ResizeIndex) End Select Exit Function er: Set DataSeriesRange = Nothing End Function
それでは、こちらでテストしてみよう。
Sub test() DataSeriesRange(Range("A1"), 1, 3, 30, xlColumns).Select End Sub
結果、このようになった。
ちゃんと指定通り、1から30まで3ずつ増やし、その範囲を選択している。
まずまずと言ったところか。
ところでこの関数、実は現時点で既に、二つの不具合を抱えている。
これについては明日以降、改良に挑戦してみます。
参考まで。