Google Apps Script

【コピペでOK】GASでスプレッドシートをCSV/テキストファイルへ自動出力・エクスポートする方法

スポンサーリンク

毎週のレポート作成やデータのバックアップのために、スプレッドシートのデータを手作業でエクスポートしていませんか?
「単純作業だけど時間がかかる」「手作業だとミスが起きやすい」…そんな悩みは、Google Apps Script (GAS) を使えば解決できます。
この記事では、プログラミングが初めての方でもコピー&ペーストで使えるスクリプトと、図解付きの丁寧な手順を紹介します。
面倒なファイル出力作業を完全に自動化し、あなたの時間をもっと価値ある業務に使いましょう。


完成コード:まずはこのスクリプトをコピーしてください

時間がない方は、まず以下のコードをスクリプトエディタにコピーして、次の「5分で完了!ステップ」に進んでください。
コードの詳しい解説は後ほど行います。

/**
 * メイン関数:現在アクティブなスプレッドシートの全データをCSVとして出力します。
 */
function outputCsvFile() {
  const SCRIPT_NAME = "スプレッドシートCSV出力";

  // 【設定1】ファイルの保存先フォルダIDをスクリプトプロパティから取得
  const folderId = PropertiesService.getScriptProperties().getProperty("FOLDER_ID");
  if (!folderId) {
    // もしFOLDER_IDが設定されていなかったら、エラーを記録・通知して終了
    const errorMessage = "スクリプトプロパティに 'FOLDER_ID' が設定されていません。";
    console.error(errorMessage);
    notifyError_(SCRIPT_NAME, errorMessage);
    return;
  }

  // 【設定2】出力するファイル名(お好みで変更してください)
  const fileName = '都道府県リスト.csv';

  try {
    // 現在開いているシートを取得
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

    // データが入力されている範囲のデータを二次元配列で取得
    const values = sheet.getDataRange().getValues();

    // 取得した配列をCSV形式の文字列に変換
    const contents = values.map(row => row.join(',')).join('\n');

    // 実際にファイルを作成する関数を呼び出す
    createTextFile_(folderId, fileName, contents);

  } catch (e) {
    // 予期せぬエラーが発生した場合の通知
    console.error(e);
    notifyError_(SCRIPT_NAME, e.message, e.stack);
  }
}

/**
 * ファイル作成用の補助関数
 * @param {string} folderId - 保存先GoogleドライブのフォルダID
 * @param {string} fileName - 作成するファイル名
 * @param {string} contents - ファイルに書き込む内容
 */
function createTextFile_(folderId, fileName, contents) {  
  // 保存先のフォルダを取得
  const folder = DriveApp.getFolderById(folderId);
  
  // ファイルの中身(Blobオブジェクト)を作成
  // テキストファイルにしたい場合は 'text/csv' を 'text/plain' に変更
  const blob = Utilities.newBlob(contents, 'text/csv', fileName);

  // フォルダ内にファイルを作成
  folder.createFile(blob);
  
  // 実行ログに成功メッセージを記録
  console.log(`ファイルが正常に作成されました:${fileName}`);
}

/**
 * エラー通知用の関数
 * @param {string} scriptName - スクリプト名
 * @param {string} errorMessage - エラーメッセージ
 * @param {string} [stackTrace] - (任意)スタックトレース
 */
function notifyError_(scriptName, errorMessage, stackTrace) {
  const email = Session.getActiveUser().getEmail();
  const subject = `【GASエラー通知】${scriptName}`;
  let body = `スクリプトの実行中にエラーが発生しました。\n\nエラー内容:\n${errorMessage}`;
  if (stackTrace) {
    body += `\n\nスタックトレース:\n${stackTrace}`;
  }
  MailApp.sendEmail(email, subject, body);
}

5分で完了!スクリプトの導入と実行までの4ステップ

プログラミングが初めての方でも大丈夫。
この手順通りに進めれば、誰でも実装できます!

ステップ1:スクリプトエディタを開いてコードを貼り付ける

  1. 対象のスプレッドシートを開き、上部メニューの「拡張機能」>「Apps Script」を選択します。
  2. スクリプトエディタが開きます。元々あるコード(function myFunction() { … })をすべて削除し、上記の完成コードをそのまま貼り付けてください。
  3. 左上のフロッピーディスクアイコン💾をクリックして、プロジェクトを保存します。

ステップ2:ファイルの保存先となるGoogleドライブの「フォルダID」を確認する

