スプレッドシートを行単位に配列データで更新したい。

2,697 views
Skip to first unread message

にんまりpapa

unread,
Oct 29, 2014, 10:19:13 PM10/29/14
to google-app...@googlegroups.com
GASの初級者です。
どなたかご教示下さい。

スプレッドシートのデータをすべて二次元の配列で取得します。
取得した配列の行データを、1行単位で同じシートの特定した行のデータを更新(置換)したい。

ターゲットとなる行に取得した配列データをsetValuesで更新しようとしていますが、ターゲット行の各セルに配列データがセットされません。
初歩的な誤りがあると思いますが、下記サンプルを付記しますので、よろしくお願いします。

<サンプルスクリプト>
・5行5列からなるシートを配列で取得し、2行目の配列データで、4行目を置き換えようとしています。

function myFunction1() {
  var ss      = SpreadsheetApp.getActiveSpreadsheet();
  var sheet   = ss.getActiveSheet();
  var values  = sheet.getRange("A1:E5").getValues();
  var gyo_copyFrom1 = values[1];
  Browser.msgBox(gyo_copyFrom1);  
  sheet.getRange("A4:E4").setValues(gyo_copyFrom1); 
  
}


よろしくお願い致します!

Ohashi, Keisuke

unread,
Oct 29, 2014, 10:24:36 PM10/29/14
to google-app...@googlegroups.com
大橋です。
setValuesは2重配列で渡す必要があるので以下のように修正する必要があります。

function myFunction1() {
  var ss      = SpreadsheetApp.getActiveSpreadsheet();
  var sheet   = ss.getActiveSheet();
  var values  = sheet.getRange("A1:E5").getValues();
  var gyo_copyFrom1 = values[1];
  Browser.msgBox(gyo_copyFrom1);  
  sheet.getRange("A4:E4").setValues([gyo_copyFrom1]);  //← gyo_copyFrom1 を [gyo_copyFrom1] に修正
  
}

2014年10月30日 11:19 にんまりpapa <sd.o...@gmail.com>:

--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
/**
* 株式会社 BFT
* 大橋 啓介 <oohashi keisuke>
* k-oh...@bfts.co.jp
*
* 〒100-0005
*  東京都千代田区丸の内1-6-5
*  丸の内北口ビルディング22階
* tel 03-6810-0091
* fax 03-3213-6655
*
* HP http://www.bfts.co.jp/
**/

にんまりpapa

unread,
Oct 29, 2014, 10:44:48 PM10/29/14
to google-app...@googlegroups.com
大橋様

にんまりpapaこと小川貞明と申します。

回答ありがとうございました。
あちこち検索して見ましたが、同様の事例が見つからず苦労していました。

バッチリうまくいき、助かりました!
ありがとうございました!

2014年10月30日木曜日 11時19分13秒 UTC+9 にんまりpapa:

にんまりpapa

unread,
Oct 29, 2014, 11:35:47 PM10/29/14
to google-app...@googlegroups.com
大橋様

何度も恐れ入りますが、発展型として、2行単位での更新は可能でしょうか?

下記引用部分を
>5行5列からなるシートを配列で取得し、2行目の配列データで、4行目を置き換えようとしています。

5行5列からなるシートを配列で取得し、2、3行目の配列データで、4、5行目を置き換えることは可能でしょうか?
可能な場合、表記方法を教えて頂けますか?

よろしくお願い致します。

2014年10月30日木曜日 11時24分36秒 UTC+9 soundTricker:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

soundTricker

unread,
Dec 2, 2014, 6:04:56 AM12/2/14
to google-app...@googlegroups.com
すみません遅れました。

sheet.getRange("A4:E5").setValues([ gyo_copyFrom1, gyo_copyFrom2 ]);  //← gyo_copyFrom1がA2:E2のデータ, gyo_copyFrom2がA3:E3のデータ

とすればできます。

にんまりpapa

unread,
Dec 3, 2014, 9:36:12 PM12/3/14
to google-app...@googlegroups.com
大橋様
ありがとうございます!

これまで1行単位で更新し、処理時間がかかる為、改善を検討し始めたところに大橋様からのピッタリのタイミングでご回答がありました。

ご教示いただいた方法で2行単位の更新がうまくいきました。

今後ともよろしくお願い致します!


2014年12月2日火曜日 20時04分56秒 UTC+9 soundTricker:
Reply all
Reply to author
Forward
0 new messages