- ベストアンサー
文字(数字)色別に計算するには?
文字の色別に計算してくれる方法はありませんか? 例えば、同じ行や列で、青い色の数字だけを選んでオートSUM計算等をしてくれる方法です。 ご存知の方、宜しくお願いします。 これができればとっても仕事がラクになります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
結論からいうと VBAを使う方法が最も効果的だと考えられます。 しかし、VBAを使わないのであれば、 ご質問者さんのコメントを読んでいて感じたのですが、 EXCELの問題ではなくBPRの問題でしょう。 「他の人が色を塗っている」理由が 「今年いるデータ」と「来年いるデータ」を識別するためだとすると 「色を塗る」かわりに 「今年いるデータ(数値)を入れたセル」の隣の列に「1」を 「来年いるデータ(数値)を入れたセル」の隣の列に「2」を いれるというルールで表を作製することにして 数値のセルには「条件付き書式」を設定し 隣のセルに「1」が入力されると「赤」で 隣のセルに「2」が入力されると「黒」で 表示されるようにしておきます。 「1または2を入力した列」は入力後「非表示」 にしてしまいましょう。 こうすることで数値のセルについては 従来と変わらない表示になります。 作業負荷も「色を塗る」と「隣のセルに1または2を入れる」 ではそれほど差はないと考えられます。 こうしておけばご質問者が集計するときには、既に識別するための列がある訳ですから >オートフィルタで1だけ表示、2だけ表示で合計 という方法が何の作業もなく直ちに実行可能ということになります。
その他の回答 (6)
- goomania
- ベストアンサー率56% (84/149)
#5です。 すみませんテストで入力したものをそのまま回答に使用してしまい 前後のつじつまがあわなくなってしまいました。 B101に {=SUM(B1:B27*IF(WEEKDAY(A1:A27)=1,1,0))+SUM(B1:B27*IF(WEEKDAY(A1:A27)=7,1,0))} はセルの範囲が誤りです。 B101に {=SUM(B1:B100*IF(WEEKDAY(A1:A100)=1,1,0))+SUM(B1:B100*IF(WEEKDAY(A1:A100)=7,1,0))} が前段の説明と合致した正しいセルの範囲です。
お礼
数値に赤や黒の色を付ける意味は、マイナスやプラスだからということではなく、赤は今年いるデータ、黒は来年いるデータみたいな分け方です。 他の列に赤なら1、黒なら2みたいな列作って、オートフィルタで1だけ表示、2だけ表示で合計もとめたほうが無難でしょうかね…(泣
- goomania
- ベストアンサー率56% (84/149)
>例えば…赤色の数値と黒色の数値が一つの列にランダムで入っておりまして… ご質問者がお使いになっている表をお作りになったのはご質問者自身ですか? ご質問者がお使いになっている表がどのように作成されているか不明ですが、 以下のどちらでしょうか? (1)数値を入力したあと、人手で色をつけている (2)赤い数字、黒い数字は数値を入力すると 自動的に色がつくように作製されている (1)の場合 皆さんのご回答のようにVBAを使うぐらいしか思いつきません。 (2)の場合で条件付書式でフォントの色を変えている場合 #3さん、#4さんの方法でもフォントカラーを識別することが できないように思います。 しかし、自動的に色がつく条件さえわかれば ご質問者の望んでいるようなことが可能になります。 ただし、表をお作りになったのはご質問者自身でない場合 この条件を自分で調べなければなりません。 #1さんの回答は 赤い数字がマイナス、黒い数字がプラスの例だということになります。 条件がどのようなものか不明ですが、 仮に数値が赤色になる条件が○○○○○だとして >赤色なら「1」、黒色なら「2」みたいな識別する列を設けてやる という手段を自動的にやらせます。 たとえばA1からZ100まで既にデータが入っているとして B列の赤い数字だけを集計するために AA1に「=B1*(IF(○○○○○,1,0))」を入力し、 AA100までコピーします。 AA101に「=SUM(AA1:AA100)」を記述すれば合計が出ます。 同様に 数値が黒色になる条件が△△△△△だとして B列の黒い数字だけを集計するために AB1に「=B1*(IF(△△△△△,1,0))」を入力し、 AB100までコピーします。 AB101に「=SUM(AB1:AB100)」を記述すれば合計が出ます。 仮にA列には日付けが入っていてB列の数値はA列の曜日によって 色が変えられており、 土曜、日曜が赤い数字 それ以外の曜日が黒い数字で表示されるように作製されている場合 上記の例では AA1には=B1*(IF(OR(WEEKDAY(A1)=1,WEEKDAY(A1)=7),1,0)) という式を入力してコピーすることになります。 この場合、平日の合計、土日の合計が計算できることになります。 なお、AA列、AB列といった作業列を使わず配列数式を使って B101に {=SUM(B1:B27*IF(WEEKDAY(A1:A27)=1,1,0))+SUM(B1:B27*IF(WEEKDAY(A1:A27)=7,1,0))} をCTRLキーとSHFTキーを押しながらENTERを押して入力することで ({}は配列数式として入力した結果であり、括弧を入力するわけではありません) ここに土曜・日曜の合計を表示させるというテクニックもあります。
お礼
>(1)数値を入力したあと、人手で色をつけている です。 他の方が色を塗ったものを集計して1つの表にしています…。やっぱりVBAしかなさそうですねぇ…
- imogasi
- ベストアンサー率27% (4737/17069)
ツールーマクローVBEの画面の画面を出し、挿入-標準モジュールの画面で Function clr(A) clr = A.Font.ColorIndex End Function を貼り付けます。 例データ A1:A10 1 -4105 2 -4105 3 3 4 -4105 5 -4105 6 -4105 7 3 8 -4105 9 -4105 0 -4105 A3とA7のフォント色が赤になってます。 B1には =clr(A1) と入れてB10まで式を複写します。結果上記の通り。 たとえばA13に =SUMIF(B1:B10,3,A1:A10) と入れると、結果10=3+7になりました。 配列数式などで、作業列B列を使わない方法を模索しましたが失敗。 全てをVBAで計算するのも簡単ですが、>VBAはまったく知識がありません、とのことなので、VBA関連は最小限3行にしました。
お礼
すごく親切に書き込んくれてありがとうございます!! ちょっとやってみます…
- Dxak
- ベストアンサー率34% (510/1465)
> やはり他の列を設けて、赤色、黒色で識別するコード > みたいなのを追加してやるしかないのでしょうか~ 通常は、色を付けるにあたっての条件で式を組んでいきます。そちらなら複雑になっても、とりあえず標準のもので計算可能です。(ランダムなら無理ですが・・・。) とりあえず、モジュール化してみました。 標準モジュールを追加して Function usCSum(usRage As Range, _ Optional usCage As Range) As Long Dim usSum As Long Dim usObj As Range Dim usColor As Double If usCage Is Nothing Then usColor = 0 Else usColor = usCage.Font.Color End If usSum = 0 For Each usObj In usRage With usObj If .Font.Color = usColor Then usSum = usSum + usObj End If End With Next usObj usCSum = usSum End Function で =usCSum(計算したいエリア,計算した色のフォントが付いているセル) =usCSum(A1:A5,A4) 見たいな感じで計算は可能ですが、お勧めはしません。
お礼
な、なるほど…(謎
- Dxak
- ベストアンサー率34% (510/1465)
標準的に計算を実施するなら、ある程度色を付けた条件で計算をすることは#1さんのご指摘どおり可能です。 ユーザが手で色を付けたのであれば、VBAでユーザ関数化するしかないでしょうね。 VBAは、ある程度作成できますか?
お礼
VBAはまったく知識がありません…(泣 やはり他の列を設けて、赤色、黒色で識別するコードみたいなのを追加してやるしかないのでしょうか~
- merlionXX
- ベストアンサー率48% (1930/4007)
色はセルの書式設定によるものであることはご存知かと思います。 そして関数はセルに入力された数値や文字列に対するものであることもご存知かと思います。 したがって、通常のやり方ではセルの色で関数を制御することはできません。 色をつけた条件はなんでしょう? たとえばマイナスを赤、プラスを青にしたとかであれば、色ではなくその条件で計算できます。 たとえば、 =SUMIF(A1:A100,"<0",A1:A100) でA1からA100の中でマイナスのものだけを合計できます。
お礼
例えば…赤色の数値と黒色の数値が一つの列にランダムで入っておりまして… その中で、赤色の数値だけの合計を求める みたいなのをやりたいのです…(悲 赤色なら「1」、黒色なら「2」みたいな識別する列を設けてやるしかないのでしょうか?
お礼
最後までご親切にありがとうございました。 がんばります。