2

「CurrentRegion」を使用してデータの2D配列を構築しようとしています。

Function ProcessData()
Dim dataList()
dataList = Range("A1").CurrentRegion
' TODO Process the dataList
End Function

Visual Basic(Run / F5)内でこれをテストすると、うまく機能します。私のdataListは問題なく構築されています。ただし、ワークシートのセルを次のように設定した場合:

= ProcessData()

関数は「CurrentRegion」ステップでサイレントに失敗します。なぜこれが起こるのですか?どうすれば修正できますか?

4

2 に答える 2

5

Excelセルから関数を呼び出す場合(つまり、User-Defined-Function / UDPとして)、パラメーターを介して関数に渡される範囲にのみアクセスできます。他の範囲(および範囲)にアクセスする.CurrentRegionと、実行がキャンセルされる可能性があります。

また、UDFでは、ワークシートの内容を変更することはできませんが、関数の結果のみを返します。

詳細については、このリンクを確認してください。

于 2013-03-26T20:45:41.177 に答える
0

同じ問題を抱えているこのQ&Aに遭遇しました。UDF内で使用するには一種のバグがあると思いますがCurrentRegion、その理由はPeterが彼の回答で示唆しているものではありません。

これら2つの関数を比較してください。

Function GetAddressOfColumn(TopCell As Range)
    GetAddressOfColumn = TopCell.CurrentRegion.Address
End Function


Function GetAddressOfColumnOK(TopCell As Range)
    GetAddressOfColumnOK = Range(TopCell, TopCell.End(xlDown)).Address
End Function

どちらの関数も、異なる種類の範囲参照を使用します。Peterが正しければ、両方とも誤った結果を返すはずです。したがって、以下のデータ範囲と両方の関数の結果を見てください。ご覧のとおり、2番目の関数の結果は期待どおりで正しいものです。

ここに画像の説明を入力してください

于 2013-12-03T22:12:07.790 に答える