- ベストアンサー
再質問、赤の数字の合計と緑の数字の合計
セルE2~E17とセルI2~I17の中に赤で書かれた数字と緑で書かれた数字があります。その中で、赤で書かれたセルの合計でなく、赤で書かれた数字の合計をセルK13に。また、緑で書かれたセルの合計でなく、緑で書かれた数字の合計をK15にに表示するにはどのようにすればよいですか。よろしくお願い致します。
- みんなの回答 (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
その他の回答 (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です。 *これを、利用して計算するのが論理式演算です。 *頑張って下さい。
補足
回答ありがとうございます。参考にしてできました。 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 = ?? でわかりません よろしくお願い致します。
前回の回答は、ちと、意図していたコードではないのを誤って投稿しました。 訂正しておきます。 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)
確かに前回のコードでは集計値は求まりませんが、大筋のロジックは示されて ます。あとは応用するだけですが、お礼欄に参考にしますとありますし、ご自 分でどのようなコードを書いてみたのですか? 補足していただければ、お力になれると思います。
補足
参考にしてできましたが。 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)
前回(http://okwave.jp/kotaeru.php3?q=2327459)の回答で、 「数を数えている」部分を「数値を合計する」に変えれば出来ます。
お礼
よいヒントをいただきやっとできました。 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 とてもシンプルにできてうれしく思います。 本当にありがとうございました。