Googleスプレッドシートで「行追加にも対応する」集計式の作り方

~循環参照を防ぎながら、○や★をカウントする方法~

Googleスプレッドシートでチェック表や出席簿を作成する際に、「○」や「★」といった記号の数をカウントしたいことがあります。

その際、COUNTIF 関数を使うのが一般的ですが、合計セルをデータ列の末尾に配置すると循環参照エラーが発生することがあります。

本記事では、行の追加に対応しながら、循環参照を避ける方法について解説します。


1. 一般的な方法では循環参照になる

例えば、以下のような式で「○」と「★」の数を数えるとします。

=COUNTIF(H4:H1000, "○") + COUNTIF(H4:H1000, "★")

この式は、H列の4行目から1000行目までの範囲にある「○」と「★」を数えます。

しかし、この式をH1000セルに配置してしまうと、自分自身を含む範囲を参照してしまい、循環参照エラーが発生します。

表示されるエラー例:

循環依存が検出されました。反復計算を解消するには、[ファイル] > [設定] をご確認ください。

2. INDIRECT と ROW を組み合わせて解決

この問題を解決するには、以下のように INDIRECTROW 関数を使います。

=COUNTIF(INDIRECT("H4:H" & ROW()-1), "○") + COUNTIF(INDIRECT("H4:H" & ROW()-1), "★")

この式であれば、自分の行を含まず、直上までの範囲だけを対象とするため、循環参照を防げます。


式の構造と意味

要素説明
ROW()数式を記述したセルの行番号を返します(例:H1001なら1001)
ROW()-1その1行上、つまり自分の直上の行番号を示します(例:1000)
"H4:H" & ROW()-1文字列結合により、”H4\:H1000″ という範囲指定が作られます
INDIRECT(...)この文字列を実際のセル範囲として評価します
COUNTIF(...)該当する記号(○または★)の個数を数えます

3. メリット

  • 合計セルをデータの真下に配置できる
  • 行数が増減しても柔軟に対応できる
  • 自動的に直上までのデータだけを集計するため、循環参照エラーが発生しない

4. 応用例

この方法は、他の列でも簡単に応用可能です。
たとえば、J列で同様の集計を行いたい場合は、次のように書き換えます。

=COUNTIF(INDIRECT("J4:J" & ROW()-1), "○") + COUNTIF(INDIRECT("J4:J" & ROW()-1), "★")

まとめ

Googleスプレッドシートで「○」や「★」のような記号を集計する場合、行の追加や合計セルの配置位置によっては循環参照が発生することがあります。

このような場合には、INDIRECTROW 関数を組み合わせた動的な範囲指定を用いることで、柔軟かつ安定した集計が可能になります。

スプレッドシートを定期的に更新する運用であっても、再設定不要で動作するため、汎用性の高い方法としておすすめです。

コメント

タイトルとURLをコピーしました