• 作成日 : 2025年8月25日

COLUMNS関数の使い方:エクセルで範囲の列数を取得する方法

COLUMNS関数は、指定した範囲や配列の列数を返すエクセルの情報関数です。データ範囲の大きさを動的に把握したり、可変範囲での計算を自動化したりする際によく使われます。

表の構造を自動認識するマクロの作成、動的な集計範囲の設定、データ検証の自動化など、様々な場面で活用されています。本記事では、COLUMNS関数の基本的な使い方から実務での応用例、ROWS関数との組み合わせ、動的配列での活用方法、そしてよくある使用上の注意点とその対策まで、初心者にも分かりやすく解説します。

COLUMNS関数の使い方

COLUMNS関数とは

COLUMNS関数は、指定したセル範囲や配列に含まれる列の数を数値として返す関数です。この関数の最大の特徴は、範囲のサイズが変わっても自動的に列数を再計算することです。たとえば、A1:C1の範囲なら3を返し、A1:Z1の範囲なら26を返します。手動で列を数える必要がなく、特に大きな表や可変サイズのデータを扱う際に適しています。

単純に列数を知るだけでなく、他の関数と組み合わせることで、動的な数式の作成や、データ範囲の自動調整など、高度な処理が可能になります。VBAを使わずに、ワークシート関数だけで柔軟な処理を実現できる基本的な関数のひとつです。

基本構文

COLUMNS関数の構文は非常にシンプルです。

=COLUMNS(配列)

配列:列数を数えたい範囲を指定します。セル範囲、配列定数、名前付き範囲などを指定できます。

基本的な使用例

最も基本的な使用例から見ていきましょう。

=COLUMNS(A1:C1)    // 結果:3

=COLUMNS(A1:Z1)    // 結果:26

=COLUMNS(A:A)      // 結果:1(列全体を指定)

=COLUMNS(A:E)      // 結果:5(複数列全体を指定)

複数行にまたがる範囲でも、列数のみを返します。

=COLUMNS(A1:E10)   // 結果:5(行数に関係なく列数のみ)

=COLUMNS(B5:H20)   // 結果:7

配列定数での使用:

=COLUMNS({1,2,3,4,5})      // 結果:5(横方向の配列)

=COLUMNS({1;2;3;4;5})      // 結果:1(縦方向の配列)

=COLUMNS({1,2,3;4,5,6})    // 結果:3(2行3列の配列)

単一セルと複数セルの扱い

COLUMNS関数は単一セルを指定した場合も1を返します。

=COLUMNS(A1)       // 結果:1

=COLUMNS($B$5)     // 結果:1

結合セルの場合:

// A1:C1が結合されている場合

=COLUMNS(A1)   // 結果:1(結合セルは1つとして扱われる)

COLUMNS関数の利用シーン

動的な集計範囲の設定

データの列数が変動する表での合計や平均の計算に活用します。

可変列数の合計計算:

=SUM(A1:INDEX(1:1,,COLUMNS(A1:Z1)))

最終列までの平均値:

=AVERAGE(B2:INDEX(2:2,,COLUMNS($B$1:$Z$1)))

横方向の累計:

=SUM(OFFSET(A1, 0, 0, 1, COLUMNS($A$1:D1)))

データ検証と整合性チェック

複数の表の列数が一致しているか確認する場合に使用します。

=IF(COLUMNS(表1) = COLUMNS(表2), “列数一致”, “列数不一致”)

表構造の差異を確認する目的で使えます。

必要列数のチェック:

=IF(COLUMNS(データ範囲) >= 10, “処理可能”, “列数不足”)

インポートデータの検証:

=IF(COLUMNS(A1:Z1) = 26, “正常”, “データ構造エラー”)

動的な番号付けとインデックス

列番号を自動的に生成する場合に活用します。

連番の自動生成:

=COLUMNS($A$1:A1)  // 右にコピーすると1, 2, 3…と自動で増加

相対的な列位置の計算:

=COLUMNS($A$1:A1) / COLUMNS($A$1:$Z$1) * 100  // 進捗率として使用

VLOOKUP/INDEX関数での列指定

可変範囲でのデータ抽出に使用します。

最終列のデータを取得:

=INDEX(A1:Z10, 行番号, COLUMNS(A1:Z10))

動的なVLOOKUP:

=VLOOKUP(検索値, A:Z, COLUMNS(A:Z), FALSE)

配列数式での活用

複数列に対する一括処理で使用します。

全列の最大値を配列で取得:

{=MAX(OFFSET(A1, 0, COLUMN(A:E)-1, ROWS(A1:A10), 1))}

列ごとの合計を横に展開:

=SUMPRODUCT((COLUMN(A1:E10)=COLUMNS($A$1:A1))*A1:E10)

レポートの自動フォーマット

表の幅に応じた書式設定に活用します。

