見出し画像

Googleフォーム・スプレッドシート(GAS)・Looker Studio連携チートシート


スプレッドシートの複数シートをひとつにまとめるGoogle App Script(GAS)関数

// 乱暴にすべてのシートを結合する関数
function combineSheets() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = spreadsheet.getSheets();
  var combinedSheet = spreadsheet.insertSheet();
  
  sheets.forEach(function(sheet) {
    var data = sheet.getDataRange().getValues();
    combinedSheet.getRange(combinedSheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
  });
}

スプレッドシート内の全角英数および全角スペースを半角に変換するGoogle App Script(GAS)関数

// 全角英数および空白を半角に変更
function convertFullWidthToHalfWidth() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('適用するシート名');
  var range = sheet.getDataRange();
  var values = range.getValues();

  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (typeof values[i][j] == 'string') {
        values[i][j] = values[i][j].replace(/[A-Za-z0-9]/g, function(s) {
          return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
        });
        values[i][j] = values[i][j].replace(/ /g, ' '); // 全角空白を半角に変換
      }
    }
  }

  range.setValues(values);
}

Googleフォームの回答の値とスプレッドシートの値が一致した場合、ステータスを更新し、メールアドレスを転記するGoogle App Script(GAS)関数とフォーム用のトリガ

// フォームから「フォームの回答 1」C列「コード」値が「管理用」シートのB列「コード」と同じだった場合、「管理用」シートのO列「ステータス」の値を「在庫無」、P列「Eメール」の値を「フォームの回答 1」シートのB列「メールアドレス」の値を転記する方法
function updateInventoryStatus() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSheet = ss.getSheetByName("フォームの回答 1");
  var promoSheet = ss.getSheetByName("管理用");

  // 「フォームの回答 1」シートのC列(コード)とB列(Eメール)の値を取得
  var formValues = formSheet.getRange(2, 2, formSheet.getLastRow() - 1, 2).getValues(); 
  // 「管理用」シートのB列(コード)からP列までの値を取得
  var promoValues = promoSheet.getRange(2, 2, promoSheet.getLastRow() - 1, 14).getValues(); 

  for (var i = 0; i < formValues.length; i++) {
    for (var j = 0; j < promoValues.length; j++) {
      // コードが一致するかチェック
      if (formValues[i][1] === promoValues[j][0]) { 
        // FLGのO列に「在庫無」を設定
        promoSheet.getRange(j + 2, 15).setValue("在庫無"); 
        // EメールのP列にメールアドレスを設定
        promoSheet.getRange(j + 2, 16).setValue(formValues[i][0]); 
      }
    }
  }
}
// 上記 updateInventoryStatus関数用トリガ・フォーム送信時起動
//・実行する関数を選択:updateInventoryStatus
//・デプロイ時に実行:Head
//・イベントのソースを選択:スプレッドシートから
//・イベントの種類を選択:フォーム送信時
//・エラー通知設定:毎日通知を受け取る

スプレッドシートで入力日の3営業日先を「休日カレンダー」シートから営業日のみで算出するスプレッドシート関数

※前提:「休日カレンダー」シートに土日祝、年末年始、お盆休暇など休日すべて登録済み(年間休日とイコール)

//・A2は入力日付列
//・3は3営業日後
//・休日カレンダーは年間休日すべてを含むシート(yyyy/mm/dd)
//・$A$2:$A$125は休日カレンダーの範囲
//・WORKDAYは指定された就業日数をもとに終了日を計算する関数
// https://support.google.com/docs/answer/3093059?hl=ja
//・ISBLANKは入力日付がない場合(空白)を検証
//・IF(ISBLANK(A2), "-",は入力日付が空白の場合ハイフンを表示

=IF(ISBLANK(A2), "-", WORKDAY(A2, 3, '休日カレンダー'!$A$2:$A$125))

Googleフォームの回答をスプレッドシートに記載し、別のシートの転記する場合に、回答行と転記する行がずれないようにするスプレッドシート関数

前提:回答および転記するシートの1行目がタイトルの場合(値が2行目からの場合)

//・シート名はGoogleフォーム回答用シート名
//・Cはフォーム回答用シートの参照したい列
//・ROW()は指定した行番号を返す関数で、()の値がない場合は式がある行を番号を返します。
// https://support.google.com/docs/answer/3093316?hl=ja
//・INDIRECTは文字列で指定したセル参照を返す関数
// https://support.google.com/docs/answer/3093377?hl=ja

