【GAS】スプレッドシートからGoogleスライドへ自動転記する方法

スプレッドシートの値をGoogleスライドへワンクリックで転記できますか?

はい。Google Apps Script(GAS)を使えば、セルの値をスライドのテキストボックスと表へまとめて転記できます。この記事では、転記先の確認とエラー対策を加えたコードを使います。

毎月の売上表から会議資料へ同じ内容を貼り直す作業は、転記漏れや入力ミスが起きやすいものです。スプレッドシートを入力元に決めておけば、資料更新をボタン1つにまとめられます。

最初は複製したGoogleスライドで試してください。
この記事のコードは1枚目のテキストボックスと表を上書きします。元に戻せるテスト用ファイルで、転記位置と書式を確認してから本番資料に使います。

目次

スプレッドシートからスライドへ自動転記する仕組み

今回作るもの

入力元は「販売成績」シート、転記先はGoogleスライドの1枚目とします。シート上のボタンを押すと、月、担当者名、4行分の販売成績をスライドへ書き込みます。

販売成績とスライドに転記ボタンを用意したスプレッドシート
要素役割
スプレッドシート月、担当者名、販売成績を一元管理する
Googleスライドテキストボックスと表を配置し、会議資料のひな型にする
Apps Scriptシートの値を読み、指定したスライド要素へ書き込む

この方法が向いている作業

月次報告、営業成績、アンケート集計など、レイアウトは同じで数値や担当者だけが変わる資料に向いています。Google公式でも、Apps Scriptの組み込みSlidesサービスを使ってプレゼンテーションを作成・変更できると案内されています。基本仕様はGoogle Slidesの拡張ガイドで確認できます。

スプレッドシートとGoogleスライドの準備

販売成績シートを作る

シート名を「販売成績」にし、A1セルへ月、D1セルへ担当者名、A3:D6へ顧客別の値を入力します。コードは表示どおりの文字列を取得するため、通貨や桁区切りなどの表示形式も転記されます。

月、担当者名、顧客別の売上と経費を入力した販売成績シート
セル範囲内容転記先
A1タイトルがmonthのテキストボックス
D1担当者名タイトルがpicのテキストボックス
A3:D6顧客名、売上、経費、粗利スライド内の最初の表の2行目以降

転記先のスライドを作る

Googleスライドの1枚目に、月と担当者名を入れるテキストボックス、見出しを含む5行4列以上の表を配置します。表の1行目は見出しとして残し、2行目以降へ販売成績を書き込みます。

月と担当者名のテキストボックスと販売成績表を配置したGoogleスライド

テキストボックスへタイトルを付ける

GASが転記先を見つけられるように、月のテキストボックスへ month、担当者名のテキストボックスへ pic というタイトルを付けます。

  1. 1対象のテキストボックスを選択し、右クリックします。
  2. 2「代替テキスト」から「高度なオプション」を開きます。
  3. 3「タイトル」欄へ month または pic を入力します。
Googleスライドのテキストボックスから代替テキスト設定を開く操作
テキストボックスのタイトル欄にmonthを入力した状態

タイトルは大文字と小文字を区別します。表が複数ある資料では、表にもタイトルを付け、Tableクラスの公式リファレンスにある getTitle() で対象を絞り込む構成にすると安全です。

Apps Scriptを起動してコードを記述

スプレッドシートに紐付くスクリプトを開く

  1. 1販売成績シートの「拡張機能」を開きます。
  2. 2「Apps Script」を選択します。
  3. 3Code.gs に次のコードを貼り付けます。
スプレッドシートの拡張機能からApps Scriptを開く操作
function transferSheetToSlides() {
  const activeBook = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = activeBook.getSheetByName('販売成績');

  if (!sheet) {
    throw new Error('販売成績シートが見つかりません。');
  }

  const month = sheet.getRange('A1').getDisplayValue();
  const person = sheet.getRange('D1').getDisplayValue();
  const salesInfo = sheet.getRange('A3:D6').getDisplayValues();

  if (!month || !person) {
    throw new Error('月または担当者名が空欄です。');
  }

  const presentationKey = 'XXXXXXXXXXXXXXXXXXXX';
  const deck = SlidesApp.openById(presentationKey);
  const pages = deck.getSlides();

  if (!pages.length) {
    throw new Error('転記先のスライドがありません。');
  }

  const page = pages[0];
  const shapes = page.getShapes();
  const monthBox = shapes.find(function (shape) {
    return shape.getTitle() === 'month';
  });
  const personBox = shapes.find(function (shape) {
    return shape.getTitle() === 'pic';
  });
  const boards = page.getTables();
  const board = boards[0];

  if (!monthBox || !personBox || !board) {
    throw new Error('転記先のテキストボックスまたは表が見つかりません。');
  }

  if (
    board.getNumRows() < salesInfo.length + 1 ||
    board.getNumColumns() < salesInfo[0].length
  ) {
    throw new Error('転記先の表は5行4列以上にしてください。');
  }

  const ui = SpreadsheetApp.getUi();
  const answer = ui.alert(
    '転記前の確認',
    'Googleスライドの1枚目を上書きします。',
    ui.ButtonSet.OK_CANCEL
  );

  if (answer !== ui.Button.OK) {
    return;
  }

  monthBox.getText().setText(month);
  personBox.getText().setText(person);

  for (let linePos = 0; linePos < salesInfo.length; linePos++) {
    for (let col = 0; col < salesInfo[linePos].length; col++) {
      board
        .getCell(linePos + 1, col)
        .getText()
        .setText(salesInfo[linePos][col]);
    }
  }

  deck.saveAndClose();
  ui.alert('Googleスライドへの転記が完了しました。');
}
Apps Scriptエディタにスライド転記コードを貼り付けて保存した状態

