• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA ユーザー定義関数をイベントマクロで使用する)

Excel VBA ユーザー定義関数をイベントマクロで使用する

このQ&Aのポイント
  • Excel2003を使用しています。あるセルと同色に塗りつぶされたセルの値を合計するためのユーザー定義関数を作成しました。イベントマクロ内でこのユーザー定義関数を使用したいのですが、コードの書き方について教えてください。
  • ユーザー定義関数(同色セルの合計)とイベントマクロ(C列3行目以下ダブルクリックで塗りつぶし)のコードを提供します。イベントマクロ内でユーザー定義関数を呼び出すためにはどのようなコードを追加すればよいでしょうか?引数の型が一致しないエラーメッセージが表示されてしまいます。
  • Excel2003で使用するためのユーザー定義関数とイベントマクロのコードを提供します。イベントマクロ内で塗りつぶされたセルの値を合計するためには、ユーザー定義関数をどのように呼び出せばよいでしょうか?コードに引数の型が一致しないエラーメッセージが表示されています。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2の回答者です。 >色の設定に重要な意味を持たせる(判定の条件にする等)のは好ましくないといった内容を目にしました。 そういうことを言う人がいますが、それは取り扱いが出来ないなら、という条件であって、「好ましくない」ということではないと思います。 >ユーザー定義関数を作成したものの、塗りつぶしの有無を変更しても計算結果を反映できないので、 私は、何度か発表していますが、以外に難しいということで、イベントを利用することには違いありません。 以下に私の発表したものがあります。 「自作マクロをセルの色が変わる度に再計算させるには」 http://okwave.jp/qa/q4680287.html 1. は、今試すと、修正が必要のようです。(名案とは言えませんが。) ' Private Sub Worksheet_SelectionChange(ByVal Target As Range)  Activesheet.Calculate End Sub

KOH3193
質問者

お礼

Wendy02 さま、再度の回答ありがとうございます。 塗りつぶしの変更を判定の条件にしようとすると、イベントを利用して再計算させないといけないのですね。 今回の質問を投稿する前に、似たような内容の質問を検索してみたところ、再計算が必要との回答がありましたので、イベントで再計算させれば条件にできないこともないのかなとは思いましたが…。 Wendy02 さまが以前発表されたもののURLも拝見しました。 参考にさせていただきます。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

補足、 ユーザー定義関数のどこかに、以下の一行を加えてください。 Application.Volatile

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>このユーザー定義関数を下記2のイベントプロシージャ内で呼び出して使用したいのですが、可能でしょうか? >可能であれば、どのようにコードを書いたらいいでしょうか? Doubleクリックで色塗りしているわけですね。 > Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 38)).Interior.ColorIndex = 36 一体、何をどうするのか、言葉で説明してほしいです。このままなら、ただのSUM関数で済むのでは? それで、色抜きでもするなら、また別問題です。その場合、ユーザー定義関数を貼り付けてください。 '// Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   Cancel = False   If Target.Column = 3 And Target.Row >= 34 Then    With Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 38))     .Interior.ColorIndex = 36    Target.Offset(2).Formula = "=SUM(" & .Address(0, 0) & ")"    'Target.Offset(2).Value = SumColor(.Cells, .Cells(1)) 'ユーザー定義関数の場合    End With   End If End Sub '//標準モジュール(このような書き方をしたほうがよいですね。) Public Function SumColor(Hanni As Range, Iro As Range) As Double   Dim myRng As Range   Dim dblSum As Double   dblSum = 0    For Each myRng In Hanni     If myRng.Interior.ColorIndex = Iro.Interior.ColorIndex Then      If VarType(myRng) = vbDouble Then       dblSum = dblSum + myRng.Value      End If     End If    Next myRng   SumColor = dblSum End Function

KOH3193
質問者

お礼

Wendy02 さま、回答ありがとうございます。 先の回答者様のお礼にも書かせていただきましたが、意図した質問内容とは違う内容となってしまっていました。 お時間をとらせてしまい、申し訳ありません…。 ユーザー定義関数を作成したものの、塗りつぶしの有無を変更しても計算結果を反映できないので、イベントマクロを使用して計算結果が反映されるようにできないかという内容で質問するはずでした。 ただ、 > それで、色抜きでもするなら、また別問題です。 という部分で、ちょっとアイデアをいただいたというか、塗りつぶしを元に戻す(塗りつぶしなし状態)コードを書き加えさせていただきましたので、意味不明な質問でも収穫がありました(^^ゞ 参考書やネットで調べたところ、色の設定に重要な意味を持たせる(判定の条件にする等)のは好ましくないといった内容を目にしました。今回は勉強も兼ねて、このようなユーザー定義関数を作ってみたのですが、確かにそのとおりですね。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

何て言うか,普通に関数として使うだけです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Column = 3 And Target.Row >= 34 Then    Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 38)).Interior.ColorIndex = 36    ’使用例    msgbox sumcolor(target.resize(2, 36), target)   End If End Sub

KOH3193
質問者

お礼

keithin さま、回答ありがとうございます。 あれこれ試してうまくいかず、今回質問させていただいたのですが、意図する内容とは違う質問内容となってしまっていました…。 この質問文では、おっしゃるとおり、 > 何て言うか,普通に関数として使うだけです。 ですよね(^^; お時間をとらせてしまい、申し訳ありません。 ありがとうございました。

関連するQ&A