ユーザー定義関数でセルの変更が反映されない問題の解決方法

このQ&Aのポイント
  • ユーザー定義関数を使用して色つきセルの合計を数える際、セルの変更が即座に反映されない場合があります。
  • セル範囲は30個ほどであり、計算では正しい結果が表示されますが、更新が遅くて変更されません。
  • この問題を解決する方法として、計算範囲を手動で更新するか、VBAの関数を使用することがあります。
回答を見る
  • ベストアンサー

ユーザー定義関数にて

色つきセルの合計を数えるユーザー定義関数を使用していますが 普通の関数のように、セルに変更等ですぐに更新してくれればいいのですが 表示は前回のままです。(ですので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

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 一般的に、書式の変化では「再計算」はしてくれません。 「値」の変化であれば「再計算」してくれます。 コードを見る限りセル色だけの判断のようですので、一案として、 シートモジュールの SelectionChange イベントなどを併用してはどうでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Calculate End Sub のようなコードを操作したいシートモジュールに記載するとか・・・m(_ _)m

this_love
質問者

お礼

早速のご回答ありがとうございます。 tom04さんのアイディアに助かりました。 まだまだ勉強の身なので、またお願いします。 すごいですね。 思うように動いてくれます。

関連するQ&A

  • セル色を取得するユーザー関数

    セル色を取得するユーザー定義関数として、 Function CellColor(objCell As Range) As Integer  Application.Volatile  CellColor = objCell.Interior.ColorIndex End Function 上記のコードを標準モジュールに貼り付け、例えばB2セルに「=CellColor(A2)」という計算式を入力すると、B2セルにA2セルの塗りつぶし色のColorIndex値が表示されるようになります。 これをB2セルに例えば「=CellColor()」というように入力すれば B2セルにB2セルの塗りつぶし色のColorIndex値が表示されるようにするには、 どのようなユーザー関数を作ればよいでしょうか? よろしくお願いします。

  • ユーザ定義関数がうまく動きません。

    ユーザ定義関数がうまく動きません。 2月のA1セル値が1になっていたりします。 どこがおかしいのかわかりません。解決方法を教えていただけませんでしょうか。 よろしくお願いします。 【シートの設定】 シート名は1月・・・12月です。 各シートの A1セルは「=sheetname()」 B1セルは「月のチェックシート」 が入っています。 【VBAの設定】 Function SheetName() As String 'Application.Volatile If Len(ActiveSheet.Name) = 3 Then SheetName = Left(ActiveSheet.Name, 2) Else SheetName = Left(ActiveSheet.Name, 1) End If End Function

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

    Excel VBA ユーザー定義関数をイベントマクロで使用する Excel2003を使用しています。 あるセルと同色に塗りつぶされたセルの値を合計したく、下記1のユーザー定義関数を作成しました。 このユーザー定義関数を下記2のイベントプロシージャ内で呼び出して使用したいのですが、可能でしょうか? 可能であれば、どのようにコードを書いたらいいでしょうか? Call を使用するのかな?と思い、コードを追加してみましたが、引数の型が一致しないといった内容のエラーメッセージが表示されてしまいました。 よろしくお願いします。 ------------------------------------------------------------- 1.ユーザー定義関数(同色セルの合計) Function SumColor(hanni As Range, iro As Range) As Double   Dim myrng As Range   SumColor = 0    For Each myrng In hanni     If myrng.Interior.ColorIndex = iro.Interior.ColorIndex Then      SumColor = SumColor + myrng.Value     End If    Next myrng End Function 2.イベントマクロ(C列3行目以下ダブルクリックで塗りつぶし) 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   End If End Sub

  • エクセルユーザー定義関数(1)

    エクセル初心者です。 複数のセル範囲(例えばRange("A1:A100"))を入力させ、入力されたセル範囲すべてのセルを3乗した総和を求めるユーザー定義関数は作ること可能でしょうか? Function Y(a As Range) As Variant ここに、aで選択されたセル全てを3乗して総和を求める関数Yを定義したい。 End Function よろしくお願い致します。

  • VBA TimeValue関数が異常

    お願いします・・ 以下の関数が実行できません・・ Sub te() ’’セルには時刻9:59を入れています If Cells(1, 1).Value = TimeValue("9:59") Then Cells(1, 1).Interior.ColorIndex = 6 End If End

  • 【EXCEL VBA】ユーザー定義関数の設定

    ネットより拝借した下記ユーザー定義関数を使用して、複数の選択したセルの値を区切り文字(セミコロン)で連結する仕組みを作成している途中です。 (例えば、A;B;C;D のように) Function myJoin(範囲 As Range, Optional 区切り文字 As String) As Variant Dim c As Range, buf As String If 範囲.Rows.Count = 1 Or 範囲.Columns.Count = 1 Then For Each c In 範囲 buf = buf & 区切り文字 & c.Value Next c If 区切り文字 <> "" Then myJoin = Mid$(buf, 2) Else myJoin = buf End If Else myJoin = CVErr(xlErrRef) 'エラー値 End If End Function セル(F6)からセル(Fxx)までデータが入力されています。(xxは変動します。) これらのデータをユーザー定義関数を使ってセル(F1)に[=myJoin (F6:Fxx,";")]を 入力するためのマクロを組んでみたのですが 「コンパイルエラー修正候補:区切り文字または)」となってしまいます。 (添付画像を参照願います。) 手入力でセル(F1)にユーザー定義関数(例:=myJoin (F6:F8,";"))を設定すると問題なくデータの連結が出来ます。このエラーを解消するにはVBE上でどのように定義したらいいのか、ご教授の程宜しくお願い致します。

  • ユーザー定義関数の再計算

    ユーザー定義関数を作りました。 ところが、この関数が自動再計算をしてくれません。 どうしたら自動再計算するようになるのでしょうか? よろしくお願いします。 ちなにこの関数は、自分のシートのB2とsheet1~sheet4のB9を比較して、正しければB9の4つ右のセルの値を合計して返すものです。 =SheetLook($B$2,"sheet1,sheet2,sheet3,sheet4",B9,4) コードです。 Function SheetLook(参照元 As Variant, 比較対象シート As String, 比較対象セル As Range, 参照セル位置 As Integer) As Variant   Dim i As Integer   Dim rng As Range   Dim sss As Variant   Dim kei As Variant   Dim cnt As Integer   sss = Split(比較対象シート, ",")   kei = 0   cnt = 0   For i = 0 To UBound(sss)     Set rng = Sheets(sss(i)).Range(比較対象セル.Address)     If 参照元 = rng Then       kei = kei + rng.Offset(0, 参照セル位置)       cnt = cnt + 1     End If   Next   If cnt <> 0 Then     SheetLook = kei   Else     SheetLook = ""   End If End Function

  • エクセル 複数シート( VLOOKUP ユーザー定義関数

    複数シート(範囲)を指定できるVLOOKUP関数をユーザー定義で作りたいと思ってます。下記のコードではうまく動かないので教えてください。 Function VLOOKUPM(検索値 As Variant, 対象シート As String, 対象セル As Range, 列番号 As Integer) As Variant Dim i As Integer Dim r As Range Dim sh As Variant Application.Volatile sh = Split(対象シート, ",") For i = 0 To UBound(sh) Set r = Sheets(sh(i)).Range(対象セル) If 検索値 = r Then VLOOKUPM = r.Offset(0, 列番号) Exit Function End If Next End Function

  • Excelのユーザー定義関数について。

    ネットで調べて「アルファベットのみを半角にする」というユーザー定義関数を発見し使用していますが、 この関数にある特定の文字を変換する条件を追加することはできますでしょうか。 例えば、リンゴ という文字がセル内にある場合、ミカン に変換されて表示されるという条件を下記のユーザー定義関数に加える事ができますか。 もしくは、新たに別のユーザー定義関数を作るしかないのでしょうか。アドバイスよろしくお願いします。m(_ _ )m Function ASC_A(str As String) As String Dim i As Integer For i = 1 To Len(str) If Mid(str, i, 1) Like "[a-zA-Z]" Then Mid(str, i, 1) = StrConv(Mid(str, i, 1), vbNarrow) End If Next ASC_A = str End Function

  • EXCEL:ユーザー定義関数で、すぐ上のセルの参照

    簡単なユーザー定義関数を作っています。 Function TEST2(ByVal 氏名 As Range, 数 As Range, 累計 As Range) If 氏名 = 氏名.Offset(-1, 0) Then TEST2 = 累計 + 数 Else TEST2 = 数 End If End Function 氏名が同じなら、累計計算をしたいのですが、累計は、求めたいセルのすぐ上なんで、 指定せずに、関数の中で参照出来るのではないかと思うのですが、良い方法はないで しょうか? 宜しくお願いします。

専門家に質問してみよう