Googleスライドのファイルキーを入力する

コード内の XXXXXXXXXXXXXXXXXXXX を、転記先スライドのファイルキーに置き換えます。ブラウザでスライドを開き、URLの /d//edit の間にある文字列をコピーしてください。

https://docs.google.com/presentation/d/ここがファイルキー/edit

SlidesApp.openById() で編集可能なプレゼンテーションを開く現行仕様は、SlidesAppの公式リファレンスで確認できます。

コードが行っていること

  • A1D1A3:D6 の値を表示形式のまま取得する
  • 指定したGoogleスライドを開き、1枚目を転記対象にする
  • タイトルが monthpic のテキストボックスを探す
  • 転記先の表が5行4列以上あるか確認する
  • 確認ダイアログで了承されたときだけ、テキストボックスと表を上書きする

スプレッドシートに転記ボタンを設置

  1. STEP1
    図形ボタンを作る

    スプレッドシートの「挿入」から「図形描画」を開き、図形と「スライドに転記」などの文字を組み合わせて保存します。

    スプレッドシートの挿入メニューから図形描画を開く操作
    スライドに転記と書いた図形ボタンを作る画面
  2. STEP2
    スクリプトを割り当てる

    図形をクリックし、右上のメニューから「スクリプトを割り当て」を選びます。関数名 transferSheetToSlides括弧なしで入力します。

    図形ボタンのメニューからスクリプトの割り当てを選ぶ操作
    スクリプト割り当て画面に関数名を入力した状態

Google公式仕様では、図形や画像へ割り当てたスクリプトはパソコンのWebブラウザでクリックしたときだけ実行されます。スマートフォン版ではボタンとして動作しません。詳しくはGoogle公式のカスタムメニュー解説を確認してください。

初回認証とテスト転記

初回はスクリプトを承認する

初めてボタンを押すと、スプレッドシートとGoogleスライドへのアクセス承認を求められます。このシートとスクリプトを作成したGoogleアカウントを選び、表示された権限を確認して進めます。

承認画面はGoogle側の更新で変わるため、古い画面画像を追うのではなく、自分で作ったプロジェクトか、要求される権限が目的に合っているかを確認してください。現行の流れはGoogle公式の承認ガイドに掲載されています。

複製したスライドでテストする

  1. 1転記先スライドを複製し、そのファイルキーをコードへ入力します。
  2. 2販売成績シートの月、担当者名、4行分のデータを確認します。
  3. 3図形ボタンを押し、確認ダイアログで「OK」を選びます。
  4. 4スライドの月、担当者名、表の4行が正しいか確認します。
  5. 5文字があふれる場合は、スライド側の文字サイズや枠を調整します。
スプレッドシートの月と販売成績がGoogleスライドへ転記された状態

うまく転記できないとき

販売成績シートが見つからない

コードはシート名を完全一致で探します。タブ名が「販売成績」になっているか、前後に空白が入っていないかを確認してください。別の名前を使う場合は、コード内の「販売成績」も同じ名前に変更します。

テキストボックスまたは表が見つからない

月と担当者名のテキストボックスに、タイトル monthpic が設定されているか確認します。表が削除されていないか、グループ化した図形の中へ対象テキストが入っていないかも確認してください。

表は5行4列以上というエラーが出る

1行目の見出しに加え、4行分のデータを書き込むため、転記先には5行4列以上の表が必要です。扱う件数を変える場合は、シートの取得範囲とスライドの表を同時に調整します。

ボタンを押しても反応しない

スマートフォンではなく、パソコンのWebブラウザでスプレッドシートを開きます。割り当てた関数名が transferSheetToSlides になっているか、末尾に括弧を付けていないかも確認してください。

まとめ

  • 入力元のセル範囲と転記先スライドのレイアウトを先に決める
  • テキストボックスへタイトルを付けて転記先を識別する
  • スプレッドシートの値は範囲でまとめて取得する
  • 転記先の存在と表の大きさを確認してから書き込む
  • 本番資料へ使う前に、複製したスライドでテストする

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次