• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • to-haya
  • ベストアンサー率38% (7/18)
回答No.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

ps5550
質問者

お礼

ありがとうございます。想定していたとおりの動作です。 VBAは少しかじっただけで未熟ゆえ、お教えいただいたものも知らない部分がいくつかあります。これから勉強していきます。 ありがとうございました。助かりました。

その他の回答 (4)

  • to-haya
  • ベストアンサー率38% (7/18)
回答No.4

>TEST,A~E までの形式を書いてないからではないでしょうか? 自動的にVariant型が設定されるから問題なし ※ Excel2003で検証済み(質問にあるソースも検証内容に含む)

  • tad00
  • ベストアンサー率0% (0/1)
回答No.3

TEST,A~E までの形式を書いてないからではないでしょうか?

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

「うまく動作しません」 どのようになるのでしょうか。 ちゃんと動作すると思いますが。

ps5550
質問者

補足

すみません、こちらでも動作しました。 選択肢を、1つ1つ選択せずに、ドラッグでまとめて選択していました。 追加で質問させてください。 選択肢をドラッグで、例えば以下のように選択した場合、結果は「#VALUE!」になってしまいます。 ドラッグでまとめての選択に対応できるようにする方法がありましたらお願いします。 =TEST(B5:B9)

  • to-haya
  • ベストアンサー率38% (7/18)
回答No.1

ソースそのまま修正無しで動作したのですが… うまく動作しないとは、どのような現象なのでしょうか? ブレークポイント設定して動作確認はされてますか? セルに「=TEST(B5,B6,B7,B8,B9)」を設定しても動作しませんか?

ps5550
質問者

補足

すみません、こちらでも動作しました。 選択肢を、1つ1つ選択せずに、ドラッグでまとめて選択していました。 追加で質問させてください。 選択肢をドラッグで、例えば以下のように選択した場合、結果は「#VALUE!」になってしまいます。 ドラッグでまとめての選択に対応できるようにする方法がありましたらお願いします。 =TEST(B5:B9)

関連するQ&A