=INDIRECT("シート名!C" & (ROW() ))
//※式を5行目に入力するとシート名シートの5行目の値が戻ります。

Googleフォームで複数の回答をスプレッドシートに記載されている内容を別のシートの転記する場合、複数の回答を改行で一つにまとめて転記するスプレッドシート関数。値がない項目は無視する。

//・ARRAYFORMULA: この関数は、通常は一つのセルでのみ機能する式を複数のセルにわたって適用するために使用されます。しかし、この場合は一つのセル内で複数の値を処理しています。
//・TEXTJOIN: この関数は、複数の文字列を指定された区切り文字で結合します。ここでは CHAR(10) (改行文字)が区切り文字として使用されており、結合される文字列は改行で分けられます。
//・CHAR(10): これは改行文字を表します。つまり、テキストを結合する際に各テキストの間に改行を挿入します。
//・TRUE: この引数は TEXTJOIN 関数で空のセルを無視するかどうかを指定します。TRUE なので、空のセルは無視されます。
//・INDIRECT("form!AE" & ROW() & ":AN" & ROW() ※上記記載

=ARRAYFORMULA(TEXTJOIN(CHAR(10), TRUE, INDIRECT("form!AE" & ROW() & ":AN" & ROW())))

スプレッドシートの日付と日付の経過日数を計算するスプレッドシート関数

//・DATEDIF(M16,N16,"D"): この関数は、セル M16 と N16 に入力された日付の差を日数で計算します。ここでの "D" は日数の差を意味します。
//・ISNA(DATEDIF(M16,N16,"D")): ISNA 関数は、指定された式が #N/A エラー(該当データなし)を返すかどうかをチェックします。この場合、DATEDIF の計算結果が #N/A エラーかどうかを確認します。
//・AND(ISNA(DATEDIF(M16,N16,"D")),DATEDIF(M16,N16,"D")=0): AND 関数は、すべての条件が真であるかどうかをチェックします。ここでは二つの条件を確認しています:DATEDIF の結果が #N/A エラーであるか、そして DATEDIF の結果が 0 であるかどうか。
//・IF(AND(...), "-", DATEDIF(M16,N16,"D")): IF 関数は、指定された条件が真(AND 関数の結果)であれば "-" を返し、そうでなければ DATEDIF の結果を返します。
//・IFERROR(..., "-"): IFERROR 関数は、式の結果がエラー(例えば無効な日付データなど)の場合に指定された値を返します。

=IFERROR(IF(AND(ISNA(DATEDIF(M16,N16,"D")),DATEDIF(M16,N16,"D")=0),"-",DATEDIF(M16,N16,"D")),"-")

Googleフォームで複数画像添付した場合の回答をスプレッドシートに記載している場合、画像ごとに項目を分けてアップロードした画像URLを転記するスプレッドシート関数

//・ARRAYFORMULA: この関数は、一つのセルに入力された式を複数のセルにわたって適用します。つまり、単一の式で範囲全体のセルに対する処理を行うことができます。
//・ISBLANK(form!AB2:AB): ISBLANK 関数は、指定されたセルが空白かどうかを確認します。この場合、form!AB2:AB の範囲(AB列の2行目から下のすべてのセル)を調べ、それぞれのセルが空白かどうかを判断します。
//・IF(ISBLANK(...), "", ...): IF 関数は、指定された条件が真であるかどうかを評価し、条件が真の場合と偽の場合に異なる結果を返します。ここでは、ISBLANK によってセルが空白と判断された場合は空の文字列("")を返し、そうでない場合は別の処理(次のステップ)を行います。
//・SPLIT(form!AB2:AB, ",", TRUE): SPLIT 関数は、指定されたテキストを区切り文字に基づいて分割します。この場合、form!AB2:AB の範囲内の各セルのテキストをカンマ(",")で分割し、分割された値を複数の隣接するセルに展開します。TRUE は分割する際に連続する区切り文字を個別の分割ポイントとして扱うことを意味します。

=ARRAYFORMULA(IF(ISBLANK(form!AB2:AB), "", SPLIT(form!AB2:AB, ",", TRUE)))

スプレッドシートのプルダウン項目変更した場合、更新日時を記載するGoogle App Script(GAS)関数

