プロが教えるわが家の防犯対策術!

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

A 回答 (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
    • good
    • 5

#3 です。

すみません。#3 のコードで、

  Dim DIC    As Dictionary



  Dim DIC    As Object

に差し替えて下さい。次のような感じになります。

Sub フォント色別に数値集計()

  Dim rngTARGET As Range
  Dim rngTEMP  As Range
  Dim DIC    As Object

以下 略

開発時のなごりです、、気にしないで下さい。
    • good
    • 2
この回答へのお礼

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

お礼日時:2005/11/02 00:14

えーっとひょっとして、#1の人が言うのと違って、データが、A社のものなのかB社のものなのか色でしか判別できないってことですか?


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

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

お礼日時:2005/11/01 20:46

A社とB社とで、文字の色を変えているのでしたら、


素直にSum関数+If関数+配列で、A社、B社で条件指定して合計をとれば良いのではないでしょうか?

例)
会社名 売上
A10
B15
B20
A15
A10
B15

A社合計:{=SUM(IF(A2:A7="A",B2:B7))}
B社合計:{=SUM(IF(A2:A7="B",B2:B7))}

あと、蛇足ですが文字の色分けも条件付き書式を利用されても良いかと思います。
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/11/01 20:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A