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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

2546閲覧

GASでスプレッドシート上の関数がズレてしまう。

Nasu1225

総合スコア3

Google スプレッドシート

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/10/07 16:45

前提・実現したいこと

月次データを、
テンプレートを基に日付毎に集計する仕組みづくりを作成しています。

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

表に入力されている関数が、
貼り付け先だと若干ズレてしまう。
イメージ説明

該当のソースコード

// プログラム0|スプレッドシート名の設定 function DivideData2() { // プログラム1|スプレッドシートの情報を取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('貼付&操作'); var sheet1 = spreadsheet.getSheetByName('テンプレ'); // プログラム2|スプレッドシートのデータを二次元配列として取得 var myRange = sheet.getDataRange().getValues(); // プログラム3|空の配列を設定 var products = []; // プログラム4|プログラム2の商品列(E列)をプログラム3の空配列に取得 for (var i=5; i<myRange.length; i++){ products.push(myRange[i][0]); } // プログラム5|プログラム4の商品名の重複を削除 var product_list = products.filter(function(value, i, self){ return self.indexOf(value) === i; }); // プログラム6|商品名ごとに繰り返す for (var i=0; i<product_list.length; i++){ // プログラム7|空の配列を設定 var myproducts = []; // プログラム8|ヘッダー情報を取得 myproducts.push(myRange[4]); // プログラム9|商品名が一致すれば、その情報を配列に格納 for (var k=0; k<myRange.length; k++){ if (myRange[k][0] == product_list[i]){ myproducts.push(myRange[k]); } } // プログラム10|シートを追加 var sheetsnum = spreadsheet.getNumSheets(); var newsheet = spreadsheet.insertSheet(product_list[i], sheetsnum); // プログラム11|新規追加したシートに情報を貼り付け sheet1.getRange("B1:T15").copyTo(newsheet.getRange("B1:T15"),SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); newsheet.getRange(17,1,myproducts.length,myproducts[0].length).setValues(myproducts); } }

試したこと

setFormulaで書き込みを行っても同様に関数がズレてしまう。

sheeta.getRange(2,5).setFormula('=COUNTIFS($E$18:E,"D",$O$18:O,"1",$CC$18:CC,">=0:6:59")')

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

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

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

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

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

guest

回答1

0

ベストアンサー

スプレッドシートは初期状態(新規に作成された状態)では Z 列までしかなく、これより右に拡張するには列挿入を実行する必要があります。

おそらく setValues の実行により、自動的な列挿入が起きたことで、Z より右の CC 列の参照ズレが発生したのではないかと考えられます。
(試してないです)

確認方法としては、最後の setValues を消した状態で、参照ズレがなければ↑の推測が正しいと言えるかと思います。

上記の確認が取れた場合の対応方法としては、次のような方法が考えられます。

  1. コピー前に insertColumnsを newsheet に対して実行して、あらかじめコピー先とコピー元の列数を同等にしておく
  2. setValues の後に setFormula で関数をペーストする

投稿2021/10/08 19:55

papinianus

総合スコア12705

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

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

Nasu1225

2021/10/09 17:36

できました! ありがとうございます。 本当にずっと悩んでおり、 出来たときの喜びハンパないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問