//・onEdit(e): この関数は、スプレッドシート上で任意のセルが編集された時に自動的に呼び出されます。
//・var range = e.range;: 編集されたセルの範囲(range)を取得します。
//・var sheet = range.getSheet();: 編集が行われたシートを取得します。
//・if (range.getColumn() == 35 && sheet.getName() == "シート名"): 条件をチェックしています。もし編集されたセルが35列目(AI列)であり、かつシートの名前が "シート名" である場合のみ、以下の処理が実行されます。
//・var row = range.getRow();: 編集されたセルの行番号を取得します。
//・var dateCell = sheet.getRange(row, 36);: 編集されたセルと同じ行の36列目(AJ列)のセルを取得します。
//・dateCell.setValue(new Date());: 取得したAJ列のセルに現在の日付(new Date() で生成)を設定します。

// ステータス変更で日付更新
function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  if (range.getColumn() == 35 && sheet.getName() == "シート名") { // 35 は AI 列
    var row = range.getRow();
    var dateCell = sheet.getRange(row, 36); // 36 は AJ 列
    dateCell.setValue(new Date());
  }
}

Googleフォームの回答用スプレッドシートから管理用シートに転記されたときにメール用シートに記載したメールアドレスに自動でメール配信するGoogle App Script(GAS)関数とトリガ関数

//・onFormSubmit(e): この関数は、Google フォームの送信内容が入力されたときに自動的に実行されます。e はイベントオブジェクトで、フォームの送信内容を含んでいます。
//・adminSheet と emailColumn は、スプレッドシートの "管理者マスタ" シートからメールアドレスが記載されている列(A列)のデータを取得します。・emailColumn.forEach(function(row) {...}): この部分で、取得したメールアドレスのリストを一つ一つ確認しています。
//・それぞれのメールアドレスに対して、フォームの送信内容を含むメールを送信します(MailApp.sendEmail)。
//・この例では、送信するメッセージにスプレッドシートのリンクを含めていますが、フォームの回答内容を直接メールに含めることも可能です(コメントアウトされた部分)。


// フォームエントリをメール通知する
function onFormSubmit(e) {
  // メール用シートとメールアドレスの列を定義
  var adminSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("メール用シート名");
  var emailColumn = adminSheet.getRange("A2:A").getValues(); // A列のメールアドレスを取得

  // フォームの回答内容を取得
  // var formResponse = e.values.join(", ");

  // 各メールアドレスに通知を送信
  emailColumn.forEach(function(row) {
    var emailAddress = row[0]; // メールアドレス
    if (emailAddress) { // メールアドレスが存在する場合のみ送信
      var subject = "転記用シート名";
      // var message = "スプレッドシート: " + formResponse;
      var message = '転記用シート名:\n\nhttps://docs.google.com/spreadsheets/d/XXXXX/edit?usp=sharing\n\n';
      MailApp.sendEmail(emailAddress, subject, message);
    }
  });
}
//トリガー設定機能 (setTrigger 関数)

//・この関数は、フォーム送信時に onFormSubmit 関数が実行されるようにトリガーを設定します。
//・ScriptApp.newTrigger("onFormSubmit")...create();: このコードにより、スプレッドシートにフォーム送信時のトリガーが追加されます。

function setTrigger() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger("onFormSubmit")
    .forSpreadsheet(ss)
    .onFormSubmit()
    .create();
}

Googleフォームでアップロードした画像をLooker Studioで表示する方法

REPLACE(画像1, 'https://drive.google.com/open?id=', 'https://drive.google.com/uc?export=view&id=')

//この式はLooker Studioで使用されるもので、Googleドライブにアップロードされた画像のURLをLooker Studioで表示可能な形式に変換するためのものです。
//・REPLACE関数: この関数は、指定された文字列(この場合は画像のURL)内の特定の文字列を別の文字列に置き換えます。
//・画像1: これは置換を行う元のURLが含まれるフィールド名です。この場合、Googleフォームからアップロードされた画像のURLが含まれているフィールドを指します。
//・第2の引数: 'https://drive.google.com/open?id=' この部分は、現在のURL形式であることを示します。この形式のURLは、Googleドライブに直接アクセスするためのものです。
//・第3の引数: 'https://drive.google.com/uc?export=view&id=' これは、Looker Studioで画像を表示するために必要なURL形式です。この形式に変換することで、Looker Studio内で画像が正しく表示されるようになります。
//・結果: この式は、Looker Studioが画像を表示するための正しい形式にURLを変換します。Looker Studioのデータソースとして使われるスプレッドシート内でこの式を使用し、変換されたURLを基に画像を表示させることができます。

