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

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

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

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

Q&A

解決済

1回答

968閲覧

GAS/二次元配列で、一次元配列の最初の要素を削除するshiftを付与すると1次元配列事削除されていしまう

gonngonn

総合スコア3

Google Apps Script

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

0グッド

0クリップ

投稿2022/04/21 05:40

GASで、あるシートからステータスが「完了」「キャンセル」のものを取得し、
別シートにコピーする二次元配列を作ろうと考えています。
その際、二次元配列の最初の行をshiftで削除し、unshiftでシートの行番号を入れて転記しようと考えました。

GAS

1function KakoTenki() { 2 3 const ss = SpreadsheetApp.getActiveSpreadsheet(); 4 const ShceduleSheet = ss.getSheetByName('スケジュール管理表'); 5 const MasterKako = ShceduleSheet.getDataRange().getValues(); 6 7 ///未作業の行だけ抜き出す+行番号 8 const HeaderKako = MasterKako.shift(), cIndex = {}; 9 for (var i = 0; i < HeaderKako.length; i++) cIndex[HeaderKako[i]] = i; 10 11 //ステータスが完了の行だけを取得して配列化(転記データ) 12 const FileKako01 = MasterKako 13 .filter(function(e){return e[cIndex['ステータス']] === '完了'}) 14 .map(function(e){ 15 const Columns = [ 16 17 cIndex['状態'], 18 cIndex['開催日'], 19 cIndex['時間帯'], 20 21 22 ], row = []; 23 for (var i = 0; i < Columns.length; i++) row.push(e[Columns[i]]); 24 return row; 25 }); 26 27 28 //ステータスがキャンセルの行だけを取得して配列化(転記データ) 29 const FileKako02 = MasterKako 30 .filter(function(e){return e[cIndex['ステータス']] === 'キャンセル'}) 31 .map(function(e){ 32 const Columns = [ 33 34 cIndex['状態'], 35 cIndex['開催日'], 36 cIndex['時間帯'], 37 38 ], row = []; 39 for (var i = 0; i < Columns.length; i++) row.push(e[Columns[i]]); 40 return row; 41 }); 42 43//------------------------------------------------------------------------ 44 45 46 //完了とキャンセルを同じ配列に(転記データ) 47 const FileKako00 = []; 48 FileKako00.push(FileKako01,FileKako02); 49 50 51 //過去シートを取得 52 const KakoSheet = ss.getSheetByName('過去シート'); 53 54 55 //取得データを1行ずつ処理(転記データ) 56 for ( var i = 0 ; i< FileKako00.length ; i++){ 57 58 if (FileKako00[i][0] == '転記済'){ 59 60 }else{ 61 62 //URL2を作成、セット 63 var URL2 = 'https://www.wwww.com/view/'+ FileKako00[i][12]; 64 65 //URL1を作成、セット 66 var URL1 = 'https://www2.wwwww.jp/wwwww/'+ FileKako00[i][13]; 67 68 //過去シートの行番号を取得 69 const KakoRowNumber = KakoSheet.getLastRow(); 70 71 //過去シートの行番号を配列先頭に挿入 72 FileKako00[i].shift(); 73 FileKako00[i].unshift(KakoRowNumber); 74 console.log('①',FileKako00[i]); 75 76 //最後の2列)を削除し、URLを配列に挿入 77 FileKako00[i].pop(); 78 FileKako00[i].pop(); 79 80console.log('②',FileKako00[i]); 81 82 FileKako00[i].push(URL2); 83 FileKako00[i].push(URL1); 84 85console.log('③',FileKako00[i]); 86 87 //過去シートに追記 88 KakoSheet.appendRow(FileKako00[i]); 89 } 90 } 91 92 console.log(FileKako00) 93 94

上記を実行すると

14:31:49 情報 ① [ 27 ] 14:31:49 情報 ② [] 14:31:49 情報 ③ [ 'https://www.wwww.com/view/undefined', 'https://www2.wwwww.jp/wwwww/undefined' ]

となり、shiftのところで1次元配列がすべて削除されてしまっていることがわかります。
ものすごく初歩的なことかと思いますが、原因等わかればご教示いただきたく存じます。

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

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

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

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

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

int32_t

2022/04/21 06:39

shift()する前の FileKako00[i] の内容はどうなっているのでしょうか。
gonngonn

2022/04/21 06:56

ありがとうございます。 for分の前で下記となっていたので、取得漏れということではなさそうです・・ ーーーーーーーーーーーーーーーーーーーーーーーー 22 [ [ [ '設定済', Fri Jul 22 2022 00:00:00 GMT+0900 (Japan Standard Time), '13:00-13:45', ] ], [ [ '設定済', Mon Jul 25 2022 00:00:00 GMT+0900 (Japan Standard Time), '13:00-13:46',] ]
gonngonn

2022/04/21 07:16

そういう意味では pop() の動きもおかしいですね。
int32_t

2022/04/21 07:32

これが FileKako00 だと、3次元配列になってますね。FileKako00[i] は1要素を持った2次元配列ですから、shift() ですべて消えるのは当然ですね。 FileKako00[i]は3要素の配列になるべきですか? それとも FileKako00 はこの構造のままで shift() 等の処理をしたいですか?
gonngonn

2022/04/21 07:50

ありがとうございます。 いえ、2次元配列にしたかったので、その上のpushがおかしいということですね・・・!
guest

回答1

0

ベストアンサー

js

1 const FileKako00 = []; 2 FileKako00.push(FileKako01,FileKako02);

FileKako01 と FileKako02 のそれぞれが2次元配列からマップして作った2次元配列ですから、それらを入れた FileKako00 は3次元配列になります。FileKako01 と FileKako02 を繋げた2次元配列が欲しいなら、以下です。

js

1 const FileKako00 = FileKako01.concat(FileKako02);

投稿2022/04/21 07:57

int32_t

総合スコア21927

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

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

gonngonn

2022/04/21 08:27

ありがとうございました!かなり勘違いをしていました。お恥ずかしい・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問