『こちらで公開されているcolor関数をもっと便利に使わせて頂きたい。』(カレンダー) いつもこちらのウェブサイトを参考にさせて頂き、業務にてユーザー定義関数を使用しております。 さて、こちらのサイトにて公開されおります下記のユーザー定義関数1を使用したところ、 空白、なおかつ、文字の色の設定が任意の色になっているセルがカウントされてしまい、ちょっと困っております。 具体的には、セルA1にリンゴと入力をする。文字の色を赤に染める。セルZ1に=UFClrCntfc(A1:D1,3)と入力。計算結果、1。セルA1をディリートで消す。そこで再計算させると、計算結果、1。といった具合です。空白になったセルA1の文字の色を黒にもどしてあげると、0を返します。 ちなみに、こちらで公開されております下記のユーザー定義関数2に関しましては、数字を入力し、任意の色に染めた場合には期待通りの動作をしてくれるのですが、文字列(りんご、apple等)を入力し、任意の色で染めるとエラー(#VALUE!)が返ってきてしまいます。ただし、こちらの関数は、ディリートで消すと、文字色の設定を変えずとも0を返してくれます。 コピペをさせて頂いて使用するくらいの能力しか私にはなく、 関数1を使用した際に、関数2の様に、ディリートで消すだけでカウントしなくなる、 もしくは、関数2を使用した際に、数字以外も扱えるようになる、 これらのどちらかをご教示頂ければと思います。 大変お手数ですが、よろしくお願い致します。 ユーザー定義関数1 Public Function UFClrCntfc(adrs, clr) ' 特定色の文字色の数 Dim sm As Variant, cv As Variant, fci As Integer, ad As Range sm = 0 For Each ad In adrs fci = ad.Font.ColorIndex If fci = clr Then sm = sm + 1 End If Next UFClrCntfc = sm End Function ユーザー定義関数2 Function FCS(adrs, clr) sm = 0 For Each ad In adrs fci = ad.Font.ColorIndex cv = ad.Value If fci = clr Then sm = sm + cv End If Next FCS = sm End Function < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- こういうことかしら? Public Function UFClrCntfc(adrs, clr) Dim sm As Variant, cv As Variant, fci As Integer, ad As Range sm = 0 For Each ad In adrs fci = ad.Font.ColorIndex If fci = clr Then cv = ad.Value '処理を追加 If Not IsEmpty(cv) Then sm = sm + 1 '判定を追加 End If Next UFClrCntfc = sm End Function (白茶) 2017/10/27(金) 19:42 ---- 白茶様 早速の返信をありがとうございます。 自宅のエクセル2013でテストしたところ、 セルを空白にすると、0を返すようになりました。 月曜日に職場のエクセル2010でも試してみたいと思います。 ありがとうございました! (カレンダー) 2017/10/27(金) 20:10 ---- 気づくのが遅れて申し訳ないです。 Color関数を作った [kazu] です: 言われてみると、確かにデータなしでセルの数を数えるのは変ですね。 [白茶] さんの IsEmpty 判定を組み込みたいと思いますが、 他の回答者の方の意見はどうでしょうか? (kazu3) 2017/10/29(日) 22:08 ---- >他の回答者の方の意見はどうでしょうか? 自作関数だから自分がしたいように作ればいいだけでは? '****<ユーザー定義関数 FCR2(サンプル)>***************************************** '*【目的・仕様】:指定したセル範囲内の指定した文字の色と同じ色のデータ数を数える ' (見えない文字は数えないが、フォントを白で隠している場合は、指定を白で数える) '*【第一引数】rngTarget:数えるセル範囲 '*【第二引数】ixCollar:数える文字の色の番号 '*【第三引数】blnStr:文字データも数えるかのフラグ。省略可(デフォルトFalse)。 ' Tureで文字データも数える '*【注意事項】:サンプルの為デバッグ等は一切行っていないので、 ' 使用の際は使用する人の責任で使用すること '******************************************************************************** Function FCS2(ByRef rngTarget As Range, _ ByRef ixCollar As Long, _ Optional ByRef blnStr As Boolean = False) Dim c As Range Dim n As Long For Each c In rngTarget If Len(c.Text) > 0 Then If c.Font.ColorIndex = ixCollar Then If blnStr = True Then n = n + 1 Else If IsNumeric(c.Value) = turu Then n = n + 1 End If End If End If End If Next FCS2 = n End Function '************************************************************************************* (まっつわん) 2017/10/30(月) 10:00 ---- ちょっぴり脱線した意見とは思いますが、 定数文字列を入力しているセルを引数に指定する場合、 一部分の文字だけフォント色を変えているセルが含まれていると 「#VALUE!」が返る訳ですが、 恐らくユーザーの立場からすれば、 エラー値が返るのではなく、 そのセルを除いた計算結果は返ってきて欲しい のではないかと思います。 (白茶) 2017/10/30(月) 10:32 ---- ぁあ、 よくIf関数で "" を返してセルを空白に見せるじゃないですか。 それをCountA関数だと数えちゃいますよね? 折角自作するんだからそこは数えないようにしたいですよね。 エラー値の件もありですね^^ あと、 >セルA1をディリートで消す。そこで再計算させる 再計算も再計算って手動でやらなくていいようになるといいですね^^ 勉強してみてください^^ (まっつわん) 2017/10/30(月) 11:51 ---- お世話になっております。 職場にて本日試したところ(当然かもしれませんが) 白茶様より頂いたユーザー定義関数で、うまく動作いたしました。 短いですが、ご報告とお礼までに。 ありがとうございました。 (カレンダー) 2017/10/30(月) 19:44 ---- kazuです: 長いこと返信せず、放置して、申し訳ないです、 データが入力されているものを計数するようにColor関数を改訂しました。 2017/11/08(水) UFClr20171107をダウンロードコーナーにアップロード、公開、 Color関数のページも手直ししました。 みなさん、チャンスがあったら使ってみて下さい。 [カレンダー]さん、提案ありがとうございます、おかげで、数年間放置していたColor関数が改訂できました。 [白茶]さん、関数の提案ありがとうございます、私が気づくのが遅れたので、助かりました。 > そのセルを除いた計算結果は返ってきて欲しい この問題も何とかしたいと思っています。 [まっつわん]さん、関数の提案ありがとうございます。 > 自作関数だから自分がしたいように作ればいいだけでは? 確かにそうなのですが、みんながどう考えるか知りたかったのです、すみません。 > 再計算も再計算って手動でやらなくていいように そうなのです、これが泣き所なのです、私も何とかしたいと思っています。 みなさん、これからも [エクセルの学校] をよろしくおねがいします。 (kazu3) 2017/11/08(水) 16:37 ---- kazuです: まただいぶ日が経ってしまいましたが、 > 再計算も再計算って手動でやらなくていいように 再計算について、改めて研究してみましたが、根本的には何とかできませんでした。 そのことをまとめました↓。 Excel Color関数 再計算について http://naka1948.wordpress.com/2017/11/20/color/ (kazu3) 2017/11/20(月) 21:18