ひとり税理士のGAS -2.会計ソフトインポート用データを作成(2)-

 前回のつづきです。

AシートからBシートにデータを移記するだけの単純な作業をプログラミング
var Asheet=SpreadsheetApp.openById(' [スプレッドシートID] ');  // [スプレッドシートID]で取得
var Bsheet=SpreadsheetApp.getActiveSpreadsheet();       // 現在使用しているものを取得
var Asheet_X = Asheet.getSheetByName('X');
var Bsheet_Y = Bsheet.getSheetByName('Y');
var vmoto = Asheet_X.getRange('A1').getValue();
Bsheet_Y.getRange('A1').setValue(vmoto);
var vmoto = Asheet_X.getRange('B1').getValue();
Bsheet_Y.getRange('B1').setValue(vmoto);
var vmoto = Asheet_X.getRange('C1').getValue();
Bsheet_Y.getRange('C1').setValue(vmoto);
・・・

 以上、前回の復習。

var vmoto = Asheet_X.getRange('A1').getValue();
Bsheet_Y.getRange('A1').setValue(vmoto);
var vmoto = Asheet_X.getRange('B1').getValue();
Bsheet_Y.getRange('B1').setValue(vmoto);
var vmoto = Asheet_X.getRange('C1').getValue();
Bsheet_Y.getRange('C1').setValue(vmoto);
・・・

の部分・・・コピーする箇所が多ければ多いほどプログラムの行数(ステップ数)が増え、メンテする場合の修正時間にも影響します。・・・なので、できるだけステップ数を減らしたいと思います。

 "getRange"の部分は、次のように置き換えることができます。

                      getRange(行,列)
getRange('A1') -----> getRange( 1, 1)
getRange('B1') -----> getRange( 1, 2)
getRange('C1') -----> getRange( 1, 3)

getRange('A2') -----> getRange( 2, 1)
getRange('B2') -----> getRange( 2, 2)
getRange('C2') -----> getRange( 2, 3)

 1から10まで、数字を当てはめて処理する場合は、次のとおり。

for( var i=1; i <= 10 ; i++ ){
 ・・・
}

 まず1行のみ、次のとおりに置き換え。

var vmoto = Asheet_X.getRange('A1').getValue();
Bsheet_Y.getRange('A1').setValue(vmoto);
var vmoto = Asheet_X.getRange('B1').getValue();
Bsheet_Y.getRange('B1').setValue(vmoto);
var vmoto = Asheet_X.getRange('C1').getValue();
Bsheet_Y.getRange('C1').setValue(vmoto);

     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


for( var i=1; i <= 3 ; i++ ){
  var vmoto = Asheet_X.getRange( 1 , i ).getValue();
  Bsheet_Y.getRange( 1 , i ).setValue(vmoto);
}

複数行を処理する場合は、次のとおり。

var vmoto = Asheet_X.getRange('A1').getValue();
Bsheet_Y.getRange('A1').setValue(vmoto);
var vmoto = Asheet_X.getRange('B1').getValue();
Bsheet_Y.getRange('B1').setValue(vmoto);
var vmoto = Asheet_X.getRange('C1').getValue();
Bsheet_Y.getRange('C1').setValue(vmoto);
var vmoto = Asheet_X.getRange('A2').getValue();
Bsheet_Y.getRange('A2').setValue(vmoto);
var vmoto = Asheet_X.getRange('B2').getValue();
Bsheet_Y.getRange('B2').setValue(vmoto);
var vmoto = Asheet_X.getRange('C2').getValue();
Bsheet_Y.getRange('C2').setValue(vmoto);

     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


for( var i=1; i <= 2 ; i++ ){
  for( var j=1; j <= 3 ; j++ ){
    var vmoto = Asheet_X.getRange( i , j ).getValue();
    Bsheet_Y.getRange( i , j ).setValue(vmoto);
  }
}

 スプレッドシートのセルを読み込みや書き込む数が多いと処理時間が長くなるので、処理時間が短くなるように改良したいと思います。
 
 「配列」というものを使います。・・・説明は次回に!
 


この記事が気に入ったらサポートをしてみませんか?