『記号の前の赤文字を合計したい』(bp) "赤い文字のセルだけ合計したい"を応用して、セル内に→が入っている赤い文字の前部分のみを集計したいのですが、作業列を使わずに集計する方法はあるでしょうか? ex.4000→0(赤字)   2040→0(青字)   3000(黒字) と色々な色が混在しています。 < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- 交通整理だけです。 応用したいのは (e1k) 赤い文字のセルだけ合計したい http://www.excel.studio-kazu.jp/archives/e1k/e1k.html ですか? (β) 2016/01/09(土) 17:50 ---- その通りです。 (bp) 2016/01/12(火) 09:56 ---- ・色は文字色ですか背景色ですか? ・その色は実際につけられている色ですか、条件付書式でついている色ですか? ・1つのセルに 4000→0 と 文字列で入っているのですね? ・3000 は → がないのですが、加算対象ですか?それとも加算対象外ですか? ・5000○20 といったように →以外の文字が入っていた場合も加算対象ですか? それとも加算対象外でしか? ・以下は、今回のテーマの解決に役立ちますか? Sub Test() Dim cell値 As Variant cell値 = "123→10" MsgBox Val(cell値) cell値 = "456●20" MsgBox Val(cell値) cell値 = 789 MsgBox Val(cell値) End Sub (β) 2016/01/12(火) 11:41 ---- 色は文字色で、条件付書式で設定されています。 1つのセルに文字列ではいっていて、→以外の記号はありません。 また、→が入っていない赤字は対象外です。 空欄のセルも存在しています。 記述頂いたVBAで→の前が表示されることは分かりましたが、VBA初心者のため、どの様に応用して良いかわかりません。。。 (bp) 2016/01/12(火) 14:30 ---- 条件付き書式の「条件」が分かれば、 その条件を元に集計することが出来そうです。 条件を教えてもらえませんか? (稲葉) 2016/01/12(火) 15:02 ---- K列に"失注"と入っていれば文字色を赤字にするという条件です。 よろしくお願い致します。 (bp) 2016/01/12(火) 15:07 ---- コメント書いてアップしようとしましたら、いれちがいに条件の説明があったのですが メモしましたので、以下に。 なお、提示の条件なら、容易にコード化できると思いますね。 おそらく稲葉さんから回答があると思います。 以下、書いたメモを参考までに。 条件付書式の色ということなら、これは結構面倒です。 xl2010 なら DisplayFormatの参照が可能なんですが、これは UDFの中では使えません。 ですから、きわめて面倒な判定ロジックを記述するか、あるいは、色のチェックをあきらめて(?) 条件付書式に設定されている条件(これは、bp さんがご存じだと思いますので)を、コード内で判定し その条件から設定される文字色が、どの色なのかをチェックして、加算要否を判定するロジックにすることが必要になります。 (仮にお手伝いする場合、該当のセルへの条件付書式がどんなものなのか、具体的に、正確に、網羅的に教えていただく必要があります) 文字列中に → があるかどうかは、InStr(そのセルの値, "→") の戻り値が 0(なし)、0超(あり) で判断できます。 あとは、Val関数を使えばOKかと、 なお、kazu校長先生には申し訳ないのですが、学校のライブラリーで見つけられた、このコード、 ちょっと問題があります。 もし、モジュールの先頭に Option Explictを記述していれば(記述するのが正しい方向だと思います) このコードは、コンパイルエラーの嵐になります。プロシジャで使用する変数はすべて明示的に宣言しましょう。 (β) 2016/01/12(火) 15:19 ---- 合計すべき条件がK列にあるのは判りました。値が格納されている列はどこでしょう? また、ご提示された条件では数値は整数のようですが、小数点はありますか? とりあえず、整数値で、A列にある場合の例。 Sub test() Dim i As Long Dim iAll As Long For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "K").Value = "失注" And Cells(i, "A").Value Like "*→*" Then iAll = iAll + Val(Cells(i, "A").Value) End If Next i MsgBox iAll End Sub (???) 2016/01/12(火) 15:22 ---- とりあえず、私からも。 なお、コード内で条件を直接判定していますので、引数としてのカラーインデックスは不要になります。 Function FCS(adrs As Range) Application.Volatile Dim ad As Range For Each ad In adrs If ad.EntireRow.Range("K1").Value = "失注" Then If InStr(ad.Value, "→") > 0 Then FCS = FCS + Val(ad.Value) End If End If Next End Function シート側は =FCS(A1:A10) 等。 (β) 2016/01/12(火) 15:39 ---- うまく行きました!皆様ありがとうございました。 (bp) 2016/01/12(火) 16:25 ---- お世話になっております。 新たに条件が追加になりました。 K列が失注の場合という条件が、K列がカットの場合も同じ条件になり 赤字で矢印が含まれることになりました。 ご教示頂いたVBAを自分で下記の様に変更したのですが、FCSの結果は#VALUE!になります。 どこが間違っているのでしょうか? Function FCS(adrs As Range) Application.Volatile Dim ad As Range For Each ad In adrs If ad.EntireRow.Range("K1").Value = "失注" Or EntireRow.Range("K1").Value = "カット" Then If InStr(ad.Value, "→") > 0 Then FCS = FCS + Val(ad.Value) End If End If Next End Function (bp) 2016/01/18(月) 14:54 ---- If ad.EntireRow.Range("K1").Value = "失注" Or EntireRow.Range("K1").Value = "カット" Then これを If ad.EntireRow.Range("K1").Value = "失注" Or ad.EntireRow.Range("K1").Value = "カット" Then で試してみてください。 (β) 2016/01/18(月) 14:59 ---- 無事に集計出来ました。 ありがとうございました。 (bp) 2016/01/18(月) 17:01