OFFSET関数 使い方

OFFSET関数 使い方 アイキャッチ画像 関数・数式

15年前、私が経理部に配属されて最初に直面した壁は、毎月の「予算実績比較表」の更新作業でした。前月までの実績データをコピーし、合計範囲を手作業で1列ずつずらしていく。この単純かつ神経を削る作業で、数値を1マス分だけ読み飛ばすというミスをし、部長報告の場で冷や汗をかいた苦い経験があります。その時、先輩社員から「これを使って自動化しなさい」と教わったのがOFFSET関数でした。この関数を理解した瞬間、私のExcel作業は「手動の苦行」から「仕組みによる自動化」へと一変しました。

  1. OFFSET関数 使い方:指定したセルから自由自在に参照範囲を動かす基本ルール
    1. 引数の役割と「基準」の選び方
    2. 行数と列数による相対的な位置指定
    3. 高さ・幅を使いこなして「面」でデータを取得する
  2. 営業部で即戦力になる売上管理表の動的集計術
    1. 月次売上の更新に合わせて集計範囲を自動拡張する
    2. 営業担当者ごとの最新3ヶ月平均を算出
    3. 特定の商談型番(A-001等)をキーにした参照範囲の絞り込み
  3. 経理部門の月次決算を効率化する予算実績比較の自動化
    1. 勘定科目ごとの月別推移表を月指定で切り替える
    2. 累計実績を算出する際の「始点固定・終点移動」のテクニック
    3. 年度更新時の参照範囲修正ミスをゼロにする仕組み
  4. 入力規則のドロップダウンリストを連動させる実務的な設定手順
    1. 部署名(総務部、経理部)を選ぶと所属社員が表示される連動リスト
    2. 空白セルを表示させないCOUNTA関数との組み合わせ
    3. メンテナンス性を高めるための「名前の定義」活用法
  5. 総務・人事で活用する勤怠管理と有給消化率の可視化
    1. 社員番号から最新の出勤記録を一行分抽出する
    2. 期間を指定して特定の週の稼働時間を抜き出す
    3. 名簿の増減に追従する動的なグラフ用ソースデータの作成
  6. 参照先が「見当たらない」と嘆く前に確認すべき数式の脆弱性
    1. #REF!エラーを回避するためのシート端の考慮
    2. 揮発性関数(Volatile Function)がもたらす再計算の重さ
    3. INDEX関数との使い分け基準はどこにあるのか
  7. Googleスプレッドシートとの挙動差とバージョン別の互換性管理
    1. Microsoft 365のスピル(動的配列)機能による恩恵
    2. スプレッドシートにおけるOFFSET関数の制限事項
    3. Excel 2016以前の環境でファイルを共有する際の注意点
  8. 集計作業の凡ミスを防ぎ生産性を高める独自の運用ルール
    1. 基準セルを決して「行・列の削除」に巻き込まない配置
    2. 数式の「検証」機能(F9キー)で動きを可視化する習慣
    3. 将来の自分に感謝されるセルのコメント管理術
  9. 実務家が教えるOFFSET関数にまつわる疑問への回答
    1. VLOOKUP関数で代用できないケースとは?
    2. 高さ・幅に0やマイナスを指定するとどうなる?
    3. 数式が複雑になりすぎた時の分解方法
  10. 明日からの実務に取り入れる3ステップ
    1. 関連記事

OFFSET関数 使い方:指定したセルから自由自在に参照範囲を動かす基本ルール

ExcelのOFFSET関数を一言で表現するなら、「基準点から指定した距離にあるデータを取得する、動的な参照ツール」です。VLOOKUP関数が特定のキーワードを探して横のデータを取ってくるのに対し、OFFSET関数は「ここから3行下、2列右の範囲を持ってくる」といった座標による指定を得意とします。実務でよく見かけるのは、データの行数が増えるたびに合計範囲を自動で広げたい、といった動的な集計シーンです。

引数の役割と「基準」の選び方

