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

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

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

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

Google Apps Script

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2174閲覧

GASでarray内の数だけ空白行を挿入する方法

takaD

総合スコア315

Google スプレッドシート

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

Google Apps Script

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/11/28 02:06

編集2019/11/28 04:29

前提・実現したいこと

配列内の情報(数字)の回数だけ空白行を挿入してから貼り付けるプログラムを作成しています。

空白行は対象の後ろに追加して、最終的にはCSVデータからやりたいため、貼り付けした後にinsertRows()等は使用したくありません。

諸々プログラムはできたのですが、空白を作成する段階で、賢いやり方が見つからない状態になっています。

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

貼り付けた後のセルがNOT_FOUNDになる。

イメージ説明

該当のソースコード

GAS

1function test(){ 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var ssIn = ss.getSheetByName('TEST') 4 var arr = ssIn.getRange(1,1,11,3).getValues(); 5 var arr2 = [] 6 7 arr2.push(arr[0]);//最初の行だけ取り出してます。 8 arr.shift()//最初の行は数字じゃないので予め消しておきます。 9 var arrBlank = []; 10 arrBlank.length = arr[0].length;//空白行の生成と列の同期 11 12 13 for(var a in arr){ 14 var b = arr[a][0]; 15 arr2.push(arr[a]);//最初の行は必ず取り出す。 16 do{ 17 if(b == 0){break;} 18 arr2.push(arrBlank);//空白行挿入 19 b -= 1 20 } 21 while(b >= 0); 22 } 23 24 Logger.log(arr2) 25 ssIn.getRange(1,6,arr2.length,arr2[0].length).setValues(arr2) 26} 27 28 29

試したこと

var arrBlank = [];を
var arrBlank = ['','',''];にすれば解決できるのですが、それでは列数の変動に対応できない状況です。

また、事前にNOT_FOUNDをreplace等しようとすると、for文を使用するため、
「undefined からプロパティ「length」を読み取れません。」となります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

var arrBlank = [];を
var arrBlank = ['','',''];にすれば解決できるのですが、それでは列数の変動に対応ない状況です。

なら、動的に初期化すればいいのでは。

JavaScript

1for(var i = 0; i < arrBlank.length; i++) { 2 arrBlank[i] = ""; 3}

投稿2019/11/28 04:11

draq

総合スコア2573

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

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

takaD

2019/11/28 04:28

replaceで変換するという発想から頭か固くなっていました・・・ 単純にarrBlank[i] = "";でよかったですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問