- 締切済み
Excel VBAでセル参照を2種類可能にしたい
自作関数を作っていますが、参照の仕方に困っています。 =AAA(A1,B1,C1)と読み込ませる場合。 =AAA(A1:C1) と読み込ませる場合。 があります。 しかし前者は、 Function AAA(b1, b2, b3) As Double ...省略 End Function と書けば対応可能。 後者は、 Function AAA(b) As Double ...参照時にb(1)、b(2)、b(3)とかけば利用可能。 End Function なのですが、両方読み込み可能とすることができません。 前者の記述では、後者のセル参照でエラーが発生。 後者の記述では、前者のセル参照でエラーが発生します。 対応策はあるでしょうか?お知恵を拝借願います。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
簡易には(ある程度限定的ですが) publiec function AAA(byval a1 as range) as variant : end function とだけしておき, =AAA(A1:C3) =AAA((A1,B2,C3)) のように利用することはできます。
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
>なのですが、両方読み込み可能とすることができません。 関数の宣言を Function AAA(ParamArray b()) As Double End Function のようにすれば =AAA(A1,B1,C1)と読み込ませる場合。 =AAA(A1:C1)と読み込ませる場合。 =AAA(1,2,3,4,5)と読み込ませる場合。 =AAA(1)と読み込ませる場合。 は、どれも可能になります。 引数は「配列」として渡されます。 以下の関数は、引数に渡した物を数値として扱って合計する関数です。 Public Function AAA(ParamArray b()) As Double Dim i As Variant Dim j As Variant Dim t As Double t = 0 For Each i In b If IsNumeric(i) Then t = t + i ElseIf IsArray(i) Then For Each j In i If IsNumeric(j) Then t = t + j End If Next End If Next AAA = t End Function この関数は =AAA(A1:C1) =AAA(A1:C1,E1:G1,J1:L1) =AAA(A1,C2,A2:G3) =AAA(1,3,5,7) =AAA(1,A3,3,A7) =AAA(A1,10,B1,-2,C1,E1,F1:J1) のように、どう呼んでも動きます。つまり「標準のSUM関数と同じ」です。