OFFSET関数の基本構文は =OFFSET(基準, 行数, 列数, [高さ], [幅]) です。最初の引数である「基準」は、地図で言うところの「現在地」に相当します。
私が社内研修で講師を務める際、必ず強調するのは「基準セルは絶対に削除されない場所を選ぶ」という点です。例えば、売上管理表のタイトル行や、A1セルのような固定された場所を基準に設定します。基準セルそのものが削除されてしまうと、数式全体が #REF! エラーとなり、集計が崩壊する原因になります。

行数と列数による相対的な位置指定

第2引数の「行数」と第3引数の「列数」は、基準セルからどれだけ移動するかを指定します。
・行数:正の数で下方向、負の数で上方向に移動
・列数:正の数で右方向、負の数で左方向に移動
研修で教えていると、初心者がつまずきやすいポイントの一つに「移動距離の数え方」があります。基準セルそのものは「0」としてカウントします。例えばA1セルを基準に、同じA列の2行目を参照したい場合の行数は「1」です。ここを「2行目だから2」と入力してしまい、データが1行分下にずれてしまうのは、実務で本当によく見かけるミスです。

高さ・幅を使いこなして「面」でデータを取得する

OFFSET関数の真骨頂は、省略可能な第4引数「高さ」と第5引数「幅」にあります。これらを指定することで、単一のセルではなく「セル範囲(面)」を参照できます。
例えば、営業部の売上集計で「直近5ヶ月分(高さ5行・幅1列)」という範囲を動的に定義する場合に使います。

OFFSET関数 使い方 - 基準セルA1から3行2列移動し、高さ5・幅1の範囲を選択している模式図
基準セルA1から3行2列移動し、高さ5・幅1の範囲を選択している模式図

ポイント: 高さや幅に「0」を指定することはできません。必ず「1」以上の数値を指定するか、省略(基準セルと同じサイズ)にする必要があります。

営業部で即戦力になる売上管理表の動的集計術

営業管理の現場では、毎日・毎週とデータが下方向に追加されていきます。このとき、集計用のSUM関数の範囲をいちいち手入力で直すのは非効率極まりない作業です。筆者の経験では、こうした手作業の積み重ねが、月末の残業を増やす最大の要因となっています。

月次売上の更新に合わせて集計範囲を自動拡張する

例えば、A列に日付、B列に売上金額、C列に営業担当者名が入った「売上管理表」を想定してください。担当者の「佐藤」さんが新しい商談結果を入力するたびに、年間の合計金額が自動で更新される仕組みを作ります。
ここで活用するのが、COUNTA関数との組み合わせです。
=SUM(OFFSET(B2, 0, 0, COUNTA(B:B)-1, 1))
この数式では、B列に入力されているデータの個数を数え、その分だけOFFSETの「高さ」を自動調整しています。これにより、データが100行になっても1000行になっても、数式を触る必要は一切ありません。

営業担当者ごとの最新3ヶ月平均を算出

「最近、鈴木さんの調子はどう?」と上司から聞かれた際、即座に「直近3ヶ月の平均売上」を提示できる仕組みは評価に繋がります。
具体的には、以下のような数式を組みます。
=AVERAGE(OFFSET(B1, COUNTA(B:B)-3, 0, 3, 1))
この構成は、全データ行数から3を引いた位置を開始点とし、そこから3行分を参照します。常に一番下にある「最新データ」を追いかけるため、分析の手間が大幅に省けます。

OFFSET関数 使い方 - 売上管理表の下部に常に最新3ヶ月の平均が表示されている画面
売上管理表の下部に常に最新3ヶ月の平均が表示されている画面

特定の商談型番(A-001等)をキーにした参照範囲の絞り込み

さらに高度な実務シナリオとして、商品型番「A-001」や「B-002」といった特定のカテゴリーが入力された場所を基準にする方法があります。MATCH関数と組み合わせることで、「型番A-001が最初に出てきた行から、5行下までの在庫数を合計する」といった処理が可能になります。
経理や在庫管理の現場では、こうした「検索と範囲取得」のセット運用が、複雑なマクロ(VBA)を組まずに実現できる強力な武器になります。

