2

入力セル(「B5」など)を受け取り、テーブルを参照する範囲オブジェクト(指定されたセルが右上のエントリ)を返す関数を作成しようとしています。

Sub Macro1()
Dim testCell As Range

testCell = Worksheets("HMA").Range("B5")
ReturnTable testCell

End Sub

Function ReturnTable(cell As Range)
    firstcell = cell
    lastrow = firstcell.End(x1Down)
    Table = Range(firstcell, lastrow + 5).Value
End Function

私はここで多くの問題に遭遇してきました、そして私は私が単純な何かを逃しているように感じます。私が得ているエラーは、lastRow行の「ObjectRequired」です。

デバッグモードでそれを見ると、testCellに範囲オブジェクトの値が割り当てられていることがわかります(これがデフォルトであると思います)。ここで何が欠けていますか?

私のアプローチは健全ですか?この問題を別の方法で解決することを検討する必要がありますか?

4

2 に答える 2

4

EndはRangeオブジェクトを返すため、lastrowは範囲変数である必要があります。

Function ReturnTable(firstcell as Range) as Range 'add this as range to tell the result of the function is a range
    dim LastCell as Range
    Set LastCell = firstcell.END(xldown)
    Set ReturnTable = Range(firstcell, lastcell) 'must use the same name of the function
End Function

ラストセルの下に5つのセルが必要な場合は、LastCell.Offset(5,0)

そしてMacro1では、おそらく次のようなものが必要になります

Set SomeVar = ReturnTable(testcell)
于 2013-03-26T16:14:30.377 に答える
3

オブジェクト(範囲など)を割り当てるときは、「設定」を使用する必要があります。

「設定」なしで範囲を割り当てると、VBAは範囲自体ではなく範囲の値を割り当てます。

Set testCell = Worksheets("HMA").Range("B5")
于 2013-03-26T16:15:35.927 に答える