• 作成日 : 2025年9月22日

スプレッドシートで別シートの内容を自動反映させるには?関数やGASを使う方法

複数のシートに散らばったデータを集約したい、別シートの更新をリアルタイムで反映させたいといったニーズは、日々の業務でよく発生します。Googleスプレッドシートでは、関数やGoogle Apps Script(GAS)を活用することで、シート間のデータ連携を自動化できます。

本記事では、基本的な関数を使った方法から、より高度なGASによる自動化まで、実務で即座に活用できる手法を詳しく解説します。手作業によるコピー&ペーストから脱却し、効率的なデータ管理を実現しましょう。

スプレッドシートで別シートの内容を自動反映させる方法

データの自動反映は、業務効率化の重要な要素です。売上データを月別シートで管理し、年間集計シートに自動反映させる、複数の部署からのデータを統合シートにまとめるなど、活用シーンは多岐にわたります。

自動反映の仕組みを構築することで、データの二重入力を防ぎ、入力ミスを削減できます。また、常に最新のデータが反映されるため、リアルタイムでの状況把握が可能になります。ここでは、技術レベルに応じて選択できる複数の方法を紹介していきます。

関数を使用する方法

スプレッドシートの標準関数を使用する方法は、プログラミング知識がなくても実装できる最も手軽な方法です。用途に応じて適切な関数を選択することで、様々なデータ連携のニーズに対応できます。

基本的な参照関数での連携

最もシンプルな方法は、セル参照を使った直接的な連携です。他のシートのデータを参照する際の基本的な記法と活用方法を解説します。

STEP1:単一セルの参照

別シートの特定のセルを参照する場合、「=シート名!セル番地」という形式を使用します。例えば、「売上データ」シートのA1セルを参照する場合は、「=売上データ!A1」と入力します。

シート名にスペースが含まれる場合は、シングルクォーテーションで囲む必要があります。「=’月次 売上’!A1」のような形式になります。この基本的な参照方法は、特定の合計値や重要な指標を別シートに表示する際に便利です。

STEP2:範囲参照の活用

複数のセルをまとめて参照する場合は、範囲指定を使用します。「=売上データ!A1:C10」のように記述することで、指定した範囲全体を参照できます。

この方法は、表形式のデータをそのまま別シートに反映させたい場合に有効です。ただし、元のシートで行や列が追加・削除された場合、参照範囲も手動で調整する必要がある点に注意が必要です。

STEP3:動的な参照の実現

INDIRECT関数を使用すると、より柔軟な参照が可能になります。例えば、「=INDIRECT(“シート”&A1&”!B2″)」のように記述すると、A1セルの値に応じて参照するシートを動的に変更できます。

この手法は、月次データのように定期的に新しいシートが追加される環境で特に有用です。シート名の一部を変数化することで、参照先を簡単に切り替えられます。

IMPORTRANGE関数による外部ファイル連携

異なるスプレッドシートファイル間でデータを連携する場合は、IMPORTRANGE関数を使用します。この関数は、別のGoogleスプレッドシートからデータを取り込む強力な機能です。

STEP1:基本的な使い方