経理部門の月次決算を効率化する予算実績比較の自動化

経理の仕事において、予算と実績の比較(予実管理)は最も重要かつ神経を使う業務の一つです。特に「今月は4月〜8月までの累計を表示し、来月は4月〜9月までに切り替える」といった期間の変動対応に、OFFSET関数は絶大な威力を発揮します。

勘定科目ごとの月別推移表を月指定で切り替える

1月から12月までの実績が横方向に並んでいる表で、セルD1に「5」と入力したら5月分までのデータを、「8」と入力したら8月分までのデータを合計する仕組みを作ります。
=SUM(OFFSET(基準セル, 0, 0, 1, D1))
「幅」の引数に月数を指定するセル(D1)を参照させるのがコツです。これにより、決算報告用の資料を作成する際、セルの数値を書き換えるだけでグラフや合計値が一瞬で切り替わります。

累計実績を算出する際の「始点固定・終点移動」のテクニック

実務でよく見かける失敗あるあるに、合計範囲の「始点」まで動いてしまい、計算が合わなくなるケースがあります。
例えば「営業経費」の期首からの累計を出す場合、4月のセルは常に固定(絶対参照)し、終わりのセルだけをOFFSET関数で指定した期間分スライドさせます。
=SUM(B5:OFFSET(B5, 0, $D$1-1))
このように「コロン(:)」の右側にOFFSET関数を配置する書き方は、プロの現場でよく使われるテクニックです。

OFFSET関数 使い方 - 4月から入力した月までの累計金額が自動集計される経費精算シート
4月から入力した月までの累計金額が自動集計される経費精算シート

年度更新時の参照範囲修正ミスをゼロにする仕組み

新しい年度が始まる際、前年度のファイルをコピーして使い回すことが多いでしょう。このとき、数式内の参照範囲が「昨年度の最終行」で固定されていると、新しいデータが計算に含まれないという事故が起きます。
筆者が社内で推奨しているのは、OFFSET関数の中に「名前の定義」を組み込む方法です。「実績範囲」という名前をOFFSET関数で定義しておけば、数式をいちいち修正することなく、翌年度のデータ入力に備えることができます。

注意点: OFFSET関数は「揮発性関数」と呼ばれ、シートのどこかを編集するたびに再計算されます。数万行に及ぶ巨大なデータで多用すると、Excelの動作が重くなることがあるため、必要な箇所に絞って使用するのが実務の知恵です。

入力規則のドロップダウンリストを連動させる実務的な設定手順

「部署名を選択すると、その部署に所属する社員名だけがリストに表示される」という2段構えのドロップダウンリストを作成したいと思ったことはありませんか?これは「連動プルダウン」と呼ばれ、Excelの「入力規則」とOFFSET関数、MATCH関数を組み合わせることで実現できます。

部署名(総務部、経理部)を選ぶと所属社員が表示される連動リスト

まず、別シートに「総務部」「経理部」「営業部」という見出しを作り、その下に所属社員名を並べたリストを作成します。
入力規則の「元の値」に以下の数式を記述します。
=OFFSET(リストの基準セル, 1, MATCH(部署選択セル, 見出し範囲, 0)-1, COUNTA(対象列)-1, 1)
この数式により、選択された部署名が「見出し範囲の何番目にあるか」を判定し、その真下の範囲だけをリストとして表示させることができます。

OFFSET関数 使い方 - 部署名「経理部」を選ぶと、佐藤・田中の名前がリストに出てくる操作画面
部署名「経理部」を選ぶと、佐藤・田中の名前がリストに出てくる操作画面

空白セルを表示させないCOUNTA関数との組み合わせ

