🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

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

Google Apps Script

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

Q&A

解決済

2回答

823閲覧

Google Apps Scriptで複数のスプレッドシートに文字を追加したい

akatsu

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/01/12 12:37

GAS初心者です。ご質問させていただきます。

<実現したいこと>
複数のシートのデータを一括で変更したい。

<前提>
複数のスプレッドシートがあり、スプレッドシート内のシート「元データ」の「ID17」のセルに「"」を追加したい。

<困っていること>
・同様の質問を見つけたものの、知識が脆弱なためスクリプトが検討つかず困っています。

こちらの方法とほぼ同じことをしたかったので、同じように書いてみたのですがうまく動かず困っています。
https://devlog.atlas.jp/2016/02/02/1221

function myFunction() { //スプレッドシート内のシートを取得する var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName('元データ'); //シート数を取得する var max = sheets.length; var sheet = ''; //シートをループさせる for(var i = 0; i < max; i++){ sheet = sheets[i]; //セルのデータ変更 sheet.getRange("ID17").setValue("""); } }

ご教示いただけますと幸いです。

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

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

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

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

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

guest

回答2

0

補足: 質問者のコードを動くように修正したが、質問者が「やりたいこと」はそのコードとは違うことだったので意味がなかった。

getSheetsでシートオブジェクトの配列を得て、その要素を操作してください。

GAS

1function myFunction() { 2 var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 3 for (var i = 0; i < sheets.length; i++) { 4 sheets[i].getRange("ID17").setValue('"'); 5 } 6}

こんなのでもOK。

GAS

1function myFunction() { 2 SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(s => s.getRange("ID17").setValue('"')); 3}

投稿2021/01/12 13:36

編集2021/01/12 17:36
Daregada

総合スコア11990

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

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

退会済みユーザー

退会済みユーザー

2021/01/12 14:51

補足させてください。 変数sheetsを参照しているのに、 sheetsが宣言されていない ので、 Daregada様の提示してくれたように、 変数sheetsにシートの配列が入るようにしておくことで、 akatsu様のコードも動くようになると思います。 var sh = ss.getSheetByName('元データ'); の行を削除して、 var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); を代わりに追加することで、期待した動作になりますが そこで止まらずに、ぜひ、基本を身につけていったほうが良いと思いました。 なお、配列やデータ、及び関数などと同じ地平に存在する考え方として、 高階関数という考え方がありまして、 Daregada様が提示してくれたコードの書き方は、それを利用したものとなっております。 javascriptでは、配列に対する高階関数が標準で準備されており、 身につけること自体は非常に簡単でありながら、大幅にコード行を削減した形で 自分の考えをコード上で表現できますので、 ぜひ身につけることをおすすめいたします。 横から失礼いたしました。
akatsu

2021/01/12 14:57

ありがとうございます! getSheetsでシートオブジェクトの配列を得て、その要素を操作してください。 というのが、わかりません。 素人で申し訳ございませんが、どのようにしたら良いか教えていただけるとありがたいです。
Daregada

2021/01/12 15:03 編集

> どのようにしたら良いか教えていただけるとありがたいです。 回答のコードが「どのようにしたらよいのか」の実例ですよ。 ひとつめのコード(わかりやすいほう)がわからないとなると、「やりたいこと」の回答を得る前に、「何が書いてあるのか理解する」ための学習が必要なレベルです。
akatsu

2021/01/12 15:21

ありがとうございます。 本日初めて、GASを触ったので、現段階では私には手に負えない内容のようです。 丁寧に教えていただきましてありがとうございました。 時間をかけて学んでいきたいと思います。
akatsu

2021/01/12 15:51

教えていただきました、コードを動かしてみたのですが、想定してた動きにならず。追加で教えていただけると助かります。 【今回やりたいこと】 複数のスプレッドシートがあり、その中のシートに「元データ」という共通のシートがあります。 スプレッドシートA  シート「元データ」 スプレッドシートB  シート「元データ」 スプレッドシートC  シート「元データ」 ・ ・ ・ この「元データ」のID17の空白のセル内に「"」を追加したいという内容です。 Activeではないシートを取得してセルに変更を加えたいのですが、教えていただいた方法だとActiveなシートにしか記述が追加されませんでした。
Daregada

2021/01/12 17:33

単独の「スプレッドシート」(ファイル)にある複数の「シート」ではなくて、複数の「スプレッドシート」にある「元データ」シートを変更したいということであれば、別の回答者がお書きになっているように、内容がまったく異なるコードになります。 質問文のコードにある「シート数を取得する」や「シートをループさせる」必要はありませんね。 > こちらの方法とほぼ同じことをしたかったので、同じように書いてみたのですがうまく動かず困っています。 つまり、「ほぼ同じこと」ではないので、まったく違うことをしないといけません。
akatsu

2021/01/13 00:36

ご丁寧にありがとうございます。 承知いたしました。
guest

0

ベストアンサー

javascript

1const q315545 = () => { 2 //const fileIter = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS); // ドライブ内の全ての sheets を対象とできる場合 3 //const fileIter = DriveApp.getFilesByName("スプレッドシート"); //対象のファイル名が全て同じで"スプレッドシート"という名前である場合 4 const fileIter = DriveApp.searchFiles('title contains "スプレッドシート"'); // 対象のファイル群のみに共通して含まれる名前があり、それが"スプレッドシート"である場合 5 while(fileIter.hasNext()) { 6 const file = fileIter.next(); 7 const book = SpreadsheetApp.open(file).getSheetByName("元データ").getRange("ID17").setValue(`"`); 8 } 9}

投稿2021/01/12 17:00

papinianus

総合スコア12705

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

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

akatsu

2021/01/12 17:10

ご丁寧にありがとうございます。 ファイルとファイル群の名前はバラバラなのですが、ドライブ内のすべてのファイルのみのコードで動かすことは可能なのでしょうか。
papinianus

2021/01/12 22:50

可能です。 プログラムのことは忘れて、誰かに作業指示するとして、どうやって「複数のスプレッドシート」を特定できるのか、お考えいただき、言語化して、新しい質問を作ってください。
akatsu

2021/01/13 00:35

ありがとうございます。 承知いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問