- ベストアンサー
Excelの自作関数
自作で関数を作ろうとしていますが、以下の場合の書き方を教えてください。 セルが5つ横に並んでいます。 例えば、B5、B6、B7、B8、B9 とあります。 それぞれに100,75,50,25,0を掛けます。 計算式でいうと、B5*100 + B6*75 + B7*50 + B8*25 + B9*0 のようにします。 これを自作関数で作りたいのですが、 以下を書いてみたのですが、うまく動作しません。 どのように書けばよいのでしょうか? Function TEST(A, B, C, D, E) TEST = A * 100 + B * 75 + C * 50 + D * 25 + E * 0 End Function
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどうでしょう? Function TEST(A As Range) Dim iVal(5) As Integer Dim wkCel As Range Dim iCnt As Integer iCnt = 0 If A.Count <> 5 Then Exit Function End If For Each wkCel In A iVal(iCnt) = wkCel.Value iCnt = iCnt + 1 Next wkCel TEST = iVal(0) * 100 + iVal(1) * 75 + iVal(2) * 50 + iVal(3) * 25 + iVal(4) * 0 End Function
その他の回答 (4)
- to-haya
- ベストアンサー率38% (7/18)
>TEST,A~E までの形式を書いてないからではないでしょうか? 自動的にVariant型が設定されるから問題なし ※ Excel2003で検証済み(質問にあるソースも検証内容に含む)
- tad00
- ベストアンサー率0% (0/1)
TEST,A~E までの形式を書いてないからではないでしょうか?
- okormazd
- ベストアンサー率50% (1224/2412)
- to-haya
- ベストアンサー率38% (7/18)
ソースそのまま修正無しで動作したのですが… うまく動作しないとは、どのような現象なのでしょうか? ブレークポイント設定して動作確認はされてますか? セルに「=TEST(B5,B6,B7,B8,B9)」を設定しても動作しませんか?
補足
すみません、こちらでも動作しました。 選択肢を、1つ1つ選択せずに、ドラッグでまとめて選択していました。 追加で質問させてください。 選択肢をドラッグで、例えば以下のように選択した場合、結果は「#VALUE!」になってしまいます。 ドラッグでまとめての選択に対応できるようにする方法がありましたらお願いします。 =TEST(B5:B9)
お礼
ありがとうございます。想定していたとおりの動作です。 VBAは少しかじっただけで未熟ゆえ、お教えいただいたものも知らない部分がいくつかあります。これから勉強していきます。 ありがとうございました。助かりました。