• 締切済み

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

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

みんなの回答

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

ユーザー定義関数ではセル操作や参照等を行う事は出来ません。 条件付き書式か別のイベント等で必要な処理をする必要があります。

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

ちょっとしたミスがあるね。 ユーザー定義関数の中では、Rangeオブジェクトは使えなかったと思うから、その関数内で処理するのはできないんじゃないか。再計算が終わった後、処理するしかないから、Calculate イベントを使うなどしなければうまくいかないのでは。 Public adr Function test(ss As Double) adr = Application.ThisCell.Address If ss > 10 Then test = "ok" Else test = "Error!" End If End Function として、 Private Sub Worksheet_Calculate() If Range(adr) = "ok" Then Range(adr).Interior.ColorIndex = xlNone Else Range(adr).Interior.ColorIndex = 3 End If End Sub

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

セル側で色を変える処理をせずに、関数側で色を変えるとなると、関数を呼んだセルの位置を関数が知っている必要があります。 計算式に関数を使うだけでは、そのセルの位置は解らないので、そのセルの位置を関数に知らせる値を、関数の引数として渡すしかないでしょうね。 =yyy(xxx,ROW(),COLUMN()) という感じで。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

計算式で関数を使った場合、関数のほうでは、どのセルで使われてるのかを知る手段ってあるんでしたっけ? 関数を使用するセルで、条件付き書式を使えるように工夫するのが一番かと思いますが。

miniture_min
質問者

お礼

その場合、全ての関数を指定するセル全てに条件付書式を指定する必要がありますよね? その際に漏れなどが発生しないように、自動で変えたいのです。

関連するQ&A

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

    ユーザ定義関数がうまく動きません。 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:ユーザー定義関数で、すぐ上のセルの参照

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

  • 【VBA】ユーザ定義関数が動かない

    【VBA】ユーザ定義関数が動かない 下記のようなプログラムをVBEの標準モジュールに記述して、 ワークシートの適当なセルに「=tc("aa","bb")」と入力してEnterを押した所 セルの表示が「=tc("aa","bb")」となってしまい狙った効果が得られません。 本当は、「aabb」と表示させたいのですが、なぜうまくいかないのでしょうか。 ご教授願います。 ◆関数の仕様  引数1と引数2に入力された文字列を連結して返り値として返す。 ◆コード Function tc(str1 As Range, str2 As Range) As String Dim Str As String Str = str1.Value & str2.Valuett tt = Str End Function

  • エクセルのユーザー定義関数で(VBA)

    エクセルのVBAで、セルに「=SheetName」と書き込めば、その関数を書き込んだセルが属するシート名をセルに代入さるようなユーザー定義関数を作りたいと考えています。 で、標準モジュールに Public Function SheetName(test) SheetName = ????? End Function と、書き込んでふと止まりました。 ユーザー定義関数を書き込んだシートの名前ってどうやって取得すればいいのでしょうか?VBでいうSenderみたいなのってあるんでしょうか? どなたか?詳しい方教えて頂けないでしょうか? 宜しくお願いいたします。

  • 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

  • EXCELユーザー関数でISERRORを使うには?

    皆様、いつもお世話になっています。 0で除算すると、エラーになるのですが、それを回避するユーザー関数を作ろうと思っています。 下記のように作ったのですが、#VALUE!と、表示され、上手くエラーを回避出来ていません。 どのように、改良したら良いか教えて下さい。 Function DD(A As Integer, B As Integer) Dim RT As Range RT = A / B If Application.WorksheetFunction.IsError(RT) Then DD = "" Else DD = RT End If End Function

  • ユーザー定義関数にて

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

  • ユーザー定義関数で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 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上でどのように定義したらいいのか、ご教授の程宜しくお願い致します。

  • VBAにより作成した関数の返り値をセル内で改行したいのですが、どうした

    VBAにより作成した関数の返り値をセル内で改行したいのですが、どうしたら良いのでしょうか? Private Function txtdate(filepass As String) Dim fileNo As Integer Dim count As Integer Dim outline As String Dim buf fileNo = FreeFile Open filepass & ".txt" For Input As #fileNo ' Do Until EOF(fileNo) Line Input #fileNo, buf If count = 0 Then outline = outline & buf MsgBox outline Else outline = outline & vbLf & buf MsgBox outline End If count = count + 1 Loop Close #fileNo txtdate = outline End Function このような形でテキストファイルの中身を読み込んでセルに反映させるという事をおこないたいのですが、テキストの内容が2行以上の場合、帰ってくる値に改行を入れたいと思っております。 17行目にそれらしくvblfを追加したのですがセルに上手く反映されません。msgboxで確認したところmsgboxでは問題無く改行が反映されているようなのですが… エクセルセル内で「=txtdate("適当なテキストファイルのパス名")」という形で関数を呼び出しています。 どなたか対処法教えていただければ幸いです。よろしくお願い致します。

専門家に質問してみよう