回答編集履歴
3
コード修正
    
        answer	
    CHANGED
    
    | 
         @@ -42,7 +42,7 @@ 
     | 
|
| 
       42 
42 
     | 
    
         
             
              // カラム名で配列アクセスするためのインデックスを作成する
         
     | 
| 
       43 
43 
     | 
    
         
             
              // ※前提条件:1行目は見出しであること
         
     | 
| 
       44 
44 
     | 
    
         
             
              // ※列1~列15はサンプルのカラム名です。実際のカラム名に修正してください。
         
     | 
| 
       45 
     | 
    
         
            -
              const header =  
     | 
| 
      
 45 
     | 
    
         
            +
              const header = master.shift(), cIndex = {}; 
         
     | 
| 
       46 
46 
     | 
    
         
             
              for (var i = 0; i < header.length; i++) cIndex[header[i]] = i;
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
              const inventory = master
         
     | 
2
コード修正
    
        answer	
    CHANGED
    
    | 
         @@ -42,8 +42,8 @@ 
     | 
|
| 
       42 
42 
     | 
    
         
             
              // カラム名で配列アクセスするためのインデックスを作成する
         
     | 
| 
       43 
43 
     | 
    
         
             
              // ※前提条件:1行目は見出しであること
         
     | 
| 
       44 
44 
     | 
    
         
             
              // ※列1~列15はサンプルのカラム名です。実際のカラム名に修正してください。
         
     | 
| 
       45 
     | 
    
         
            -
              const  
     | 
| 
      
 45 
     | 
    
         
            +
              const header = masterA.shift(), cIndex = {}; 
         
     | 
