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

前回のつづきです。

var Asheet=SpreadsheetApp.openById('1a2b3c4d5e6f7g8h9i');  // [スプレッドシートID]で取得
var Bsheet=SpreadsheetApp.getActiveSpreadsheet();       // 現在使用しているものを取得
var Asheet_X = Asheet.getSheetByName('X');
var Bsheet_Y = Bsheet.getSheetByName('Y');
var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();
var array_r = [];
var vlr = Bsheet_Y.getLastRow();
if( vlr < 2 ){ vlr = 2 }
Bsheet_Y.getRange( 2 , 1 , vlr , Bsheet_Y.getLastColumn() ).clear() ;
for( var i=1; i < Asheet_X_Value.length ; i++ ){
  var array_c = [];  // ここで、array_c を空にしないと・・・
  for( var j=1; j <= Asheet_X_Value[0].length ; j++ ){
    array_c.push( Asheet_X_Value[i][j] ) ;
  }
  array_r.push( array_c ) ;
}
Bsheet_Y.getRange(1, 1,array_r.length,array_r[0].length ).setValues( array_r );

 上のプログラム・・・一応動きますが、Asheetの行数を増やしたり減らしたり、・・・前回処理したデータが残っている・・・ということがあることがわかりました。
 結果が正しく表示されるまでは、チェックが重要。

 上のプログラムの修正すべき箇所→→→
[前回処理したデータのクリア]
 処理前に、前回のデータをクリアにしてから始めるように修正。
 データの最終行は、毎回異なります。
 その最終行の取得は、

var vlr = Bsheet_Y.getLastRow();

のように、「getLastRow()」でします。
 次のように、表題 (1行目)の下の行(2行目)から「getLastRow()で取得した値」の行までをクリアします。

Bsheet.getRange( 2 , 1 , Bsheet_Y.getLastRow() , Bsheet.getLastColumn() ).clear() ;
//                                  ↑ 最終行を取得      ↑ 最終列を取得

 ・・・ここで、注意が必要・・・
 もし、前回の結果が無しの場合、getLastRow()の値は、「表題」の行(1)になってしまいます。
なので、次のように、getLastRow()の値が「2未満」の場合には、2行目からに修正。

var vlr = Bsheet_Y.getLastRow();
if( vlr < 2 ){ vlr = 2 }
Bsheet_Y.getRange( 2 , 1 , vlr , Bsheet_Y.getLastColumn() ).clear() ;

 同じように、Asheetのデータを取得する範囲も、

var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();

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

var vlr=Asheet_X.getLastRow();
var Asheet_X_Value = Asheet_X.getRange(1,1,vlr,Asheet_X.getLastColumn()).getValues();

のように変更すれば、基となるデータの行数等が変更になっても対応できることになります。

今回は、ここまで。

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