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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

解決済

1回答

4460閲覧

2次元配列を要素ごとに足し算したい

Kodanosuke

総合スコア42

Google Apps Script

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

0グッド

0クリップ

投稿2018/08/25 00:29

以下のコードで、p2x12という変数にvalue1とvalue2に入っている要素をそれぞれで足し算した結果を入れたいです。どうしたらいいのでしょうか。
前半はシートごとに特定のテンプレートをコピーする内容です。82行目からが本件の内容になります。
汚いコードでお恥ずかしいですが、ご教授いただけると幸いです。よろしくお願いたします。

GAS

1function copyRange() { 2 3 //すべてのシート名を取得 4 var ssheet = SpreadsheetApp.getActiveSpreadsheet(); 5 var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 6 var sheet_names1 = []; 7 var sheet_names = []; 8 var hiduke_sheet = []; 9 10 if (sheets.length >= 1) { 11 for(var i = 0;i < sheets.length; i++) 12 { 13 14 sheet_names1.push(sheets[i].getName());//シート名配列 15 16 } 17 } 18 19 for(var m=0;m < sheet_names1.length;m++){ 20 if((sheet_names1[m] != "集計") && (sheet_names1[m] != "マスタ") && (sheet_names1[m] != "テンプレ")){ 21 hiduke_sheet.push(sheet_names1[m]); 22 sheet_names.push(sheet_names1[m]); 23 24 } 25 } 26 27 //日付シートにテンプレのP26:Q38をコピーする 28 var range_from = ssheet.getSheetByName("テンプレ").getRange('P26:W38');//テンプレート 29 30 31 for(var l=0;l<sheet_names.length;l++){ 32 33 var range_to = ssheet.getSheetByName(sheet_names[l]).getRange('P26:W38'); 34 range_from.copyTo(range_to); 35 36 } 37 38 /******************* 39 ①日付が空白であればすべてのシートを集計 40 ②開始日だけが空白は一番古いシートから指定日まで集計 41 ③終了日が空白であれば開始日から最新のシートまで集計 42 ********************/ 43 //開始日と終了日を取得 44 var hiduke_range = ssheet.getSheetByName('集計').getRange('M25:N25').getValues(); 45 var hiduke_start = []; 46 var hiduke_end = []; 47 48 //集計シートに日付が記載されていればその日付を、記載されていなければ一番古いシート、新しいシートの日付を取得 49 var date_array = [];//日付範囲のシート名を格納する 50 51 for(var n =0;n < hiduke_sheet.length;n++){ 52 53 date_array.push(new Date(hiduke_sheet[n]).getTime()); 54 55 } 56 57 //開始日 58 if(hiduke_range[0][0] != ""){ 59 hiduke_start = new Date(hiduke_range[0][0]).getTaime(); 60 }else{ 61 hiduke_start = Math.min.apply(null,date_array); 62 } 63 64 //終了日 65 if(hiduke_range[0][1] != ""){ 66 hiduke_end = new Date(hiduke_range[0][1]).getTime(); 67 }else{ 68 hiduke_end = Math.max.apply(null,date_array); 69 } 70 71 //hiduke_sheetを開始日から終了日までに限定する。 72 var copy_sheet = []; 73 74 for(var o=0;o<hiduke_sheet.length;o++){ 75 if((hiduke_start <= date_array[o] )&&((date_array[o] <= hiduke_end))){ 76 77 copy_sheet.push(Utilities.formatDate(new Date(date_array[o]), "JST", "yyyy/MM/dd")); 78 79 } 80 } 81 82 //Logger.log(date_array[0] <= new Date(hiduke_end).getTime()) 83 //集計用の配列を取得 84 var p2x12 = []; 85 var p14x24 = []; 86 var p26q38 = []; 87 88 89 //p12:x12範囲の合計 90 var value1 = ssheet.getSheetByName(copy_sheet[0]).getRange('q3:x12').getValues(); 91 var value2 = ssheet.getSheetByName(copy_sheet[1]).getRange('q3:x12').getValues(); 92 93 94 for(var j=0;j <9;j++){//行のループ 95 for(var k=0;k<7;k++){//列のループ 96 p2x12[j][k] = vlue1[j][k] + vlue2[j][k]; 97 } 98 } 99 100 101 Logger.log(range_to) 102 103} 104

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

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

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

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

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

guest

回答1

0

ベストアンサー

Forで書くなら

js

1for(var j=0;j <9;j++){ //行のループ 2 var row = []; 3 for(var k=0;k<7;k++){ //列のループ 4 row.push(value1[j][k] + value2[j][k]); 5 } 6 p2x12.push(row); 7}

Mapで書くなら

js

1p2x12 = value1.map(function(x, i) { 2 return x.map(function(y, j) { 3 return y + value2[i][j]; 4 }); 5});

投稿2018/08/27 00:29

macaron_xxx

総合スコア3191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問