| 
       46 
     | 
    
         
            -
              for (var i = 0; i <  
     | 
| 
      
 46 
     | 
    
         
            +
              for (var i = 0; i < header.length; i++) cIndex[header[i]] = i;
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
              const inventory = master
         
     | 
| 
       49 
49 
     | 
    
         
             
                .filter(function(e){return e[cIndex['列14']] === '未'})
         
     | 
1
追記
    
        answer	
    CHANGED
    
    | 
         @@ -3,4 +3,67 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            0. マスタシートの全行を二次元配列に格納する。[getValues()](https://developers.google.com/apps-script/reference/spreadsheet/range#getValues())
         
     | 
| 
       4 
4 
     | 
    
         
             
            0. 14列目が”未”の行のみ抽出する。[filter()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
         
     | 
| 
       5 
5 
     | 
    
         
             
            0. 棚卸シートに必要な列のみ抽出する。[map()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
         
     | 
| 
       6 
     | 
    
         
            -
            0. 棚卸シートの最終行に追加する。[setValues()](https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object))
         
     | 
| 
      
 6 
     | 
    
         
            +
            0. 棚卸シートの最終行に追加する。[setValues()](https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object))
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ### 追記
         
     | 
| 
      
 9 
     | 
    
         
            +
            これはサンプルです。
         
     | 
| 
      
 10 
     | 
    
         
            +
            ```GAS
         
     | 
| 
      
 11 
     | 
    
         
            +
            function syoukyaku_before(){
         
     | 
| 
      
 12 
     | 
    
         
            +
              var sheet = SpreadsheetApp.getActiveSpreadsheet();
         
     | 
| 
      
 13 
     | 
    
         
            +
              var tana = sheet.getSheetByName("setsubi_tana");
         
     | 
| 
      
 14 
     | 
    
         
            +
              var a_mst = sheet.getSheetByName("setsubi_a_masta")
         
     | 
| 
      
 15 
     | 
    
         
            +
              
         
     | 
| 
      
 16 
     | 
    
         
            +
              const inventory = a_mst.getDataRange().getValues()
         
     | 
| 
      
 17 
     | 
    
         
            +
                .filter(function(e){return e[13] === '未'})
         
     | 
| 
      
 18 
     | 
    
         
            +
                .map(function(e){
         
     | 
| 
      
 19 
     | 
    
         
            +
                  const columns = [0,1,3,4,5,6,12,14], row = [];
         
     | 
| 
      
 20 
     | 
    
         
            +
                  for (var i = 0; i < columns.length; i++) row.push(e[columns[i]]);
         
     | 
| 
      
 21 
     | 
    
         
            +
                  return row;
         
     | 
| 
      
 22 
     | 
    
         
            +
                });
         
     | 
| 
      
 23 
     | 
    
         
            +
             
         
     | 
| 
      
 24 
     | 
    
         
            +
              if (inventory.length) {
         
     | 
| 
      
 25 
     | 
    
         
            +
                tana.getRange(tana.getLastRow()+1, 1, inventory.length, inventory[0].length).setValues(inventory);
         
     | 
| 
      
 26 
     | 
    
         
            +
              }
         
     | 
| 
      
 27 
     | 
    
         
            +
            }
         
     | 
| 
      
 28 
     | 
    
         
            +
            ```
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            このサンプルだと、配列アクセスに`e[13]`とか`e[0]`とかで分かりづらいですね。
         
     | 
| 
      
 31 
     | 
    
         
            +
            せめてカラム名でアクセスできるようにしてみます。
         
     | 
| 
      
 32 
     | 
    
         
            +
            これでコードの可読性が向上し、後々発生するであろう変更(カラム追加等)にも比較的容易に対応することができます。
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            ```GAS
         
     | 
| 
      
 35 
     | 
    
         
            +
            function syoukyaku_before(){
         
     | 
| 
      
 36 
     | 
    
         
            +
              var sheet = SpreadsheetApp.getActiveSpreadsheet();
         
     | 
| 
      
 37 
     | 
    
         
            +
              var tana = sheet.getSheetByName("setsubi_tana");
         
     | 
| 
      
 38 
     | 
    
         
            +
              var a_mst = sheet.getSheetByName("setsubi_a_masta")
         
     | 
| 
      
 39 
     | 
    
         
            +
              
         
     | 
| 
      
 40 
     | 
    
         
            +
              const master = a_mst.getDataRange().getValues();
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              // カラム名で配列アクセスするためのインデックスを作成する
         
     | 
| 
      
 43 
     | 
    
         
            +
              // ※前提条件:1行目は見出しであること
         
     | 
| 
      
 44 
     | 
    
         
            +
              // ※列1~列15はサンプルのカラム名です。実際のカラム名に修正してください。
         
     | 
| 
      
 45 
     | 
    
         
            +
              const heading = master.shift(), cIndex = {}; 
         
     | 
| 
      
 46 
     | 
    
         
            +
              for (var i = 0; i < heading.length; i++) cIndex[heading[i]] = i;
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              const inventory = master
         
     | 
| 
      
 49 
     | 
    
         
            +
                .filter(function(e){return e[cIndex['列14']] === '未'})
         
     | 
| 
      
 50 
     | 
    
         
            +
                .map(function(e){
         
     | 
| 
      
 51 
     | 
    
         
            +
                  const columns = [
         
     | 
| 
      
 52 
     | 
    
         
            +
                    cIndex['列1'],
         
     | 
| 
      
 53 
     | 
    
         
            +
                    cIndex['列2'],
         
     | 
| 
      
 54 
     | 
    
         
            +
                    cIndex['列4'],
         
     | 
| 
      
 55 
     | 
    
         
            +
                    cIndex['列5'],
         
     | 
| 
      
 56 
     | 
    
         
            +
                    cIndex['列6'],
         
     | 
| 
      
 57 
     | 
    
         
            +
                    cIndex['列7'],
         
     | 
| 
      
 58 
     | 
    
         
            +
                    cIndex['列13'],
         
     | 
| 
      
 59 
     | 
    
         
            +
                    cIndex['列15'],
         
     | 
| 
      
 60 
     | 
    
         
            +
                  ], row = [];
         
     | 
| 
      
 61 
     | 
    
         
            +
                  for (var i = 0; i < columns.length; i++) row.push(e[columns[i]]);
         
     | 
| 
      
 62 
     | 
    
         
            +
                  return row;
         
     | 
| 
      
 63 
     | 
    
         
            +
                });
         
     | 
| 
      
 64 
     | 
    
         
            +
             
         
     | 
| 
      
 65 
     | 
    
         
            +
              if (inventory.length) {
         
     | 
| 
      
 66 
     | 
    
         
            +
                tana.getRange(tana.getLastRow()+1, 1, inventory.length, inventory[0].length).setValues(inventory);
         
     | 
| 
      
 67 
     | 
    
         
            +
              }
         
     | 
| 
      
 68 
     | 
    
         
            +
            }
         
     | 
| 
      
 69 
     | 
    
         
            +
            ```
         
     |