リストの中に空白が混じっていると、プルダウンメニューの下の方に何もない選択肢が出てきてしまい、見た目が美しくありません。
実務研修で教えていると、「リストの範囲を多めに取っておきたいけれど、空白は出したくない」という要望をよく受けます。ここで、OFFSET関数の「高さ」引数にCOUNTA関数を入れることで、文字が入っているセルの分だけをきっちりリスト化できます。
これにより、後から新入社員の「鈴木」さんが加わっても、リストの範囲設定をやり直す必要がなくなります。

メンテナンス性を高めるための「名前の定義」活用法

数式が長くなると、後で修正する時に解読が困難になります。
「数式」タブの「名前の定義」を開き、上記のOFFSET関数を「社員名リスト」といった名前で保存しておきましょう。入力規則の設定欄には =社員名リスト と書くだけで済むため、後任者に引き継ぐ際も「この名前の中身を見ればいいんだな」と理解してもらいやすくなります。

総務・人事で活用する勤怠管理と有給消化率の可視化

総務部門の業務においても、OFFSET関数は欠かせません。特に出勤簿や有給休暇の管理など、社員一人ひとりの時系列データを扱う場面でその威力を発揮します。

社員番号から最新の出勤記録を一行分抽出する

社員名簿(田中、佐藤、鈴木など)から、特定の社員番号を検索し、その人の「直近の退勤時刻」を抜き出したい場合です。
OFFSET関数を使えば、MATCH関数で見つけた「行」を基準に、退勤時刻が入力されている「列」を指定して値を取得できます。
=OFFSET(A1, MATCH(検索社員番号, A:A, 0)-1, 5) (5列目が退勤時刻の場合)
筆者の経験では、こうした検索と抽出を組み合わせたツールを作成することで、総務担当者のチェック作業時間を30分から3分に短縮できた事例があります。

期間を指定して特定の週の稼働時間を抜き出す

「今週の残業時間を部署全体で把握したい」といった際、カレンダー形式の表から特定の7日間分を抜き出して合計するのもOFFSET関数の得意技です。
開始日の位置をMATCH関数で特定し、OFFSETの「幅」に「7」を指定するだけで、指定した1週間分のデータが抽出されます。

名簿の増減に追従する動的なグラフ用ソースデータの作成

グラフの元データ範囲を手動で修正するのは、非常に手間のかかる作業です。
「名前の定義」にOFFSET関数を使って、データの数に合わせて伸び縮みする範囲を設定しましょう。
これにより、新しい社員が追加された瞬間、有給消化率のランキンググラフに自動で新しい棒が追加されるようになります。経営会議の資料などで「常に最新の状態」を保つためには、この仕組みが不可欠です。

OFFSET関数 使い方 - 社員数の増減に合わせてグラフの目盛りとデータが自動更新されている様子
社員数の増減に合わせてグラフの目盛りとデータが自動更新されている様子

参照先が「見当たらない」と嘆く前に確認すべき数式の脆弱性

OFFSET関数は非常に便利ですが、使いどころを間違えるとエラーの温床になります。研修講師として多くの受講生の画面を見てきましたが、共通してハマるポイントがあります。

#REF!エラーを回避するためのシート端の考慮

OFFSET関数で最も多いトラブルは「存在しないセル」を参照してしまうことです。
例えば、1行目を基準にして「-1行」と指定すると、シートの枠外に突き抜けてしまい #REF! エラーが発生します。
「経理の現場では、行の挿入や削除を頻繁に行うため、この設定ミスで集計がずれるケースをよく見かけます」。数式を組む際は、想定される移動距離がシートの最大範囲(1,048,576行など)を超えないか、あるいは上端・左端を超えないかを常に意識してください。

揮発性関数(Volatile Function)がもたらす再計算の重さ