スプレッドシートの複数シートをひとつにまとめるGoogle App Script(GAS)関数

// 乱暴にすべてのシートを結合する関数
function combineSheets() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = spreadsheet.getSheets();
  var combinedSheet = spreadsheet.insertSheet();
  
  sheets.forEach(function(sheet) {
    var data = sheet.getDataRange().getValues();
    combinedSheet.getRange(combinedSheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
  });
}

スプレッドシート内の全角英数および全角スペースを半角に変換するGoogle App Script(GAS)関数

// 全角英数および空白を半角に変更
function convertFullWidthToHalfWidth() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('適用するシート名');
  var range = sheet.getDataRange();
  var values = range.getValues();

  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (typeof values[i][j] == 'string') {
        values[i][j] = values[i][j].replace(/[A-Za-z0-9]/g, function(s) {
          return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
        });
        values[i][j] = values[i][j].replace(/ /g, ' '); // 全角空白を半角に変換
      }
    }
  }

  range.setValues(values);
}

Googleフォームの回答の値とスプレッドシートの値が一致した場合、ステータスを更新し、メールアドレスを転記するGoogle App Script(GAS)関数とフォーム用のトリガ

// フォームから「フォームの回答 1」C列「コード」値が「管理用」シートのB列「コード」と同じだった場合、「管理用」シートのO列「ステータス」の値を「在庫無」、P列「Eメール」の値を「フォームの回答 1」シートのB列「メールアドレス」の値を転記する方法
function updateInventoryStatus() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSheet = ss.getSheetByName("フォームの回答 1");
  var promoSheet = ss.getSheetByName("管理用");

  // 「フォームの回答 1」シートのC列(コード)とB列(Eメール)の値を取得
  var formValues = formSheet.getRange(2, 2, formSheet.getLastRow() - 1, 2).getValues(); 
  // 「管理用」シートのB列(コード)からP列までの値を取得
  var promoValues = promoSheet.getRange(2, 2, promoSheet.getLastRow() - 1, 14).getValues(); 

  for (var i = 0; i < formValues.length; i++) {
    for (var j = 0; j < promoValues.length; j++) {
      // コードが一致するかチェック
      if (formValues[i][1] === promoValues[j][0]) { 
        // FLGのO列に「在庫無」を設定
        promoSheet.getRange(j + 2, 15).setValue("在庫無"); 
        // EメールのP列にメールアドレスを設定
        promoSheet.getRange(j + 2, 16).setValue(formValues[i][0]); 
      }
    }
  }
}
// 上記 updateInventoryStatus関数用トリガ・フォーム送信時起動
//・実行する関数を選択:updateInventoryStatus
//・デプロイ時に実行:Head
//・イベントのソースを選択:スプレッドシートから
//・イベントの種類を選択:フォーム送信時
//・エラー通知設定:毎日通知を受け取る

スプレッドシートで入力日の3営業日先を「休日カレンダー」シートから営業日のみで算出するスプレッドシート関数

※前提:「休日カレンダー」シートに土日祝、年末年始、お盆休暇など休日すべて登録済み(年間休日とイコール)

//・A2は入力日付列
//・3は3営業日後
//・休日カレンダーは年間休日すべてを含むシート(yyyy/mm/dd)
//・$A$2:$A$125は休日カレンダーの範囲
//・WORKDAYは指定された就業日数をもとに終了日を計算する関数
// https://support.google.com/docs/answer/3093059?hl=ja
//・ISBLANKは入力日付がない場合(空白)を検証
//・IF(ISBLANK(A2), "-",は入力日付が空白の場合ハイフンを表示

=IF(ISBLANK(A2), "-", WORKDAY(A2, 3, '休日カレンダー'!$A$2:$A$125))

Googleフォームの回答をスプレッドシートに記載し、別のシートの転記する場合に、回答行と転記する行がずれないようにするスプレッドシート関数

前提:回答および転記するシートの1行目がタイトルの場合(値が2行目からの場合)

