Srinivasは、列Aと列Bの両方にデータを持っています。列Aの対応するセルのセル形式が黄色である列Bの値を合計する必要があります。たとえば、セルA17の形式が黄色の場合、セルB17の値を合計に含める必要があります。

インターネット上(_ExcelTips_を含む)で利用可能な多数のマクロがあり、セルの色やその他の形式に基づいて条件付きの合計を行うことができます。ただし、この必要性は、問題のセルの色ではなく、1列左のセルの色であるという点で異なります。これは、次に示すように、マクロを使用して実行できます。

Function SumNextYellow(ByVal r As Range)

Dim c As Range     Dim a As Double

For Each c In r         If c.Offset(0, -1).Interior.ColorIndex = 6 Then 'Yellow             a = a + c.Value         End If     Next c     SumNextYellow = a End Function

この関数はワークシートの数式で使用でき、引数として範囲参照を受け入れます。次に、範囲内の各セルをステップスルーし、すぐ左のセルが黄色の場合、値は合計に含まれます。 (マクロで使用されるColorIndexは、Excelのバージョンでテストして、適用可能であることを確認する必要があることに注意してください。バージョンによって異なる場合があります。)

次のリストに、はるかに堅牢な例を示します。この関数は、使用する書式のサンプルを表す引数とともに、1つ以上のセル範囲を受け入れます。

Function ColorConditionSum(cSample As Excel.Range, rng As Excel.Range)

' This Function returns sum of values in rng.Columns(2) if ' corresponding cell in rng.Columns(1) is colored with sample ' color (cSample cell)



' Arguments: cSample = cell colored by sample color '            rng = cell range to be processed (2 columns)



Dim rngCol2 As Excel.Range     Dim rngConstants As Excel.Range     Dim rngFormulas As Excel.Range     Dim lColorIndex As Long     Dim MySum As Double     Dim area As Excel.Range     Dim c As Excel.Range

ColorConditionSum = False     If Not TypeOf cSample Is Excel.Range Then Exit Function '>>>     lColorIndex = cSample.Interior.ColorIndex

MySum = 0     Set rngCol2 = Nothing     If TypeOf rng Is Excel.Range Then         If rng.Columns.Count < 2 Then Exit Function '>>>         On Error Resume Next         For Each area In rng.Areas             If rngCol2 Is Nothing Then                 Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeConstants, 1)

If rngCol2 Is Nothing Then                     Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeFormulas, 1)

Else                     Set rngCol2 = Application.Union( _                         rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1))

End If             Else                 Set rngCol2 = Application.Union( _                     rngCol2, area.Columns(2).SpecialCells(xlCellTypeConstants, 1))

Set rngCol2 = Application.Union( _                     rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1))

End If         Next area

For Each area In rngCol2.Areas             For Each c In area.Cells                 With c.Offset(0, -1)

If .Interior.ColorIndex = lColorIndex Then                         MySum = MySum + c.Value                     End If                 End With             Next c         Next area     End If

ColorConditionSum = MySum End Function

ワークシートでは、この関数を次のように使用します。

=ColorConditionSum(A10, A12:B22)

この場合、A10は一致させたい内部色を持つセルであり、A12:B22は評価されるセルの範囲です。値は範囲の2番目の列から取得され、最初の列のセルでフォーマットがチェックされます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(11525)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。

Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります: