• ベストアンサー

エクセルで特定の色の数字だけ計算させることはできますか?

売上げ表内で、A社は赤、B社は青と売上げ数字が混在しています。 最終的にその月の売上げを社ごとに計算したいのですが、混在しているので、今は手計算しています。 せっかく色分けしているので、赤の数字だけを足す、 青の数字だけを足すということができれば楽なのになぁと思い質問させていただきました。 SUMIF関数などでできるのでしょうか? エクセルは2003を使用しています。 アドバイスお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。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)
回答No.4

#3 です。すみません。#3 のコードで、   Dim DIC    As Dictionary を   Dim DIC    As Object に差し替えて下さい。次のような感じになります。 Sub フォント色別に数値集計()   Dim rngTARGET As Range   Dim rngTEMP  As Range   Dim DIC    As Object 以下 略 開発時のなごりです、、気にしないで下さい。

silkymamapapa
質問者

お礼

すごい!!できました。ありがとうございます。 感激です!! これから計算がとっても楽になります。 本当に本当にありがとうございました。

  • banker_U
  • ベストアンサー率21% (17/78)
回答No.2

えーっとひょっとして、#1の人が言うのと違って、データが、A社のものなのかB社のものなのか色でしか判別できないってことですか? だったら多分マクロを使わないと無理です。 大体、そういう形式だとしたら、入力も非常に面倒だと思いますので、この機会に、#1さんの言っているような形にすることをお勧めします。 私の記憶の範囲内では、セルに設定されているフォントの色のデータを取得できる関数はなかったと思います。 マクロを組むなら比較的簡単なマクロで実現できますがやってみますか? あと、ひょっとしたら、4.0マクロ関数ってやつに何かあるかもしれません。これについては、私の知識を超えていますので、どなたかエキスパートの方よろしくお願いします。

silkymamapapa
質問者

お礼

ありがとうございます。おっしゃるとおりです。色だけの区別です。面倒なのですが、いろいろと使い続ける理由がありまして。。。 フォントの色のデータを取得できる関数はないとのことですので、関数で計算させるのは無理なのでしょうね。。。 マクロを組むというのは考えておりませんでした。 私には難しいかもしれませんが、勉強してみます。ありがとうございます。

  • bec
  • ベストアンサー率29% (151/507)
回答No.1

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))} あと、蛇足ですが文字の色分けも条件付き書式を利用されても良いかと思います。

silkymamapapa
質問者

お礼

ありがとうございます。 A社、B社とわけて入力しているわけではなく、A社の売上げは赤色文字、B社の売上げは青色文字としているので、うまくいかないんです。 おっしゃっているような表の作り方であれば簡単にできるのですよね。。。作り変えたいのはやまやまなのですが、社から渡されている管理フォームなので勝手に変えられないので困ってます。 でも、勉強になりました。ありがとうございました。

関連するQ&A