//・シート名はGoogleフォーム回答用シート名
//・Cはフォーム回答用シートの参照したい列
//・ROW()は指定した行番号を返す関数で、()の値がない場合は式がある行を番号を返します。
// https://support.google.com/docs/answer/3093316?hl=ja
//・INDIRECTは文字列で指定したセル参照を返す関数
// https://support.google.com/docs/answer/3093377?hl=ja

=INDIRECT("シート名!C" & (ROW() ))
//※式を5行目に入力するとシート名シートの5行目の値が戻ります。

Googleフォームで複数の回答をスプレッドシートに記載されている内容を別のシートの転記する場合、複数の回答を改行で一つにまとめて転記するスプレッドシート関数。値がない項目は無視する。

//・ARRAYFORMULA: この関数は、通常は一つのセルでのみ機能する式を複数のセルにわたって適用するために使用されます。しかし、この場合は一つのセル内で複数の値を処理しています。
//・TEXTJOIN: この関数は、複数の文字列を指定された区切り文字で結合します。ここでは CHAR(10) (改行文字)が区切り文字として使用されており、結合される文字列は改行で分けられます。
//・CHAR(10): これは改行文字を表します。つまり、テキストを結合する際に各テキストの間に改行を挿入します。
//・TRUE: この引数は TEXTJOIN 関数で空のセルを無視するかどうかを指定します。TRUE なので、空のセルは無視されます。
//・INDIRECT("form!AE" & ROW() & ":AN" & ROW() ※上記記載

=ARRAYFORMULA(TEXTJOIN(CHAR(10), TRUE, INDIRECT("form!AE" & ROW() & ":AN" & ROW())))

スプレッドシートの日付と日付の経過日数を計算するスプレッドシート関数

//・DATEDIF(M16,N16,"D"): この関数は、セル M16 と N16 に入力された日付の差を日数で計算します。ここでの "D" は日数の差を意味します。
//・ISNA(DATEDIF(M16,N16,"D")): ISNA 関数は、指定された式が #N/A エラー(該当データなし)を返すかどうかをチェックします。この場合、DATEDIF の計算結果が #N/A エラーかどうかを確認します。
//・AND(ISNA(DATEDIF(M16,N16,"D")),DATEDIF(M16,N16,"D")=0): AND 関数は、すべての条件が真であるかどうかをチェックします。ここでは二つの条件を確認しています:DATEDIF の結果が #N/A エラーであるか、そして DATEDIF の結果が 0 であるかどうか。
//・IF(AND(...), "-", DATEDIF(M16,N16,"D")): IF 関数は、指定された条件が真(AND 関数の結果)であれば "-" を返し、そうでなければ DATEDIF の結果を返します。
//・IFERROR(..., "-"): IFERROR 関数は、式の結果がエラー(例えば無効な日付データなど)の場合に指定された値を返します。

=IFERROR(IF(AND(ISNA(DATEDIF(M16,N16,"D")),DATEDIF(M16,N16,"D")=0),"-",DATEDIF(M16,N16,"D")),"-")

Googleフォームで複数画像添付した場合の回答をスプレッドシートに記載している場合、画像ごとに項目を分けてアップロードした画像URLを転記するスプレッドシート関数

//・ARRAYFORMULA: この関数は、一つのセルに入力された式を複数のセルにわたって適用します。つまり、単一の式で範囲全体のセルに対する処理を行うことができます。
//・ISBLANK(form!AB2:AB): ISBLANK 関数は、指定されたセルが空白かどうかを確認します。この場合、form!AB2:AB の範囲(AB列の2行目から下のすべてのセル)を調べ、それぞれのセルが空白かどうかを判断します。
//・IF(ISBLANK(...), "", ...): IF 関数は、指定された条件が真であるかどうかを評価し、条件が真の場合と偽の場合に異なる結果を返します。ここでは、ISBLANK によってセルが空白と判断された場合は空の文字列("")を返し、そうでない場合は別の処理(次のステップ)を行います。
//・SPLIT(form!AB2:AB, ",", TRUE): SPLIT 関数は、指定されたテキストを区切り文字に基づいて分割します。この場合、form!AB2:AB の範囲内の各セルのテキストをカンマ(",")で分割し、分割された値を複数の隣接するセルに展開します。TRUE は分割する際に連続する区切り文字を個別の分割ポイントとして扱うことを意味します。

=ARRAYFORMULA(IF(ISBLANK(form!AB2:AB), "", SPLIT(form!AB2:AB, ",", TRUE)))

