質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

2回答

194閲覧

【GAS】指定のスプレッドシートに転記元の情報を転記したい

Angs

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2024/12/23 08:11

編集2024/12/24 00:58

実現したいこと

  • 転記元スプレッドシートA内のプルダウンの項目を指定したら、転記先のシートに転記される。

例(転記元スプシA(マスター)内のプルダウンの項目にはB,C,D,Eとあり、プルダウンの項目をBと設定した場合、スプレッドシートB(転送先)に追記される。)

-今回作成する予定のものはタスク管理表です。今回の処理に関しては一部となります。
-スプシAにはプルダウンをはじめタスク名、進行状況などの項目が横一列並んでいる感じです。
-スプシAのプルダウンにはそれぞれのタスクを割り振る相手の名前が書いております。
-スプシAのプルダウンをこの人に渡そうと仮に”山田さん”という項目に設定したとします。
-設定後そのプルダウンをはじめとする横一列のセルのテキスト情報を取得し、転記先のスプレッドシートのシート名”山田さん”とうシートに転記される

というイメージです。

前提

指定のスプレッドシートに転記元の情報を転記したいです。内容は実現したいことに書いております。
chatgtpを使って生成したあと、少しいじったのですが、うまく実装できません。下記のソースコードの列番号に関しては確認済みです。

発生している問題・エラーメッセージ

実装ができません。

該当のソースコード

function onEdit(e) { const sheet = e.source.getActiveSheet(); const range = e.range; const editedValue = range.getValue(); // 転記元スプレッドシートの情報 const sourceSheet = sheet; const sourceHeaders = sourceSheet.getRange(1, 1, 1, sourceSheet.getLastColumn()).getValues()[0]; // プルダウンメニューの列番号 const dropdownColumn = 5; // 転記先スプレッドシートの情報 const targetSpreadsheets = { 'B': { id: '', sheetName: '' }, 'C': { id: '', sheetName: '' }, 'D': { id: '', sheetName: '' }, 'E': { id: '', sheetName: '' } }; // 編集された列がプルダウンメニューの列かどうかを確認 if (range.getColumn() == dropdownColumn) { const targetSheetKey = editedValue; const targetSpreadsheetInfo = targetSpreadsheets[targetSheetKey]; if (targetSpreadsheetInfo) { const targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetInfo.id); const targetSheet = targetSpreadsheet.getSheetByName(targetSpreadsheetInfo.sheetName); const targetHeaders = targetSheet.getRange(1, 1, 1, targetSheet.getLastColumn()).getValues()[0]; // 転記元の行全体を取得 const sourceRow = range.getRow(); const sourceRowValues = sourceSheet.getRange(sourceRow, 1, 1, sourceSheet.getLastColumn()).getValues()[0]; // 転記先の対応する列に値を設定 for (const i = 0; i < sourceHeaders.length; i++) { const header = sourceHeaders[i]; const targetColumn = targetHeaders.indexOf(header) + 1; if (targetColumn > 0) { const targetCell = targetSheet.getRange(sourceRow, targetColumn); targetCell.setValue(sourceRowValues[i]); } } } } }

試したこと

スプシのIDやシート名の誤字脱字は確認しました。各処理コードはAIにてどのような処理がされるか一通り確認済みです。

補足情報(FW/ツールのバージョンなど)

こちらはスプレッドシート内のGASをしようしております。

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Angs

2024/12/23 08:12

ソースコードが見ずらくなってしまいました。申し訳ございません。 何卒ご教授いただければと思います。 お手数ですが宜しくお願い致します。
YAmaGNZ

2024/12/23 08:32

質問は編集できますのでコードを見やすく編集していただけるとありがたいです。
Angs

2024/12/23 08:40

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
YAmaGNZ

2024/12/23 10:26

// 転記先スプレッドシートの情報 const targetSpreadsheets = { 'B': { id: '', sheetName: '' }, 'C': { id: '', sheetName: '' }, 'D': { id: '', sheetName: '' }, 'E': { id: '', sheetName: '' } }; こちらの内容は実際には正しい値が設定されていますか?
guest

回答1

0

まず「Exception: You do not have permission to call SpreadsheetApp.openById」というエラーが出ているかと思います。
これはSpreadsheetApp.openByIdを実行する権限がないというエラーになります。
何故このエラーが出るのかというとonEdit(e)を実行する際にシンプルなトリガーとして実行されます。
このシンプルなトリガーは制限事項がありSpreadsheetApp.openByIdを実行する権限がない為にエラーとなります。
これをどのようにして回避するかというと手動でトリガーを作成してやります。

javascript

1function onEdit(e) {

javascript

1function onEditUser(e) {

といったように別の名前にし、エディタからトリガーを設定してください。

またトリガーを設定しなおしてもまだ問題があります。

javascript

1 // 転記先の対応する列に値を設定 2 for (const i = 0; i < sourceHeaders.length; i++) {

この部分のconstが問題です。
constによる変数の宣言は初期化のみ行うことができ、宣言後の値の変更ができません。
なのでfor文のように値が変化するものには使用することが出来ません。
なので

javascript

1 // 転記先の対応する列に値を設定 2 for (let i = 0; i < sourceHeaders.length; i++) {

といった感じでletで宣言しましょう。

投稿2024/12/23 11:03

YAmaGNZ

総合スコア10516

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Angs

2024/12/24 01:00

ご回答いただきありがとうございます。 申し訳ございません。 先ほど試したのでしたが、うまくいきませんでした。 実現したいことを細かく記載させていただきましたので、お手数をおかけしますがご確認お願い致します。
YAmaGNZ

2024/12/24 01:28

編集された内容ですと何を試してどうなったのかが分かりません。 「うまくいきません」ではなく「〇〇というエラーが出た」とか「こういう動作を期待しているがこういう動作となった」といったようにどのようなコードを実行してどうなったのかを具体的に記載していただけるとありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問