=IF(COLUMNS(データ範囲) > 10, “横長レイアウト”, “標準レイアウト”)

印刷範囲の自動調整:

=ADDRESS(1, COLUMN(印刷範囲)+COLUMNS(印刷範囲)-1)

または

=ADDRESS(ROW(印刷範囲), COLUMN(印刷範囲)+COLUMNS(印刷範囲)-1)

COLUMNS関数の応用・他関数との組み合わせ

ROWS関数との組み合わせ

範囲の総セル数を計算します。

総セル数 = ROWS(範囲) * COLUMNS(範囲)

=ROWS(A1:E10) * COLUMNS(A1:E10)  // 結果:50

正方形範囲の判定:

=IF(ROWS(範囲) = COLUMNS(範囲), “正方形”, “長方形”)

OFFSET関数での動的範囲作成

可変サイズの範囲を定義します。

=SUM(OFFSET(A1, 0, 0, ROWS(A:A), COLUMNS(1:1)))

拡張する範囲の定義:

=OFFSET($A$1, 0, 0, 10, COLUMNS($A:A)+追加列数)

INDIRECT関数での動的参照

列数に基づいた動的なセル参照を作成します。

=INDIRECT(“R1C” & COLUMNS(A1:E1), FALSE)  // E1を参照

最終列の列文字を取得:

=CHAR (64 + COLUMNS(A1:Z1))  // 26列目なら”Z”

COLUMN関数との使い分け

COLUMN関数は列番号、COLUMNS関数は列数を返します。

=COLUMN(C1)   // 結果:3(C列は3番目)

=COLUMNS(A1:C1)    // 結果:3(3列分)

現在位置の相対列番号:

=COLUMN() – COLUMN($A$1) + 1

条件付き書式での使用

列数に応じた動的な書式設定を行います。

条件式:=COLUMN() <= COLUMNS($A$1:$E$1)

// 指定列数以内のセルに書式を適用

TRANSPOSE関数との連携

行列変換後のサイズ確認に使用します。

変換前列数:=COLUMNS(元データ)

変換後行数:=ROWS(TRANSPOSE(元データ))

// 両者は一致する

COLUMNS関数のよくあるエラーと対策

#NAME?エラーの対処

関数名のスペルミスが原因です。

誤:=COLUMS(A1:E1)     // 「N」が抜けている

正:=COLUMNS(A1:E1)

#REF!エラーの対処

無効な範囲参照が原因です。

誤:=COLUMNS(削除されたシート!A1:E1)

対策:=IFERROR(COLUMNS(範囲), “範囲エラー”)

結合セルでの注意点

COLUMNS 関数は参照範囲に含まれる「列数」をそのまま返します。

// 例:A1:C1 を結合していても

=COLUMNS(A1:C1)   // 結果:3

※結合セルを 1 列として数えたい場合は、結合を解除するか、

=COLUMNS(A1) のように左上セルだけを参照する必要があります。

非表示列の扱い

COLUMNS関数は、非表示列も含めて列数に含まれます。

// B列が非表示でも

=COLUMNS(A1:C1)  // 結果:3

表示列のみをカウントする場合はVBAが必要

大きな範囲での性能問題

列全体を指定すると処理が重くなることがあります。

非効率:=COLUMNS(1:1048576)

効率的:=COLUMNS(A1:XFD1)  // 必要な範囲のみ指定

配列数式での注意点

旧バージョン(Ctrl+Shift+Enter が必要)

列番号が 5 列目より右にあるセルだけを合計する例

(`各範囲` は複数列を含む同サイズ範囲、`値` は合計対象の同サイズ範囲)

{=SUM( IF( (COLUMN(各範囲) – MIN(COLUMN(各範囲)) + 1) > 5, 値, 0))}

動的配列(Excel 365 以降)

同じ判定を 列抽出専用関数 CHOOSECOLS と SUM でシンプルに記述。Enter だけで確定します。

=SUM(CHOOSECOLS( 値, SEQUENCE(, COLUMNS(値)-5, 6, 1)  )) )}

動的配列(スピル)での使用

Excel 365では動的配列に対しても使用可能:

=COLUMNS(FILTER(データ, 条件))

// フィルター結果の列数を取得

COLUMNS関数で列数を把握する

COLUMNS関数は、指定範囲の列数を返すシンプルで扱いやすい関数です。

動的な集計範囲の設定、列数による整合性チェック、列番号の生成など、表の構造を基にした処理に使えます。

ROWS関数との組み合わせでセル数を計算したり、OFFSET関数やINDIRECT関数と組み合わせることで、動的な参照の設定もできます。

COLUMNS関数は、表形式データの構造を把握したり、柔軟な数式設計を行ったりするための基本的な関数です。


※ 掲載している情報は記事更新時点のものです。

※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。

関連記事