次に、作成したファイルをどこに保存するかを指定します。

  1. Googleドライブで、保存先にしたいフォルダを開きます。
  2. ブラウザのアドレスバーに表示されているURLの、folders/ の後ろにある英数字の羅列が「フォルダID」です。
    これをコピーしてください。
    • 例: https://drive.google.com/drive/folders/1a2b3c4d5e6f7g8h9i0jこの場合のフォルダIDは 1a2b3c4d5e6f7g8h9i0j です。

ステップ3:スクリプトプロパティにフォルダIDを設定する

コピーしたフォルダIDをスクリプトに設定します。
コードを直接書き換えるのではなく、「スクリプトプロパティ」機能を使うことで、安全に管理できます。

  1. スクリプトエディタの左側メニューにある歯車アイコン⚙「プロジェクトの設定」をクリックします。
  2. 「スクリプト プロパティ」の項目にある「スクリプト プロパティを追加」ボタンを押します。
  3. プロパティの欄に FOLDER_ID と入力します。(※大文字・小文字を正確に
  4. の欄に、先ほどコピーしたフォルダIDを貼り付け、「スクリプト プロパティを保存」をクリックします。

ステップ4:スクリプトを実行し、承認する(初回のみ)

  1. スクリプトエディタの左側メニュー、コードアイコン<>「エディタ」に戻ります。
  2. エディタ上部の関数選択が outputCsvFile になっていることを確認し、「実行」ボタンをクリックします。
  3. 初回のみ「承認が必要です」という画面が表示されます。「権限を確認」をクリックし、ご自身のGoogleアカウントを選択してください。
  4. 「このアプリは Google で確認されていません」という警告が出ることがありますが、「詳細」をクリックし、「(プロジェクト名)(安全ではないページ)に移動」を選択して進んでください。
  5. 最後に、スプレッドシートやGoogleドライブへのアクセス許可を求められるので「許可」をクリックします。
  6. 実行が完了すると「ファイルが作成されました」というポップアップが表示され、指定したフォルダにCSVファイルが作成されているはずです。

コードの仕組みを徹底解説|何をしているかが分かると応用できる

「ただ動けば良い」だけでなく「何をしているか知りたい」という方向けに、コードのポイントを解説します。

① メイン処理 outputCsvFile() 関数

  • PropertiesService.getScriptProperties().getProperty(“FOLDER_ID”)
    • 先ほど設定したスクリプトプロパティから、FOLDER_IDの値を安全に取得します。
  • SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
    • 現在アクティブになっている(開いている)シートを対象として指定します。
  • sheet.getDataRange().getValues()
    • シート内でデータが入力されている範囲全体を自動で認識し(getDataRange)、その値を二次元配列として取得します(getValues)。
  • values.map(row => row.join(‘,’)).join(‘\n’)
    • 取得した配列データをCSV形式の文字列に変換する処理です。
      各行をカンマ(,)で結合し、さらにそれらの行を改行(\n)で結合しています。
      (ここは配列データをうまく処理するための一連の操作です。今は「便利なおまじない」のように考えていただいて大丈夫です)

② ファイル作成処理 createTextFile_() 関数

  • DriveApp.getFolderById(folderId)
    • フォルダIDを使って、Googleドライブ上の正しいフォルダを特定します。
  • Utilities.newBlob(contents, ‘text/csv’, fileName)
    • ファイルの中身となるデータ(Blobという塊)を作成しています。
      ここで’text/csv’を’text/plain’に変えれば、プレーンなテキストファイルとして出力できます。
  • folder.createFile(blob)
    • 特定したフォルダの中に、作成したBlobデータを使ってファイルを保存します。

もっと便利に!目的別カスタマイズ術5選

基本ができるようになったら、次はあなたの業務に合わせてカスタマイズしてみましょう。

応用1:ファイル名に今日の日付を自動でつける

バックアップファイルなどを管理しやすくするために、ファイル名に実行日の日付をつけます。
outputCsvFile関数内のconst fileName = …の行を、以下のように書き換えてください。

// 日付を「YYYY-MM-DD」形式で取得
const formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd");
// ファイル名に日付を連結
const fileName = `都道府県リスト_${formattedDate}.csv`;

応用2:特定のシートやセル範囲だけを出力する

シート全体ではなく、特定のデータだけを出力したい場合に使います。
outputCsvFile関数内のconst sheet = …とconst values = …の部分を書き換えます。

  • シート名で指定する場合:
// 「売上データ」という名前のシートを直接指定
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("売上データ");
  • セル範囲で指定する場合(例:A1からC10まで):
const values = sheet.getRange("A1:C10").getValues();

応用3:毎週月曜朝9時など、決まった時間に自動実行する(トリガー設定)

このスクリプトの真価は「完全自動化」です。
トリガーを使えば、あなたが何もしなくてもスクリプトが自動で実行されます。

  1. スクリプトエディタの左側メニュー、目覚まし時計アイコン⏰「トリガー」をクリックします。
  2. 右下の「トリガーを追加」ボタンを押します。
  3. 以下の通り設定し、「保存」をクリックします。
    • 実行する関数を選択: outputCsvFileイベントのソースを選択: 時間主導型時間ベースのトリガーのタイプを選択: 週タイマー曜日を選択: 毎週月曜日時刻を選択: 午前 9 時~10 時

これで、毎週月曜の朝9時台に自動でファイルが作成されるようになります。

応用4:シートに「実行ボタン」を設置してワンクリックで出力する

PCが苦手な人でも使えるように、スプレッドシート上に実行ボタンを設置しましょう。

  1. スプレッドシートのメニュー「挿入」>「図形描画」を選択します。
  2. 好きな形の図形(例:角丸長方形)を描き、中に「CSV出力」などのテキストを入力して「保存して終了」します。
  3. シート上に配置された図形の右上にある「︙」メニューをクリックし、「スクリプトを割り当て」を選択します。
  4. テキストボックスに、関数名である outputCsvFile と入力し、「OK」をクリックします。

これで、この図形をクリックするだけでスクリプトが実行されるようになります。

応用5:条件に合う行だけを絞り込んで出力する

「特定の部署の備品だけ」「ステータスが『完了』のタスクだけ」のように、条件に合うデータだけを抽出したい場合に非常に便利です。

outputCsvFile関数内のconst values = ...からconst contents = ...の部分を、以下のように書き換えてください。

// A1セルから全てのデータを取得
const allValues = sheet.getDataRange().getValues();

// 1行目のヘッダー(見出し)を抜き出しておく
const header = allValues.shift();

// JavaScriptの標準機能であるfilterを使い、条件に合う行だけを絞り込む(例:B列(2番目)が「東京都」の行)
const filteredValues = allValues.filter(row => row[1] === '東京都');

// 抜き出しておいたヘッダーを、絞り込んだデータの先頭に戻す
const finalValues = [header, ...filteredValues];

// 最終的なデータをCSV形式の文字列に変換
const contents = finalValues.map(row => row.join(',')).join('\n');

カスタマイズのポイント:

  • row[1]の1の部分が「何列目をチェックするか」の指定です。
    A列なら0、B列なら1、C列なら2…と数えます。
    (プログラミングの世界では、順番を0から数えるのが一般的です)
  • ‘東京都’の部分を、あなたが絞り込みたい文字列に変えてください。

よくあるエラーと解決策(FAQ)

Q
実行するとエラーが出る、ファイルが作成されない
A

まずは以下の点を確認してください。

  • フォルダIDは正しいですか?
    → ステップ2と3を再度確認してください。
  • スクリプトプロパティの名前は FOLDER_ID になっていますか?
    → 大文字・小文字も正確に一致させる必要があります。
  • スクリプトを保存しましたか?
    → コードを編集したら、必ず保存💾してください。
  • トリガーによる自動実行でエラーが発生した場合
    → スクリプトの実行者(あなた)に、エラー内容を知らせるメールが自動で届きます。
      メールに記載されたエラーメッセージを確認し、原因の特定にお役立てください。
Q
出力したCSVファイルがExcelで開くと文字化けしてしまう
A

これは文字コードが原因です。
特にWindowsの古いExcelで開く場合に起こりがちです。
createTextFile_関数内のconst blob = ...の行を、以下のように2行に分けて修正すると解決できます。

// Shift-JISを指定してBlobを作成
const blob = Utilities.newBlob('', 'text/csv', fileName).setDataFromString(contents, 'Shift_JIS');
Q
設定したトリガーがちゃんと動いたか確認したいのですが…
A

自動実行を設定したものの、「本当に動いているか不安」という場合は、実行履歴を確認できます。

  1. スクリプトエディタの左側メニューにある、再生ボタンに三本線が入ったようなアイコン📊「実行数」をクリックします。
  2. 過去に実行されたスクリプトの一覧が表示されます。
    「ステータス」の列が「完了」となっていれば、トリガーは正常に実行されています。
    「失敗しました」となっている場合は、エラーメールを確認してください。

まとめ:定型作業をGASに任せて、あなたの時間をもっと価値ある業務に使いましょう

この記事では、GASを使ってスプレッドシートのデータをファイルとして出力する基本から、実用的な応用テクニックまでを解説しました。

一度設定してしまえば、これまで手作業にかけていた時間を大幅に節約し、ミスをなくすことができます。
ぜひ今回のスクリプトをあなたの業務に取り入れ、面倒な定型作業から解放されてください。

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