• ベストアンサー

ユーザー定義関数に特定のセルの値をかける

IF(シート1!C2>0,名目(A2)*E2,6) 上記の式のように一定の条件下で、ユーザー定義関数に特定のセルの値をかけた 値を表示させようとしています。 しかしなぜか0が表示されてしまいます Select Case KATA Case Is = 1 名目 = E * 34 のようにユーザー定義関数の中にセル式をかけるとしても 0が表示されます どうしてでしょうか

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

セルの値の乗算やIFの条件を外して、 =名目(A2) とした際、期待した結果が表示されているのでしょうか? | Select Case KATA | Case Is = 1 | 名目 = E * 34 | のようにユーザー定義関数の中にセル式をかけるとしても セル式ってのが何を指すのか不明瞭ですが、VBA中でE2セルの値を参照するには通常、 Range("E2").Value などとします。 VBA中で、 名目 = E2 * 34 などとすると、暗黙に宣言された変数E2(初期値は0)の内容が参照されます。 暗黙に宣言された変数を使用しないよう、標準モジュールの先頭に、 Option Explicit と宣言すると、問題のある箇所をきちんとエラーにしてくれるハズ。

ridi8888
質問者

お礼

Option Explicitのおかげでエラーの原因を発見することができました 感謝します

関連するQ&A

  • ユーザー定義関数でA列の値に応じてB列の値を変える

       A列      B列 1行   Type   名称 2行     1    あ 3行    2    い 4行    3    う VBA初心者のものです。ユーザー定義関数を作成して、A列のTypeの値に応じて、B列の名称の値を変化させる式を作成中です。B列2行目に、下記のユーザー関数をセル式として記述し、3・4行目にコピーしたのですが、0が表示されてしまいます。 どうしてでしょうか? Functionめいしょう(Type, 名称) Sheets("突合せ").Select If  Type = 1 Then 名称 ="あ" Exit Function     If  Type = 2 Then   名称 = "い"   Exit Function        If  Type = 3 Then        名称 = "う"           Exit Function       End If     End If End If End Function

  • ユーザー定義関数が入力されたセルを調べたい

    Excel でユーザー定義関数を作成し、アドインにして仕事で使っています。 これらの関数を使用したブックを外部に配布する時にユーザー定義関数を値に変換してから配布したいのですが、ユーザー定義関数とワークシート関数の区別の方法が判りません(外部にアドインは配布しません)。 Dim r As Range Dim f As String For Each r In Activesheet.UsedRange If r.HasFormula Then f = r.Formula Do ' f がユーザー定義関数の一覧の中に見つかれば、セル r の色を変えてループ脱出 Loop End If Next という方法を試みましたが、UsedRange の大きさやユーザー定義関数の数が多いことも影響して結構な時間が掛かってしまいます。 ユーザー定義関数とワークシート関数を区別する方法があれば、Do~Loop を回さなくて済むので、時間短縮できるのではないかと考えています。 よろしくお願いします。

  • ユーザー定義関数で、選んだセルの下のセルの参照方法

    簡単なユーザー定義関数を作っています。 Function TEST(氏名) TEST = End Function 氏名のセルを選んで、その下のセルの値を参照したいのですが、どのようにしたら良いのでしょうか? OFFSET関数を使いたくも、選んだ氏名のセルをどう使うのかわかりません。 宜しくお願いします。

  • VBAで特定のセルに値を入力したい

    VBAについて教えてください. (当方初心者です) VBAでユーザー定義関数で 計算しているセルから相対的な位置に値を入力したいのです. より具体的に言うと、例えば B3のセルでユーザー定義関数を用いて計算します。 その関数で計算した結果である一定の条件を満たした時にだけ その関数で計算しているセルから2行2列隣のセルに 特定の値を入力したい場合にはどうすればよいのでしょうか? 試しに簡単に書いてみたのが以下です。 ------------------------------------------- Sub test1() ActiveCell.Offset(2, 2).Value = 100 End Sub Function test2() test1 End Function ------------------------------------------- これだとtest1を単体で実行した場合は上手く動作するのですが test2でtest1を呼び出した場合はエラーになります。 これをどう直せばtest2内でtest1の動作を実行できるのでしょうか? ご教授のほどよろしくお願いいたします。

  • Excel2003のユーザー定義関数でセルに色をつけたい

    Excel2003のユーザー定義関数で、RGBの値を指定してセルに色をつけたいと考えています。 具体的には、 =CellColor(255,100,33) のように、RGBの値を引数にとり、そのセルに色をつけることは可能でしょうか? マクロを使えば可能ですが…。 また、同時にかなりの数の色を同じシートに出したいのですが、色の数に制限があるというのは本当でしょうか? そうだとすると、マクロで実現できたとしても不可能ですよね? 以上、よろしくお願いいたします。

  • Excelユーザー定義関数が書き込まれているセルアドレス

    Excelのユーザー定義関数で、自分自身が書き込まれているセルのアドレスって取得出来るのでしょうか? 例えば、 Function test(MyString As String) As String test = "入力された文字は、「" & MyString & "」です" End Function とユーザー定義関数を作り A1のセルに =test("てすと") と書くと 入力された文字は、「てすと」ですと出てきます。 そこで、ユーザー定義関数のなかで、ユーザー定義関数を呼び出した式が入力されている(上記の例ですと、「A1」)アドレスを取得する方法ってありますか? どなたか、詳しい方いらっしゃいましたら教えてください。

  • ユーザー定義関数にて

    色つきセルの合計を数えるユーザー定義関数を使用していますが 普通の関数のように、セルに変更等ですぐに更新してくれればいいのですが 表示は前回のままです。(ですのでF9を押しています) 計算ではちゃんとした数字になっているのですが 更新が遅くて変更されません。 (セル範囲は縦で30個ぐらいです) すぐに更新するいい方法はないでしょうか? ご経験者の方々、知識ある方々の ご意見やアドバイスなどをよろしくお願いします。 色つきセルのカウント Function CountColor(計算範囲, 条件色セル) Application.Volatile CountColor = 0 For x = 1 To 計算範囲.Rows.Count If 計算範囲.Rows(x).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then CountColor = CountColor + 1 End If Next End Function

  • 入力がないのにユーザー定義で定義した文字列が常に表示されてしまう。

    入力がないのにユーザー定義で定義した文字列が常に表示されてしまう。 VLOOKUP関数とIF関数を組み合わせて「=IF(A1="","",VLOOKUP(A1,D2:C5,2,FALSE))」という関数を入力しています。 念のため申し上げますと、 VLOOKUP関数で「D2:C5」の表からデータを検索し、そのデータに該当した行の指定列からデータを取り出しているわけです。 IF関数は、「#N/A」エラーを表示させたくないためです。 この計算式を入力しているセルの書式設定を、ユーザー定義で、「"○""○""○""○""○""○""○"@」としたのですが、 A1セルに入力が無く入力の無いはずのセルに「○○○○○」が常に表示されてしまいます。 どこが間違っているのでしょうか? お知恵を拝借させてください。

  • 関数が入っている列で値のある最後のセルの値を返す

    お尋ねします。 関数が入っている列で式の値が入っている一番下のセルの値を調べるにはどうしたら良いでしょうか? 例      A列   1   5   2   10   3   13   4   (式の値が無いのでゼロ) B1セルにA3セルの13と言う値を返したいのですが、列に式(SUMPRODUCT関数)が入っていて、実際はA4セルのゼロが返ってきます。 またシート1~シート5 まで上記と同じ式が入っていて、シート1のA列の最後の値「13」をシート6のB1セルに値を返す場合、INDIRECT関数を使った場合、どういう式になるでしょうか? ご回答よろしくお願いします。

  • VBAでのユーザ定義関数の返り値

    VBAでのユーザ定義関数の返り値をエクセルのセルに表示させる際、 色を変更して表示するにはどうすれば良いのでしょうか? つきのような関数のerrorの時だけ赤色にしたいのです。 functin test(ss as double) if ss >10 then test=ok else test =error! end if end function

専門家に質問してみよう