OFFSET関数は、セルを一つ書き換えるたびに、関連がないセルであっても再計算が行われる「揮発性関数」です。
Microsoft公式ドキュメントでも、パフォーマンスへの影響について言及されています。
参照:https://support.microsoft.com/ja-jp/office/offset-%E9%96%A2%E6%95%B0-c8de19ae-dd10-4b49-a4ce-b0b425d69aa3
データ量が数万件を超えるような大型のワークシートでOFFSET関数を数百箇所に埋め込むと、スクロールすらままならないほどExcelが重くなることがあります。その場合は、後述するINDEX関数への置き換えを検討しましょう。

INDEX関数との使い分け基準はどこにあるのか

「OFFSETとINDEX、どちらを使うべきか」という論争は、Excel実務家の間でよく起こります。
・OFFSET:範囲の「サイズ(高さ・幅)」を変えたい場合に最適。
・INDEX:特定の「位置」の値を抽出したい場合に最適(計算負荷が低い)。
筆者の基準としては、動的なドロップダウンリスト作成や、合計範囲を伸び縮みさせる必要がある場合はOFFSETを使い、単なるデータ検索であればINDEX/MATCH関数を推奨しています。

Googleスプレッドシートとの挙動差とバージョン別の互換性管理

クラウドでの共同作業が増えた現在、Excelで作ったファイルをGoogleスプレッドシートにインポートして使う機会も多いでしょう。しかし、OFFSET関数に関してはいくつか注意すべき挙動の差があります。

Microsoft 365のスピル(動的配列)機能による恩恵

最新のExcel(Microsoft 365やExcel 2021以降)では、OFFSET関数で「範囲」を取得すると、自動的に隣接するセルに結果が溢れ出す「スピル」機能が働きます。
これにより、数式を一つ入力するだけで「営業部、経理部、総務部」といったリストが一気に展開されます。以前のバージョンではCtrl + Shift + Enterを押す必要があった配列数式が、より直感的に扱えるようになっています。

スプレッドシートにおけるOFFSET関数の制限事項

GoogleスプレッドシートでもOFFSET関数は同様に動作しますが、大規模なデータに対する再計算のトリガーがExcelと微妙に異なります。特に「名前の定義」の中でOFFSETを使っている場合、スプレッドシート側で正しく認識されないケースがあるため、インポート後は必ず計算結果が正しいかダブルチェックを行ってください。

Excel 2016以前の環境でファイルを共有する際の注意点

古いバージョンのExcelを使っている取引先や他部署とファイルを共有する場合、「スピル」が機能しないため、計算結果が「#VALUE!」と表示されることがあります。
互換性を重視する場合は、あまり高度な動的範囲は使わず、従来のVLOOKUPやINDEX関数を中心に構成するのが、実務上の配慮と言えます。

OFFSET関数 使い方 - 互換性チェック機能を使って古いバージョンでの動作を確認している画面
互換性チェック機能を使って古いバージョンでの動作を確認している画面

集計作業の凡ミスを防ぎ生産性を高める独自の運用ルール

15年の実務経験の中で、私は「ミスを防ぐための数式の書き方」にいくつかのマイルールを設けています。これを守るだけで、深夜の数値確認作業が激減しました。

基準セルを決して「行・列の削除」に巻き込まない配置

最も重要なのは「アンカー(基準)」の死守です。
表の左上、例えば「売上日」という見出しセルを基準にしがちですが、もしその列が不要になって削除されたら数式は全滅します。私は、表の外にある「A1」セルを基準にするか、あるいは「決して削除しない設定用シート」のセルを基準にするようにしています。

OFFSET関数 使い方 - 設定専用シートを作成し、そこからOFFSET関数で各集計表の範囲をコントロールしている構造図
設定専用シートを作成し、そこからOFFSET関数で各集計表の範囲をコントロールしている構造図

数式の「検証」機能(F9キー)で動きを可視化する習慣

数式バーの中でOFFSET関数の部分だけをドラッグして「F9」キーを押してみてください。
今、その関数が具体的に「どの範囲の、どんな値」を拾ってきているのかがプレビューされます。これを知っているだけで、デバッグのスピードは劇的に上がります。
「初心者がつまずきやすい、数式の中身がブラックボックス化する問題」は、このF9キーの活用でほぼ解決できます。