IMPORTRANGE関数の基本構文は「=IMPORTRANGE(“スプレッドシートのURL”, “範囲”)」です。例えば、「=IMPORTRANGE(“https://docs.google.com/spreadsheets/d/xxxxx”, “Sheet1!A1:C10”)」のように記述します。

初回使用時は、データへのアクセス許可を求めるメッセージが表示されます。「アクセスを許可」をクリックすることで、データの取り込みが開始されます。

STEP2:動的な範囲指定

IMPORTRANGE関数でも動的な範囲指定が可能です。例えば、取り込む範囲を別のセルで管理することで、必要に応じて範囲を変更できます。

「=IMPORTRANGE(“URL”, CONCATENATE(A1,”!”,B1,”:”,C1))」のような形式で、A1にシート名、B1に開始セル、C1に終了セルを入力することで、柔軟な運用が可能になります。

STEP3:エラー処理の実装

IMPORTRANGE関数は、ネットワークエラーやアクセス権限の問題でエラーになることがあります。IFERROR関数と組み合わせることで、エラー時の表示を制御できます。

「=IFERROR(IMPORTRANGE(…), “データ取得エラー”)」のように記述することで、エラー発生時にユーザーフレンドリーなメッセージを表示できます。

QUERY関数を使った高度なデータ抽出

QUERY関数を使うと、SQL風の構文で抽出や集計ができます。外部シートや他ファイルのデータを扱う場合はIMPORTRANGEと組み合わせる必要があります。大量のデータから必要な情報だけを効率的に取り出す場合に最適です。

STEP1:基本的なクエリの作成

QUERY関数の基本構文は「=QUERY(データ範囲, “クエリ文字列”)」です。例えば、売上データから特定の条件に合致するデータだけを抽出する場合、以下のように記述します。

「=QUERY(売上データ!A:E, “SELECT * WHERE C > 100000”)」この例では、C列(売上金額)が10万円を超えるデータのみを抽出しています。

STEP2:複数条件での絞り込み

より複雑な条件を設定することも可能です。AND、OR、NOTなどの論理演算子を使用して、複数の条件を組み合わせられます。

「=QUERY(売上データ!A:E, “SELECT A, B, C WHERE C > 100000 AND D = ‘東京支店’ ORDER BY C DESC”)」このクエリでは、売上金額が10万円超かつ東京支店のデータを、売上金額の降順で取得しています。

STEP3:集計機能の活用

QUERY関数は集計機能も備えています。GROUP BY句を使用することで、データをグループ化して集計できます。

「=QUERY(売上データ!A:E, “SELECT D, SUM(C) GROUP BY D”)」この例では、支店別(D列)に売上金額(C列)を合計しています。月次集計や部門別集計など、様々な切り口でのデータ分析に活用できます。

ARRAYFORMULA関数での一括処理

ARRAYFORMULA関数を使用すると、配列形式でデータを処理し、複数のセルに一度に結果を反映できます。大量のデータを効率的に処理する際に威力を発揮します。

STEP1:基本的な配列処理

通常の関数では1つのセルごとに数式を入力する必要がありますが、ARRAYFORMULAを使用すると、範囲全体に対して一度に処理を適用できます。

「=ARRAYFORMULA(売上データ!A2:A100 & ” – ” & 売上データ!B2:B100)」この例では、A列とB列の値を結合して、新しい列を作成しています。100行分のデータを1つの数式で処理できるため、メンテナンスが容易になります。

STEP2:条件付き処理の実装

IF関数と組み合わせることで、条件に応じた処理を配列全体に適用できます。

「=ARRAYFORMULA(IF(売上データ!C2:C100 > 100000, “大口”, “通常”))」売上金額に応じて顧客を分類する処理を、全行に対して一括で実行しています。

STEP3:動的な範囲での活用

ARRAYFORMULA関数は、データの増減に対応する動的な処理にも適しています。COUNTA関数などと組み合わせることで、データが存在する範囲だけを処理対象にできます。

「=ARRAYFORMULA(IF(LEN(A2:A), 売上データ!A2:A * 1.1, “”))」この例では、A列にデータがある行だけに対して、10%増しの計算を適用しています。

GASを使用する方法

Google Apps Script(GAS)を使用すると、より高度で柔軟な自動化が実現できます。プログラミングの知識は必要ですが、関数では実現できない複雑な処理や、定期的な自動実行が可能になります。

GASの基本的な設定と準備

GASを使い始めるための基本的な手順と、開発環境の準備方法を説明します。

STEP1:スクリプトエディタへのアクセス

スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択すると、スクリプトエディタが開きます。ここでJavaScriptベースのコードを記述します。

初めてGASを使用する場合は、Googleアカウントでの認証が必要です。スクリプトがスプレッドシートにアクセスする権限を付与することで、データの読み書きが可能になります。

STEP2:基本的なデータ読み書き

GASでシート間のデータをコピーする基本的なコードは以下のようになります。

function copyData() {

var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘元データ’);

var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘反映先’);

var sourceData = sourceSheet.getRange(‘A1:C10’).getValues();

targetSheet.getRange(‘A1:C10’).setValues(sourceData);}

このコードは、「元データ」シートのA1:C10の範囲を「反映先」シートの同じ範囲にコピーします。

STEP3:エラーハンドリングの実装

実務で使用する場合は、エラー処理を適切に実装することが重要です。シートが存在しない場合やデータ形式が異なる場合に備えて、try-catch文を使用します。

function safeCopyData() {

try {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var sourceSheet = ss.getSheetByName(‘元データ’);

var targetSheet = ss.getSheetByName(‘反映先’);

if (!sourceSheet || !targetSheet) {

throw new Error(‘指定されたシートが見つかりません’); }

var sourceData = sourceSheet.getDataRange().getValues();

targetSheet.clear();

targetSheet.getRange(1, 1, sourceData.length, sourceData[0].length).setValues(sourceData);

} catch (e) {

SpreadsheetApp.getUi().alert(‘エラー: ‘ + e.message); }}

