

初めに以下の Sheet をご確認ください。

<https://docs.google.com/spreadsheets/d/1AlwgQLEZoZz_vWz0ZqKld528ViLAl8x2nR4SZz0VoHA/edit#gid=0>

↑のような形で各商品の毎月の在庫数が記録される Excel File があるのですが、  
以下のように各商品の最新月の在庫数のみを1つのテーブルに自動でまとめる方法がございませんでしょうか？

<https://docs.google.com/spreadsheets/d/1AlwgQLEZoZz_vWz0ZqKld528ViLAl8x2nR4SZz0VoHA/edit#gid=1267878017>

留意点  
・各商品シートの最新月の在庫数が入る列はシートによってバラバラです。  
・各商品シートの最新月の在庫数は最終列に追加されていくようになっています。

商品数が100以上あり手動でまとめるのがとても手間です。。。  
Excel VBA、もしくは GAS で自動処理する方法はございませんでしょうか？？

どうぞよろしくお願いいたします。


CC BY-SA 4.0
2018-11-01T11:47:02.807
49858
2019-02-08T04:29:46.540
19438
question
google-apps-script vba excel google-spreadsheet
Excel VBA もしくは Google Apps Script で、複数のシートの最終列を取得し新たな1つの列にまとめる方法


以下で動作致しました。  
詳細はコメントで説明していますのでご確認ください。  
また、今回はしていがなかったので特定のシートに出力していますが、  
運用にのせるには、月が変わったら別シートを作成してそこに出力する事などが必要な気がします。

[code]

    var OUTPUT_SHEET_NAME = "出力用"
    function myFunction() {
      var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
    
      var sheets = ss.getSheets();
      var outputSheet = ss.getSheetByName(OUTPUT_SHEET_NAME);
    
      for(i = 0; i < sheets.length; i++) {
        var sheet = sheets[i];
        var title = sheet.getName();
        if (title === OUTPUT_SHEET_NAME) {
          continue;
        }
    //    Logger.log(title);
        var lastRowNumber = sheet.getLastRow();
        var lastColumnNumber = sheet.getLastColumn();
    
        // 巻数を取得
        // 3は3行目、1は1列目、lastRowNumber-2は最終行数からヘッダの2行を引いた行数、1は1列を取得する
        var numbers = sheet.getRange(3, 1, lastRowNumber-2, 1).getValues();
    //    Logger.log(numbers);
    
        // 在庫数を取得
        var values = sheet.getRange(3, lastColumnNumber, lastRowNumber-2, 1).getValues();
    //    Logger.log(values);
    
        // 出力する値を作成（タイトル、巻数、在庫数）
        var result = []
        for(j = 0; j < numbers.length; j++) {
          result.push([title, numbers[j][0], values[j][0]]);
        }
    //    Logger.log(result);
    
        // 出力シートに出力
        var outputSheetLastRowNumber = outputSheet.getLastRow();
        var outputRange = outputSheet.getRange(outputSheetLastRowNumber + 1, 1, result.length, 3);
        outputRange.setValues(result);
      }
    }
    
[/code]

参考 : 公式ドキュメント↓  
<https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-
app>


CC BY-SA 4.0
2019-02-08T04:29:46.540
52635
2019-02-08T04:29:46.540
13022
49858
answer