6月5日の日記
2013年6月5日本題はひみつの方
エクセルでユーザー定義関数を作ってて、Excel VBAにはオーバーロードが無いことを今日初めて知って驚いた
もともとエクセルの関数でsum(a1:a5)とsum(1,2,3)を何も考えずに使ってたから、ユーザー定義関数でも簡単に作れるもんだと思ってたら微妙にめんどくさかったから備忘録
調べてみたらいくつかやり方が有るけど、今回はこの形で実装
関数の引数をparamarrayで指定し、任意の数の引数を受け取れるように
最初の引数のタイプを調べて、Range型ならRangeで指定された範囲にFor Each
違うなら引数の配列に対してFor Eachを適用
sum(1,2,3)がデフォルト仕様で、1がa1:a5の形だったらsum(a1:a5)の動きをする感じ
適当に書くとこんな
function test(ParamArray X()) as double
if typename(X(0)) = "Range" then
For Each Y in X(0)
~
next Y
else
For Each Y in X
~
next Y
end if
end function
書いてて非常に気持ちが悪い
エクセルでユーザー定義関数を作ってて、Excel VBAにはオーバーロードが無いことを今日初めて知って驚いた
もともとエクセルの関数でsum(a1:a5)とsum(1,2,3)を何も考えずに使ってたから、ユーザー定義関数でも簡単に作れるもんだと思ってたら微妙にめんどくさかったから備忘録
調べてみたらいくつかやり方が有るけど、今回はこの形で実装
関数の引数をparamarrayで指定し、任意の数の引数を受け取れるように
最初の引数のタイプを調べて、Range型ならRangeで指定された範囲にFor Each
違うなら引数の配列に対してFor Eachを適用
sum(1,2,3)がデフォルト仕様で、1がa1:a5の形だったらsum(a1:a5)の動きをする感じ
適当に書くとこんな
function test(ParamArray X()) as double
if typename(X(0)) = "Range" then
For Each Y in X(0)
~
next Y
else
For Each Y in X
~
next Y
end if
end function
書いてて非常に気持ちが悪い
コメント