条件付きデータ反映の実装

GASを使用すると、複雑な条件に基づいたデータの抽出や加工が可能です。実務でよく使用される条件付き反映のパターンを紹介します。

STEP1:特定条件でのフィルタリング

売上データから特定の条件に合致するデータだけを別シートに反映する例です。

function filterAndCopy() {

var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘全データ’);

var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘抽出結果’);

var sourceData = sourceSheet.getDataRange().getValues();

var filteredData = [sourceData[0]]; // ヘッダー行を保持

for (var i = 1; i < sourceData.length; i++) {

if (sourceData[i][2] > 100000) { // 3列目(売上金額)が10万円超

filteredData.push(sourceData[i]); }}

targetSheet.clear();

targetSheet.getRange(1, 1, filteredData.length, filteredData[0].length).setValues(filteredData);}

STEP2:複数シートからのデータ統合

複数の部門別シートから、データを統合シートに集約する処理です。

function consolidateSheets() {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var targetSheet = ss.getSheetByName(‘統合データ’);

var departmentSheets = [‘営業部’, ‘開発部’, ‘管理部’];

targetSheet.clear();

var allData = [];

var isFirstSheet = true;

departmentSheets.forEach(function(sheetName) {

var sheet = ss.getSheetByName(sheetName);

if (sheet) {

var data = sheet.getDataRange().getValues();

if (isFirstSheet) {

allData = allData.concat(data); // ヘッダー含む

isFirstSheet = false;

} else {

allData = allData.concat(data.slice(1)); // ヘッダー除く}} });

if (allData.length > 0) {

targetSheet.getRange(1, 1, allData.length, allData[0].length).setValues(allData);}}

STEP3:データの加工と変換

取得したデータを加工してから反映する処理も実装できます。

function transformAndCopy() {

var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘原データ’);

var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘加工済みデータ’);

var sourceData = sourceSheet.getDataRange().getValues();

var transformedData = [];

// ヘッダー行の作成

transformedData.push([‘日付’, ‘商品名’, ‘数量’, ‘単価’, ‘売上金額’, ‘税込金額’]);

// データの加工

for (var i = 1; i < sourceData.length; i++) {

var row = sourceData[i];

var salesAmount = row[2] * row[3]; // 数量 × 単価

var taxIncluded = salesAmount * 1.1; // 税込計算

transformedData.push([

row[0], // 日付

row[1], // 商品名

row[2], // 数量

row[3], // 単価

salesAmount, // 売上金額

taxIncluded // 税込金額

]); }

targetSheet.clear();

targetSheet.getRange(1, 1, transformedData.length, transformedData[0].length).setValues(transformedData);}

トリガーによる自動実行の設定

GASの大きな利点は、トリガーを設定することで定期的な自動実行が可能になることです。時間ベースのトリガーやイベントベースのトリガーの設定方法を解説します。

STEP1:時間ベーストリガーの設定

毎日決まった時刻にデータを更新する場合の設定方法です。

function setupTimeTrigger() {

ScriptApp.newTrigger(‘dailyDataUpdate’)

.timeBased()

.everyDays(1)

.atHour(9)

.create();}

function dailyDataUpdate() {

// ここに定期実行したい処理を記述

copyData();

// 実行ログの記録

var logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘実行ログ’);

var timestamp = new Date();

logSheet.appendRow([timestamp, ‘日次更新完了’]);}

このコードでは、毎日午前9時にdailyDataUpdate関数が自動実行されます。

STEP2:編集時トリガーの実装

特定のシートが編集されたときに、自動的に他のシートを更新する仕組みです。

function onEdit(e) {

var editedSheet = e.source.getActiveSheet();

var editedRange = e.range;

// 特定のシートが編集された場合のみ処理

if (editedSheet.getName() === ‘マスターデータ’) {

updateDependentSheets();}}

function updateDependentSheets() {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var masterSheet = ss.getSheetByName(‘マスターデータ’);

var summarySheet = ss.getSheetByName(‘サマリー’);

// マスターデータの変更を反映

var masterData = masterSheet.getDataRange().getValues();

// サマリーシートの更新処理

updateSummary(summarySheet, masterData);}

STEP3:エラー通知の実装

自動実行時にエラーが発生した場合、メールで通知を受け取る仕組みを実装できます。

function executeWithErrorNotification() {

try {

// メインの処理

consolidateSheets();

} catch (error) {

// エラー発生時の処理

var recipient = ‘[email protected]’; // 受信先を明示的に指定

var subject = ‘スプレッドシート自動更新エラー’;

var body = ‘エラーが発生しました:nn’ + error.toString() + ‘nn’ +

‘ファイル: ‘ + SpreadsheetApp.getActiveSpreadsheet().getUrl();

MailApp.sendEmail(recipient, subject, body);

// エラーログの記録(無ければ作成)

var ss = SpreadsheetApp.getActiveSpreadsheet();

var errorLog = ss.getSheetByName(‘エラーログ’) || ss.insertSheet(‘エラーログ’);

errorLog.appendRow([new Date(), error.toString()]);}}

(補足:宛先をスクリプトプロパティで管理したい場合)

var RECIPIENT_KEY = ‘ERROR_NOTIFY_TO’;

function getRecipient_() {

var props = PropertiesService.getScriptProperties();

return props.getProperty(RECIPIENT_KEY) || ‘[email protected]’;}

として、

var recipient = getRecipient_();

と呼び出してください。

外部APIとの連携

GASを使用すると、外部のAPIからデータを取得して、スプレッドシートに反映することも可能です。天気情報や為替レートなど、リアルタイムデータの活用例を紹介します。

STEP1:URLフェッチでのデータ取得

外部APIからJSONデータを取得する基本的な方法です。

function fetchExternalData() {

var url = ‘https://api.example.com/data’;

var options = {

‘method’: ‘get’,

‘headers’: {

‘Authorization’: ‘Bearer YOUR_API_KEY’}};

try {

var response = UrlFetchApp.fetch(url, options);

var jsonData = JSON.parse(response.getContentText());

// データをスプレッドシートに書き込み

writeJsonToSheet(jsonData);

} catch (error) {

console.error(‘API取得エラー:’, error);}}

function writeJsonToSheet(jsonData) {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘APIデータ’);

sheet.clear();

// JSONデータを2次元配列に変換

var dataArray = [];

jsonData.forEach(function(item) {

dataArray.push([item.date, item.value, item.status]); });

if (dataArray.length > 0) {

sheet.getRange(1, 1, dataArray.length, dataArray[0].length).setValues(dataArray);}}

