• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで色つきセルの数値足し算)

VBAで色つきセルの数値足し算

このQ&Aのポイント
  • VBAを使用して、色つきのセルの数値を足し算する方法について教えてください。
  • 具体的には、特定の日付(2018/3/19)の測定と書かれた列の数を、色ごとに足し算してメッセージボックスで表示したいです。
  • また、次の日(2018/3/20)の残数も色ごとに足して表示したいです。

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

ColorIndexだけでは色名が解りませんので、色名情報を作業列に持ちましょう。 添付の例ではCV列を作業列として各行の色の名前を入れておきます。 で、サンプルコードです。 Sub Sample()   nCol = Rows("2:2").Find(What:=Int(Now())).Column + 1   Set todayDic = CreateObject("Scripting.Dictionary")   Set nextDic = CreateObject("Scripting.Dictionary")   For i = 9 To Cells(Rows.Count, "CV").End(xlUp).Row     sColor = Cells(i, "CV")     nDataToday = Cells(i, nCol).Value + 0     nDataNext = Cells(i, nCol + 3).Value + 0     If Not todayDic.exists(sColor) Then       todayDic.Add sColor, nDataToday       nextDic.Add sColor, nDataNext     Else       todayDic(sColor) = todayDic(sColor) + nDataToday       nextDic(sColor) = nextDic(sColor) + nDataNext     End If   Next i   sMessToday = "本日" & vbCrLf   sMessNext = "翌日" & vbCrLf   todayKey = todayDic.keys   todayItem = todayDic.items   nextItem = nextDic.items   For j = 0 To UBound(todayKey)     sMessToday = sMessToday & todayKey(j) & todayItem(j) & "個" & vbCrLf     sMessNext = sMessNext & todayKey(j) & "残りは" & nextItem(j) & "個" & vbCrLf   Next j   MsgBox sMessToday & "------" & vbCrLf & sMessNext End Sub 手抜きコードですので、変数の宣言もしていませんし、本日の日付が無い場合、エラーになります。

yyrd0421
質問者

お礼

お礼が遅くなり申し訳ありません。 頂いたコードを試した結果目的のことが行えました。 本当にありがとうございます。

その他の回答 (1)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

Excelは色で処理を別けるのが苦手です。 この色は、塗りつぶしで付けていますか?条件付き書式ですか? 色を別ける条件があればそれも教えてください。 また、Excelのバージョンは何でしょう。

yyrd0421
質問者

補足

>この色は、塗りつぶしで付けていますか?条件付き書式ですか? 下記のコードで色を付けています。 >色を別ける条件があればそれも教えてください。 投入という列に数字が入力されると、B列の塗りつぶしの色を反映して同じ色で4日間(休日はとばす)を塗りつぶすコードです。 >Excelのバージョンは何でしょう。 2010です。 宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim myRange As Range Dim l As Long Dim Y As Long l = Target.Row Y = Cells(l, 2).Interior.Color Const ColsUnit = 4 '1日当たりの列数 Const ClearDays = 10 '空欄の時に該当行の背景色を消す日数 Const MyColor = 5287936 '背景色 With ThisWorkbook.ActiveSheet If ((Target.Column Mod ColsUnit = 1) And _ (Target.Column > 5)) Then If ((Target.Value > 0) And IsNumeric(Target.Value)) Then nCol = Target.Column + 1 nCount = 0 Do While nCount < 16 If Cells(2, nCol).Interior.ColorIndex <> 38 Then If nCount = 0 Then Set myRange = Range(Cells(Target.Row, nCol), Cells(Target.Row, nCol + 3)) Else Set myRange = Union(myRange, Range(Cells(Target.Row, nCol), Cells(Target.Row, nCol + 3))) End If nCount = nCount + 4 End If nCol = nCol + 4 Loop myRange.Interior.Color = Y Else Set myRange = _ Range(.Cells(Target.Row, Target.Column + 1), _ .Cells(Target.Row, Target.Column + (ClearDays * ColsUnit))) myRange.Interior.Pattern = xlNone End If End If End With End Sub

関連するQ&A