スプレッドシートのプルダウン項目変更した場合、更新日時を記載するGoogle App Script(GAS)関数

//・onEdit(e): この関数は、スプレッドシート上で任意のセルが編集された時に自動的に呼び出されます。
//・var range = e.range;: 編集されたセルの範囲(range)を取得します。
//・var sheet = range.getSheet();: 編集が行われたシートを取得します。
//・if (range.getColumn() == 35 && sheet.getName() == "シート名"): 条件をチェックしています。もし編集されたセルが35列目(AI列)であり、かつシートの名前が "シート名" である場合のみ、以下の処理が実行されます。
//・var row = range.getRow();: 編集されたセルの行番号を取得します。
//・var dateCell = sheet.getRange(row, 36);: 編集されたセルと同じ行の36列目(AJ列)のセルを取得します。
//・dateCell.setValue(new Date());: 取得したAJ列のセルに現在の日付(new Date() で生成)を設定します。

// ステータス変更で日付更新
function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  if (range.getColumn() == 35 && sheet.getName() == "シート名") { // 35 は AI 列
    var row = range.getRow();
    var dateCell = sheet.getRange(row, 36); // 36 は AJ 列
    dateCell.setValue(new Date());
  }
}

Googleフォームの回答用スプレッドシートから管理用シートに転記されたときにメール用シートに記載したメールアドレスに自動でメール配信するGoogle App Script(GAS)関数とトリガ関数

//・onFormSubmit(e): この関数は、Google フォームの送信内容が入力されたときに自動的に実行されます。e はイベントオブジェクトで、フォームの送信内容を含んでいます。
//・adminSheet と emailColumn は、スプレッドシートの "管理者マスタ" シートからメールアドレスが記載されている列(A列)のデータを取得します。・emailColumn.forEach(function(row) {...}): この部分で、取得したメールアドレスのリストを一つ一つ確認しています。
//・それぞれのメールアドレスに対して、フォームの送信内容を含むメールを送信します(MailApp.sendEmail)。
//・この例では、送信するメッセージにスプレッドシートのリンクを含めていますが、フォームの回答内容を直接メールに含めることも可能です(コメントアウトされた部分)。


// フォームエントリをメール通知する
function onFormSubmit(e) {
  // メール用シートとメールアドレスの列を定義
  var adminSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("メール用シート名");
  var emailColumn = adminSheet.getRange("A2:A").getValues(); // A列のメールアドレスを取得

  // フォームの回答内容を取得
  // var formResponse = e.values.join(", ");

  // 各メールアドレスに通知を送信
  emailColumn.forEach(function(row) {
    var emailAddress = row[0]; // メールアドレス
    if (emailAddress) { // メールアドレスが存在する場合のみ送信
      var subject = "転記用シート名";
      // var message = "スプレッドシート: " + formResponse;
      var message = '転記用シート名:\n\nhttps://docs.google.com/spreadsheets/d/XXXXX/edit?usp=sharing\n\n';
      MailApp.sendEmail(emailAddress, subject, message);
    }
  });
}
//トリガー設定機能 (setTrigger 関数)

//・この関数は、フォーム送信時に onFormSubmit 関数が実行されるようにトリガーを設定します。
//・ScriptApp.newTrigger("onFormSubmit")...create();: このコードにより、スプレッドシートにフォーム送信時のトリガーが追加されます。

function setTrigger() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger("onFormSubmit")
    .forSpreadsheet(ss)
    .onFormSubmit()
    .create();
}

【2024年1月以降版】GoogleフォームでアップロードしたGoogleDriveの画像をimgタグで読み込む方法

2024年1月から、GoogleDriveの画像をimgタグ等で読み込むと403エラーが出て上手く表示されない現象が起きています。
※Googleの仕様変更が影響しています。(仕様変更のお知らせ – Google Workspace

//2024年1月以降の書き方
<img src="https://lh3.googleusercontent.com/d/{画像のファイルID}" />



//下記すべて画像のファイルIDより前を上記コードに変更すればOK
//http://drive.google.com/uc?id={画像のファイルID}
//http://drive.google.com/uc?export=view&id={画像のファイルID}
//https://drive.google.com/open?id={画像のファイルID}

※GoogleDriveの画像ファイルの共有リンク設定をお忘れなく

共有リンクを発行する(共有 > リンクを知っている人全員)


よろしければサポートお願い致します。