STEP2:定期的なデータ更新

外部データを定期的に取得して更新する仕組みの実装です。

function setupApiDataRefresh() {

// 1時間ごとにAPIデータを更新

ScriptApp.newTrigger(‘refreshApiData’)

.timeBased()

.everyHours(1)

.create();}

function refreshApiData() {

fetchExternalData();

// 最終更新時刻を記録

var infoSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘更新情報’);

var lastUpdate = new Date();

infoSheet.getRange(‘B1’).setValue(lastUpdate);

STEP3:複数ソースからのデータ統合

複数のAPIやデータソースから情報を集約する高度な実装例です。

function integrateMultipleSources() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘統合データ’);

sheet.clear();

// 複数のデータソースを定義

var dataSources = [

{name: ‘売上API’, url: ‘https://api.sales.com/data’, processor: processSalesData},

{name: ‘在庫API’, url: ‘https://api.inventory.com/data’, processor: processInventoryData},

{name: ‘顧客API’, url: ‘https://api.customers.com/data’, processor: processCustomerData}];

var allData = [];

dataSources.forEach(function(source) {

try {

var response = UrlFetchApp.fetch(source.url);

var data = JSON.parse(response.getContentText());

var processedData = source.processor(data);

allData = allData.concat(processedData);

} catch (error) {

console.error(source.name + ‘の取得に失敗:’, error);}});

// 統合データをシートに書き込み

if (allData.length > 0) {

sheet.getRange(1, 1, allData.length, allData[0].length).setValues(allData); }}

関数とGASを組み合わせて、効率的にシート連携しよう

Googleスプレッドシートで別シートの内容を自動反映する方法は、目的や扱うデータ量によって使い分けるのがポイントです。

シンプルな参照なら「=シート名!セル番地」で十分ですが、複数範囲や動的な参照にはINDIRECTが役立ちます。

外部ファイルと連携する場合はIMPORTRANGE、条件付きで抽出・集計するならQUERYが効果的です。さらに大規模なデータ統合や定期更新にはGoogle Apps Script(GAS)を使えば自動化の幅が広がります。

基本的な関数から始めて、必要に応じてGASへステップアップすることで、業務の効率化と正確性を高められるでしょう。


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

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

関連記事