時短テク: F9キーで確認した後は、必ず「Esc」キーで戻してください。「Enter」を押すと、数式がその結果の値に固定されてしまいます。私はこれを忘れて数式を破壊したことが何度もあります。

将来の自分に感謝されるセルのコメント管理術

OFFSET関数は、後から見たときに「なぜこの数字(行数・列数)を指定したのか」が分かりにくい関数です。
セルの右クリックメニューから「コメント」または「メモ」を挿入し、「このOFFSETはD2セルの月数に合わせて合計範囲を変えるためのもの」と一言添えておきましょう。3ヶ月後の自分がメンテナンスをする際、あるいは後任者がシートを引き継ぐ際、この一言がどれほど救いになるかは言うまでもありません。

実務家が教えるOFFSET関数にまつわる疑問への回答

ここでは、社内研修や実務の現場でよく聞かれる質問について、経験に基づいた回答をまとめました。

VLOOKUP関数で代用できないケースとは?

VLOOKUPは「1つの値」を探すためのものです。対してOFFSETは「範囲そのもの」を取得できます。
例えば「特定のキーワードから右に3つ、下に10個分」といった長方形の範囲を合計したり、平均を出したりしたい場合は、VLOOKUPでは対応不可能です。こうした「面の制御」が必要な場面こそ、OFFSETの独壇場です。

高さ・幅に0やマイナスを指定するとどうなる?

結論から言うと、#VALUE! エラーになります。
「高さ」と「幅」は、取得するセル範囲のサイズを表すため、物理的に存在しない「0」や「マイナスのサイズ」は指定できません。逆に「行数」と「列数」にはマイナスを指定できます。この違いを混同しないようにしましょう。

数式が複雑になりすぎた時の分解方法

「OFFSETの中にMATCHが入って、さらにその中にCOUNTAが入っていてわけがわからない」
そんな時は、無理に1つのセルにまとめないことです。
「行数計算用」「高さ計算用」と作業用のセルを分けて作り、最終的なOFFSET関数からそれらのセルを参照するようにします。これを「数式の階段」と呼んでいます。計算のプロセスを可視化することで、ミスを見つけやすくなります。

明日からの実務に取り入れる3ステップ

OFFSET関数は、使いこなせれば「Excelの中級者」から「自動化のプロ」へとステップアップできる強力な道具です。しかし、一度にすべてを覚えようとする必要はありません。まずは以下の3ステップから始めてみてください。

1. まずは「単一セルの移動」から試す
A1セルを基準に、OFFSET(A1, 1, 1) と入力し、B2セルの値が正しく取れるかを確認する。
2. 合計範囲の「終わり」を動かしてみる
SUM(B2:OFFSET(B2, 0, 5)) のように、横方向の合計範囲を入力した数値によって変える仕組みを作ってみる。
3. 動的なドロップダウンリストに挑戦する
COUNTA関数と組み合わせて、データが増えても自動で更新されるプルダウンリストを一つ作成してみる。

「筆者の経験では、この3つをマスターするだけで、定常業務の約半分は自動化の恩恵を受けられます」。手作業で範囲を選択し直す毎月の「名もなき作業」を、今日からOFFSET関数に任せてみませんか。一度仕組みを作ってしまえば、あなたはより付加価値の高い分析業務や、定時で帰るための時間に注力できるようになるはずです。

最後に:OFFSET関数は強力ですが、万能薬ではありません。シートが重くなったらINDEX関数を検討する、基準セルは絶対削除しないなど、今回紹介したリスク管理とセットで運用することが、長く使い続けるためのコツです。

Microsoft公式サイトでの詳細な仕様確認も併せて行うことをお勧めします。
参照:https://support.microsoft.com/ja-jp/office/offset-%E9%96%A2%E6%95%B0-c8de19ae-dd10-4b49-a4ce-b0b425d69aa3

コメント

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