- ベストアンサー
エクセルで特定の色の数字だけ計算させることはできますか?
売上げ表内で、A社は赤、B社は青と売上げ数字が混在しています。 最終的にその月の売上げを社ごとに計算したいのですが、混在しているので、今は手計算しています。 せっかく色分けしているので、赤の数字だけを足す、 青の数字だけを足すということができれば楽なのになぁと思い質問させていただきました。 SUMIF関数などでできるのでしょうか? エクセルは2003を使用しています。 アドバイスお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 通常、関数は値しか扱えません。つまり、フォント色やセル背景色などの書式 を関数で扱うことはできません。では、どうするか? 方法は2つあります。 1. 4.0マクロ関数を使う このカテゴリー内で GET.CELL で検索すると過去に類似の質問があります。 参考にして下さい。 2. マクロ(VBA)を使う フォント色で集計を行うツールを作ってみました。お試し下さい。 【手順】 1)[Alt]+[F11]で Visual Basic Editor (以下 VBE )を起動 2)[挿入]-[標準モジュール] 3)2)で開いたスペースに以下のコードをコピー&ペースト 4)VBE を閉じる 【使い方】 [ツール]-[マクロ]-[マクロ]で実行 '以下コードです。 Sub フォント色別に数値集計() Dim rngTARGET As Range Dim rngTEMP As Range Dim DIC As Dictionary Dim rngCELL As Range Dim lngC_IDX As Long Dim dblNUM As Double Dim vntKEY As Variant Dim i As Long 'ユーザーに集計範囲を指定してもらう If TypeName(Selection) = "Range" Then Set rngTEMP = Selection Else Set rngTEMP = ActiveCell End If On Error Resume Next Set rngTARGET = Application.InputBox( _ Prompt:="フォント色別に数値を集計します。" _ & vbCrLf & "集計範囲をマウスで選択して下さい。", _ Title:="集計範囲の選択", _ Default:=rngTEMP.Address, _ Type:=8) Set rngTEMP = Nothing If rngTARGET Is Nothing Then Exit Sub On Error GoTo 0 'フォント色別に集計開始 Set DIC = CreateObject("Scripting.Dictionary") For Each rngCELL In rngTARGET With rngCELL If .Value <> "" And IsNumeric(.Value) Then lngC_IDX = .Font.ColorIndex If Not DIC.Exists(lngC_IDX) Then DIC.Add Key:=lngC_IDX, Item:=.Value Else dblNUM = .Value + DIC.Item(lngC_IDX) DIC.Item(lngC_IDX) = dblNUM End If End If End With Next rngCELL '結果出力 On Error Resume Next Set rngTARGET = Application.InputBox( _ Prompt:="集計が終了しました。結果の貼り付け先を指定して下さい", _ Title:="結果出力", _ Type:=8) If Not rngTARGET Is Nothing Then Set rngTARGET = rngTARGET.Cells(1, 1) i = 0 Application.ScreenUpdating = False For Each vntKEY In DIC.Keys With rngTARGET With .Offset(i, 0) .Font.ColorIndex = vntKEY .Value = "FONT COLOR:= " & vntKEY End With .Offset(i, 1).Value = CDbl(DIC.Item(vntKEY)) End With i = i + 1 Next vntKEY End If Terminate: On Error GoTo 0 Application.ScreenUpdating = True Set rngTARGET = Nothing Set DIC = Nothing End Sub
その他の回答 (3)
- KenKen_SP
- ベストアンサー率62% (785/1258)
#3 です。すみません。#3 のコードで、 Dim DIC As Dictionary を Dim DIC As Object に差し替えて下さい。次のような感じになります。 Sub フォント色別に数値集計() Dim rngTARGET As Range Dim rngTEMP As Range Dim DIC As Object 以下 略 開発時のなごりです、、気にしないで下さい。
- banker_U
- ベストアンサー率21% (17/78)
えーっとひょっとして、#1の人が言うのと違って、データが、A社のものなのかB社のものなのか色でしか判別できないってことですか? だったら多分マクロを使わないと無理です。 大体、そういう形式だとしたら、入力も非常に面倒だと思いますので、この機会に、#1さんの言っているような形にすることをお勧めします。 私の記憶の範囲内では、セルに設定されているフォントの色のデータを取得できる関数はなかったと思います。 マクロを組むなら比較的簡単なマクロで実現できますがやってみますか? あと、ひょっとしたら、4.0マクロ関数ってやつに何かあるかもしれません。これについては、私の知識を超えていますので、どなたかエキスパートの方よろしくお願いします。
お礼
ありがとうございます。おっしゃるとおりです。色だけの区別です。面倒なのですが、いろいろと使い続ける理由がありまして。。。 フォントの色のデータを取得できる関数はないとのことですので、関数で計算させるのは無理なのでしょうね。。。 マクロを組むというのは考えておりませんでした。 私には難しいかもしれませんが、勉強してみます。ありがとうございます。
- bec
- ベストアンサー率29% (151/507)
A社とB社とで、文字の色を変えているのでしたら、 素直にSum関数+If関数+配列で、A社、B社で条件指定して合計をとれば良いのではないでしょうか? 例) 会社名 売上 A 10 B 15 B 20 A 15 A 10 B 15 A社合計:{=SUM(IF(A2:A7="A",B2:B7))} B社合計:{=SUM(IF(A2:A7="B",B2:B7))} あと、蛇足ですが文字の色分けも条件付き書式を利用されても良いかと思います。
お礼
ありがとうございます。 A社、B社とわけて入力しているわけではなく、A社の売上げは赤色文字、B社の売上げは青色文字としているので、うまくいかないんです。 おっしゃっているような表の作り方であれば簡単にできるのですよね。。。作り変えたいのはやまやまなのですが、社から渡されている管理フォームなので勝手に変えられないので困ってます。 でも、勉強になりました。ありがとうございました。
お礼
すごい!!できました。ありがとうございます。 感激です!! これから計算がとっても楽になります。 本当に本当にありがとうございました。