【Googleスプレッドシート】Excel関数とSheets関数の互換性!動かない関数の代替手段

【Googleスプレッドシート】Excel関数とSheets関数の互換性!動かない関数の代替手段
🛡️ 超解決

ExcelからGoogleスプレッドシートに移行すると、おなじみの関数が使えず戸惑うことがあります。特にINDIRECTやOFFSETなど、一部の関数は動作が異なるか、まったく使用できません。この記事では、Excelでよく使う関数とスプレッドシートの対応関数を比較し、互換性のない関数の代替手段を詳しく解説します。これを読めば、シート間の移行がスムーズになり、関数エラーに悩まされることがなくなります。

【要点】Excel関数が動かないときの代替策

  • VLOOKUPやSUMIFSなど互換性のある関数: そのまま同じ構文で使用できます。ただし配列数式の扱いに注意が必要です。
  • INDIRECTやOFFSETなどの代替関数: QUERYやFILTER、INDEX+MATCHの組み合わせで同じ処理を実現します。
  • IMPORTRANGEやARRAYFORMULAの活用: 外部参照や配列計算を効率化するスプレッドシート独自の関数を覚えましょう。

ADVERTISEMENT

Excel関数とスプレッドシート関数の互換性の仕組み

Googleスプレッドシートは、Excelの多くの関数をサポートしていますが、すべてが完全互換というわけではありません。互換性の程度は関数の内部実装に依存し、一部の関数は引数や動作が異なったり、まったく存在しなかったりします。また、スプレッドシート独自の関数(ARRAYFORMULA、QUERY、IMPORTRANGEなど)も豊富にあり、これらを組み合わせることでExcelでは難しい処理も実現できます。互換性の問題が生じる主な原因は、再計算エンジンの違い、セル参照の解釈の差異、およびサポートされていない機能(例:CUBE関数、RTD関数)です。

例えば、ExcelのINDIRECT関数は文字列からセル参照を作成しますが、スプレッドシートでは同じINDIRECTが使用可能です。ただし、INDIRECTで他のスプレッドシートのセルを参照する場合はIMPORTRANGEと組み合わせる必要があります。また、OFFSET関数も存在しますが、パフォーマンス上の理由からFILTER関数やQUERY関数で代用することが推奨されます。これらの違いを理解しておけば、関数が動かないときの原因を特定しやすくなります。

動かないExcel関数とその代替手段

ここでは、スプレッドシートで特に問題になりやすいExcel関数と、それらを代替する方法を具体的に解説します。

INDIRECT関数の代替:QUERY関数とIMPORTRANGEの活用

ExcelのINDIRECT関数は、文字列で指定されたセル範囲を参照します。スプレッドシートでもINDIRECT関数は使えますが、他のスプレッドシートを参照する場合、INDIRECTだけではできません。代わりに、QUERY関数やIMPORTRANGE関数を使用します。例えば、別のスプレッドシートのセルを動的に参照したいときは、以下のようにします。

  1. IMPORTRANGEで外部シートを読み込む
    まず、=IMPORTRANGE(“スプレッドシートURL”, “シート名!範囲”) でデータをインポートします。初回は権限承認が必要です。
  2. QUERYで動的にフィルタリング
    読み込んだ範囲に対して、=QUERY(IMPORTRANGE(…), “select * where Col1 = ‘条件’ “) のように条件を指定します。これでINDIRECTのように文字列に基づく動的参照が実現できます。

OFFSET関数の代替:FILTER関数とINDEX関数

OFFSET関数は、基準セルから指定した行数・列数だけ移動した範囲を返します。スプレッドシートでもOFFSETは使えますが、大量に使用すると計算が遅くなるため、代わりにFILTER関数とINDEX関数の組み合わせが推奨されます。例えば、A1から5行下、3列右のセルの値を取得する場合、=INDEX(A1:Z100, 6, 4) と書くことで同じ結果を得られます。また、動的な範囲取得にはFILTER関数を使い、条件に合致するセルだけを抽出します。

  1. INDEXでオフセットを実現
    =INDEX(範囲, 行オフセット+1, 列オフセット+1) と指定します。OFFSETのように行数・列数で指定する場合は、基準セルを範囲の先頭に合わせます。
  2. FILTERで条件付き範囲を取得
    =FILTER(範囲, 条件) で、条件を満たす行だけを抽出できます。OFFSETのように開始位置から任意の高さを取る代わりに、FILTERで必要なデータのみを動的に取得します。

RAND関数の再計算制御:RANDBETWEENと設定変更

ExcelのRAND関数はシートが再計算されるたびに新しい乱数を返しますが、スプレッドシートでも同様です。ただし、再計算のタイミングが異なる場合があります。特に、RANDやRANDBETWEENは、セルの編集時やファイルを開くたびに再計算されます。これを制御するには、ファイルメニューの「設定」から「再計算」の項目を「変更時と1分ごと」などに変更します。また、乱数を固定したい場合は、値をコピーして「値のみ貼り付け」を行います。

  1. RANDBETWEENで整数乱数を生成
    =RANDBETWEEN(下限, 上限) で整数の乱数を取得します。RAND関数と同様に再計算されます。
  2. 再計算の設定を変更する
    「ファイル」→「設定」→「計算」タブで、「再計算」を「変更時のみ」にすると、手動で保存するまで乱数が更新されません。

