• ベストアンサー

再質問、赤の数字の合計と緑の数字の合計

セルE2~E17とセルI2~I17の中に赤で書かれた数字と緑で書かれた数字があります。その中で、赤で書かれたセルの合計でなく、赤で書かれた数字の合計をセルK13に。また、緑で書かれたセルの合計でなく、緑で書かれた数字の合計をK15にに表示するにはどのようにすればよいですか。よろしくお願い致します。

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

  • ベストアンサー
noname#22222
noname#22222
回答No.5

Simple is best! よって、次のようでも・・・・。 A +1 -2 +3 -4 _0 +6 実行結果は、 +=10 -=-6 Private Sub CommandButton1_Click()   Dim I As Integer   Dim V As Long   Dim P As Long   Dim N As Long   For I = 1 To 6     V = ActiveSheet.Cells(I, 1).Value     P = P + V * Abs(Sgn(V) > 0)     N = N + V * Abs(Sgn(V) < 0)   Next I   Debug.Print "+=" & P   Debug.Print "-=" & N End Sub

kkazumi
質問者

お礼

よいヒントをいただきやっとできました。 Sub 合計1_Click() Dim I As Integer Dim V As Long Dim P As Long Dim N As Long   For I = 2 To 17 V = ActiveSheet.Cells(I, 5).Value P = P + V * Abs(Sgn(V) > 0) N = N + V * Abs(Sgn(V) < 0) V = ActiveSheet.Cells(I, 9).Value P = P + V * Abs(Sgn(V) > 0) N = N + V * Abs(Sgn(V) < 0) Next I   Cells(13, 11).Value = P   Cells(15, 11).Value = N End Sub とてもシンプルにできてうれしく思います。 本当にありがとうございました。

その他の回答 (4)

noname#22222
noname#22222
回答No.4

今日から盆休みです。 よって、止むを得ず、回答そのものを示します。 A 1 2 3 4 5 6 RED=6 GREEN=15 この実行結果を得るには、以下のようなコードを書きます。 Private Sub CommandButton1_Click()   Const conRED = 3  ' RED   Const conGREEN = 50 ' 暗いGREEN   Dim I As Integer   Dim C As Integer   Dim V As Long   Dim R As Long   Dim G As Long   For I = 1 To 6     C = ActiveSheet.Cells(I, 1).Font.ColorIndex     V = ActiveSheet.Cells(I, 1).Value     R = R + V * Abs(C = conRED)     G = G + V * Abs(C = conGREEN)   Next I   Debug.Print "RED=" & R   Debug.Print "GREEN=" & G End Sub なお、 Private Sub CommandButton1_Click()   Const conRED = 3  ' RED   Const conGREEN = 50 ' 暗いGREEN   Dim I As Integer   Dim C As Integer   Dim V As Long   Dim R As Long   Dim G As Long   For I = 1 To 6     C = ActiveSheet.Cells(I, 1).Font.ColorIndex     V = ActiveSheet.Cells(I, 1).Value     If C = conRED Then       R = R + V     ElseIf C = conGREEN Then       G = G + V     End If   Next I   Debug.Print "RED=" & R   Debug.Print "GREEn=" & G End Sub と、論路式は If Then - Else 文でも書くことが出来ます。 *両者のコードが同じに見え出したら随分とコードの簡略化が進みます。 *なお、CBOOL(2=2)、ABS(CBOOL(2=2))、CBOOL(2=1)は、-1、1、0です。 *これを、利用して計算するのが論理式演算です。 *頑張って下さい。

kkazumi
質問者

補足

回答ありがとうございます。参考にしてできました。 Sub 合計_Click() Const conRED = 3 ' RED Const conGREEN = 50 ' 暗いGREEN Dim I As Integer Dim C As Integer Dim V As Long Dim R As Long Dim G As Long For I = 2 To 17 C = ActiveSheet.Cells(I, 5).Font.ColorIndex V = ActiveSheet.Cells(I, 5).Value R = R + V * Abs(C = conRED) G = G + V * Abs(C = conGREEN) C = ActiveSheet.Cells(I, 9).Font.ColorIndex V = ActiveSheet.Cells(I, 9).Value R = R + V * Abs(C = conRED) G = G + V * Abs(C = conGREEN) Next I Cells(13, 11).Value = R Cells(15, 11).Value = G End Sub しかし、セルのプロパティを [赤]+#,##0;[緑]-#,##0に設定すると計算できません。 [赤]+#,##0;[緑]-#,##0に設定して使用できるようにするにはどうすればいいのですか。 また、[赤]はConst conRED = 3 でOKですが    [緑]はConst conRED = ?? でわかりません よろしくお願い致します。

noname#22222
noname#22222
回答No.3

前回の回答は、ちと、意図していたコードではないのを誤って投稿しました。 訂正しておきます。 Private Sub CommandButton1_Click()   Const conRED = 3  ' RED   Const conGREEN = 50 ' 暗いGREEN   Dim I As Integer   Dim C As Integer   Dim R As Integer   Dim G As Integer   For I = 1 To 6     C = ActiveSheet.Cells(I, 1).Font.ColorIndex     R = R + ABS(C = conRED)     G = G + ABS(C = conGREEN)   Next I   MsgBox "RED=" & R   MsgBox "GREEn=" & G End Sub さて、A1に赤字で11と入力されている場合には、 ? ActiveSheet.Cells(1, 1).Font.ColorIndex 3 ? ActiveSheet.Cells(1, 1) 11 ? ActiveSheet.Cells(1, 1) * abs(ActiveSheet.Cells(1, 1).Font.ColorIndex = 3) 11 ? ActiveSheet.Cells(1, 1) * abs(ActiveSheet.Cells(1, 1).Font.ColorIndex = 64) 0 となることはイミディエイトウィンドウで確認することが可能です。 この場合、プログラミングコードに置換すれば、 ? C 3 ? V <ActiveSheet.Cells(1, 1)> 11 ? V * abs(C = conRED) 11 となることは、コードの対応関係から明らかです。 問題は、変数 V の宣言が Integr なのか Long なのかと言う問題が残るだけです。

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

確かに前回のコードでは集計値は求まりませんが、大筋のロジックは示されて ます。あとは応用するだけですが、お礼欄に参考にしますとありますし、ご自 分でどのようなコードを書いてみたのですか? 補足していただければ、お力になれると思います。

kkazumi
質問者

補足

参考にしてできましたが。 Sub 合計_Click() Const conRED = 3 ' RED Const conGREEN = 50 ' 暗いGREEN Dim I As Integer Dim C As Integer Dim V As Long Dim R As Long Dim G As Long For I = 2 To 17 C = ActiveSheet.Cells(I, 5).Font.ColorIndex V = ActiveSheet.Cells(I, 5).Value R = R + V * Abs(C = conRED) G = G + V * Abs(C = conGREEN) C = ActiveSheet.Cells(I, 9).Font.ColorIndex V = ActiveSheet.Cells(I, 9).Value R = R + V * Abs(C = conRED) G = G + V * Abs(C = conGREEN) Next I Cells(13, 11).Value = R Cells(15, 11).Value = G End Sub しかし、セルのプロパティを [赤]+#,##0;[緑]-#,##0に設定すると計算できません。 [赤]+#,##0;[緑]-#,##0に設定して使用できるようにするにはどうすればいいのですか。 また、[赤]はConst conRED = 3 でOKですが    [緑]はConst conRED = ?? でわかりません よろしくお願い致します。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

前回(http://okwave.jp/kotaeru.php3?q=2327459)の回答で、 「数を数えている」部分を「数値を合計する」に変えれば出来ます。

関連するQ&A