Kevinは、行の4つおきのセルを合計する数式を作成する必要があります。彼は= A6 + E6 + I6 + M6などの式を使用できることを知っていますが、ワークシートに多数の列がある場合、これは面倒になります。

この問題に取り組むにはいくつかの方法があります。 1つの方法は、ワークシートにいくつかの追加情報を追加して、合計に含めるセルを指定することです。たとえば、この例では、ワークシートの行6のセルを合計することに関心があります。行5にいくつかのインジケーターを追加できる場合、これらは数式の「トリガー」として使用できます。たとえば、合計に含める各セル(列A、E、I、Mなど)の上に数値1を入力します。次に、次のような式を使用できます。

=SUMPRODUCT(A5:X5, A6:X6)

数式は基本的に、行5と行6の値を乗算し、結果を合計します。合計する列には1しかないため、最終的な合計に含まれるのはこれらすべてです。

ワークシートにインジケーター行を追加したくない場合は、さまざまなソリューションを検討する必要があります。次のような式でSUMPRODUCT関数を使用することもできます。

=SUMPRODUCT((MOD(COLUMN(6:6),4)=1)*(6:6))

この式は、除算の余りを返すためにMOD関数に依存しています。この場合、除算されるのはセルの列番号を値4で割ったものです。これにより、0、1、2、または3のいずれかの余りが生じます。行の4つおきのセルの余りは同じになります。したがって、列A(列1とも呼ばれます)のMOD値は1になります(1を4で割ると0になり、1が残ります)、列E、I、Mなども同様です。

式は、MOD値が1であるかどうかを比較することに注意してください。そうである場合、比較はTrue(1)を返します。そうでない場合は、False(0)を返します。次に、これは6行目のセルに対して乗算されます。

最後に、SUMPRODUCTはこれらすべての乗算を合計し、目的の結果を提供します。

この数式は、6行目の4つおきのセルの合計を提供しますが、3つおきのセル、5つ目のセル、または任意の間隔の合計を提供するように簡単に変更できます。 MOD関数の4を希望の間隔に変更するだけです。

合計する4つのセルの各「クラスター」で異なるセルを選択する場合は、MOD関数で比較する値を変更するだけです。この例では、4つの各クラスターの最初のセルのみがMODが1(A、E、I、Mなど)になります。代わりに、たとえばセルCで始まる4つおきのセルを合計する場合は、比較値を1から3に変更します。なぜですか。 Cはクラスター内の3番目のセルであり、MODが3になるため、その後の4番目のセル(G、K、Oなど)も同様になります。

この一般的なルールの唯一の「落とし穴」は、各4セルクラスターの4番目のセルを合計するかどうかです。たとえば、セルD、H、L、Pなどを合計したい場合があります。この場合、4で除算するMOD演算を実行すると、余りが4になることはないため、使用される比較値は4にはなりません。代わりに、次のように、比較値は0になります。

=SUMPRODUCT((MOD(COLUMN(6:6),4)=0)*(6:6))

配列数式を使用する場合は、上記の数式に少し短いバリエーションを使用できます。

=SUM(IF(MOD(COLUMN(6:6),4)=1,6:6))

Ctrl + Shift + Enterを押して数式を入力する必要があることに注意してください。

次に、数式を中かっこ(\ {})で囲んで数式バーに表示されます。ここでは、SUMPRODUCT関数の場合と同じように、MOD除数と比較値に関する変更に関する注意事項が適用されます。

これらの公式アプローチの両方(SUMPRODUCTと配列公式)

行全体の4つおきのセルを合計します。代わりに、合計が導出されるセルを行の一部に制限する場合は、6:6(両方のインスタンス)を適切な範囲に置き換えるだけです。したがって、A6:Z6の範囲の4つおきのセルのみを合計する場合は、その範囲を数式で使用します。

この方法で多くの合計を行い、それを行の範囲だけでなく列の範囲にも適用する場合は、合計を行うためのユーザー定義関数の作成を検討することをお勧めします。次の簡単な関数でうまくいきます:

Function SumEveryFourth(MyRange As Range)

Dim x As Integer     SumEveryFourth = 0     For x = 1 To MyRange.Cells.Count         If (x Mod 4) = 1 Then             SumEveryFourth = SumEveryFourth + MyRange.Cells(x).Value         End If     Next x End Function

この関数は、渡された範囲を調べ、範囲内の最初のセルから始まる4つおきのセルを合計します。範囲内の1つおきのセルを合計する場合は、このヒントで前述したように、Ifステートメントの比較値を変更します。 (この関数ではMod演算が使用され、MODワークシート関数と同じように動作するため、各クラスターのどのセルを合計するかを決定するために同じ比較値が使用されます。)

ユーザー定義関数は、行のセルまたは列のセルのいずれかで問題なく機能します。ここに示されているように、必要な範囲を通過することを確認する必要があります:

=SumEveryFourth(C3:C57)

必要に応じて、「ステップ」値を関数に渡される変数にすることで、マクロをさらに柔軟にすることができます。この変更されたマクロを使用して、2、3、4、5などのセルごとに合計することができます。

Function SumEveryNth(MyRange As Range, N As Integer)

Dim x As Integer     SumEveryFourth = 0     For x = 1 To MyRange.Cells.Count         If (x Mod N) = 1 Then             SumEveryNth = SumEveryNth + MyRange.Cells(x).Value         End If     Next x End Function

この関数は、必要なステップ値を追加することを除いて、前の関数と同じように呼び出されます。たとえば、これにより、C3:C57の範囲の3つおきのセルが合計されます:

=SumEveryNth(C3:C57, 3)

注:

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

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

このヒント(3234)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。