CELL関数やINFO関数の代替:カスタム関数とスクリプト

ExcelのCELL関数はセルの書式やアドレスを取得しますが、スプレッドシートではCELL関数は限定的にしか機能しません。代わりに、ADDRESS関数やROW、COLUMN関数を使います。また、INFO関数(OS情報など)はスプレッドシートでは使用できません。これらの情報が必要な場合は、Apps Scriptでカスタム関数を作成します。例えば、現在のシート名を取得する関数は次のように記述します。

  1. 組み込み関数で代替可能なもの
    セルのアドレスを文字列で取得: =ADDRESS(ROW(), COLUMN(), 4) で相対参照形式のアドレスを返します。
  2. Apps Scriptでカスタム関数を作成
    「拡張機能」→「Apps Script」でエディタを開き、function getSheetName() { return SpreadsheetApp.getActiveSheet().getName(); } と入力します。保存後、=getSheetName() でシート名を取得できます。

CUBE関数やRTD関数:データ接続の代替

ExcelのCUBE関数(OLAPキューブ)やRTD関数(リアルタイムデータ)はスプレッドシートでは使用できません。代替として、Google Sheetsの「データコネクタ」やIMPORTRANGE、外部APIをApps Scriptで呼び出す方法があります。例えば、株価データを取得するには、=GOOGLEFINANCE関数を利用します。リアルタイムデータが必要な場合は、Apps Scriptで定期的にデータを取得しセルに書き込むスクリプトを作成します。

  1. GOOGLEFINANCE関数で金融データを取得
    =GOOGLEFINANCE(“NASDAQ:GOOG”, “price”) で現在の株価を取得できます。過去データも取得可能です。
  2. Apps Scriptで外部APIを呼び出す
    スクリプトエディタでUrlFetchApp.fetch()を使い、APIからデータを取得してセルに反映します。トリガーを設定することで定期的な更新も可能です。

互換性に関する注意点と誤解しやすいポイント

関数の互換性を正しく理解していないと、予期せぬエラーや計算ミスを招きます。以下に主な注意点をまとめます。

配列数式の入力方法の違い

Excelでは配列数式を入力する際にCtrl+Shift+Enterが必要ですが、スプレッドシートでは通常のEnterで入力します。また、スプレッドシートではARRAYFORMULA関数で明示的に配列計算をラップする必要がある場合があります。例えば、=A1:A10*B1:B10 と入力すると自動的に配列計算されますが、古いバージョンや複雑な計算ではARRAYFORMULAを使います。Excelから移行した場合、この違いに注意してください。

セル範囲の自動拡張と循環参照

スプレッドシートでは、数式が参照する範囲に新しいデータが追加されると、自動的に範囲が拡張されることがあります(例:SUM関数)。これにより意図しない計算結果になることがあります。また、循環参照があるとエラーが表示されますが、スプレッドシートでは循環参照を許容する設定がありません。必ず循環参照を解消してください。

IMPORTRANGEの権限と制限

IMPORTRANGEで他のスプレッドシートを参照する場合、初回は権限承認が必要です。また、参照先のシートが削除されたりアクセス権が変更されると、エラーが発生します。さらに、IMPORTRANGEは大量のデータをインポートするとパフォーマンスが低下するため、必要な範囲だけを指定してください。

カスタム関数の使用における注意

Apps Scriptで作成したカスタム関数は、引数が変更されない限り再計算されません。また、カスタム関数から別のスプレッドシートのデータを取得することはできません。この制限を回避するには、スクリプト内で直接IMPORTRANGEを使うことはできず、代わりにSpreadsheetApp.openById()などで開く必要があります。

ADVERTISEMENT

Excel関数とスプレッドシート関数の対応比較表

Excel関数 スプレッドシートの対応関数 互換性と注意点
VLOOKUP VLOOKUP ほぼ同じ。第4引数にFALSEを指定
INDEX+MATCH INDEX+MATCH、またはXLOOKUP XLOOKUPはスプレッドシートでも使用可能
SUMIFS SUMIFS 同じ構文、引数順序も同一
COUNTIFS COUNTIFS 同じ
INDIRECT INDIRECT(限定)、QUERY+IMPORTRANGE 外部参照はIMPORTRANGE必須
OFFSET OFFSET(非推奨)、INDEX、FILTER パフォーマンスのためINDEX/FILTER推奨
RAND RAND、RANDBETWEEN 再計算設定で制御可能
CELL ADDRESS、ROW、COLUMN 書式情報は取得不可
INFO なし(Apps Scriptで代替) OS情報等は取得不可
CUBE なし(データコネクタ) OLAPキューブは非対応
RTD なし(Apps Scriptで自作) リアルタイムデータはスクリプトで実装

まとめ

ExcelとGoogleスプレッドシートの関数互換性を理解することで、移行時のストレスを大幅に減らせます。基本の集計関数(SUMIFS、VLOOKUPなど)はそのまま使えますが、INDIRECTやOFFSETはスプレッドシート独自のQUERYやFILTERで代替可能です。また、IMPORTRANGEやARRAYFORMULAを活用すれば、複数のシートをまたいだデータ処理も効率的に行えます。どうしても互換性がない関数については、Apps Scriptでカスタム関数を作成する選択肢もあります。まずは、よく使う関数の対応表を確認し、動かなかったときは本記事で紹介した代替手段を試してみてください。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。