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

前回のつづきです。

AスプシのXシートからBスプシのYシートにデータを移記するだけの単純な作業をプログラミング
var Asheet=SpreadsheetApp.openById(' [スプレッドシートID] ');  // [スプレッドシート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 = [];
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 );

 前回、ここまで作成してみたのだけど、実際動くのか・・・。


【準備】

  •  Aスプシを新規作成し、シート名を「X」とし、データを入力したものを用意

Aスプシの用意
  •  Bスプシを新規作成し、シート名を「Y」としたものを用意します。

Bスプシの用意
  •  Bスプシでプログラムを作成します。
     下図のように「拡張機能」→「Apps Script」を選択し、
    「function myFunction() {」の次に、上のコードを入力します。
    「myFunction」の部分・・・関数名・・・は、任意の名前でいいのですが、一部使えない名前もあります(「gas 識別子の命名規則」でクグッていただければ・・・。

  •  プロジェクト名「無題のプロジェクト」を変更する場合は、

  •  スクリプト名を変更する場合は、

  •  コードを入力(以下のとおり入力してみます。エラーがでるようにわざと間違えています。)

function Data_Iki_Syori(){
 var Asheet=SpreadsheetApp.openById(' [スプレッドシートID] ');  // [スプレッドシート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 = [];
 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 );
}

 


【実行】 
 プログラムは「実行」ボタンをクリックして動かします。
 スプシの場合、プログラムを動かす「ボタンを作成する方法」とスプシの「メニューバー」にプログラムを動かすメニューを追加する方法があります(今回は説明省略)。
 プログラムが正常に動かない場合は、「デバック」ボタンを使って誤りを探します。

 はじめて「実行」する場合は、次のメッセージが表示されます。

 このプログラムにアクセスする権限を承認しないと使えません。
 アカウントを選択して、

 下図のように「詳細」→「・・・(安全でないページ)」→「許可」をクリックすると、プログラムが実行されます。

 実行したら、エラーが発生しました。


【デバッグ】
 原因を探っていきましょう。

 英語で表示されているので、わからないという人もいると思いますが、下図の丸枠部分だけで、ある程度解明できます。

 スクリプト名と関数名とエラーの行が表示されています。

 実行したログは、下図のように確認できます。

 エラーの行をチェックします。

「[スプレッドシートID]」の部分・・・スプレッドシートIDを確認して入力するのを忘れていました。(スプレッドシートIDについては (1)を参照

var Asheet=SpreadsheetApp.openById('1a2b3c4d5e6f7g8h9i') ; 

 再度実行。
 また、エラーが表示。

 今度は6行目。
 エラーの内容・・・よくわからないけど「parameter」が一致していない・・・みたいな。
 パラメータの使い方は問題ないようにみえるけど・・・もしかしたら「getDataRange」の使い方が問題?
 調べてみると「スプレッドシート内のすべてのデータ」を取得する場合に用いるもので、「getRange」が正しいみたいなので、


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

と修正。
で、再度実行。

 エラーの表示なしで終了したけど。
 シートをチェック。

 思った結果になっていない。
 なぜだ・・・?。

 下図のように、
 確認した行番号ををクリックすると、ブレークポイントが設定され
 「デバック」ボタンをクリックすると、上の行番号でプログラムが止まります。
 右側の確認したい変数をクリックすると、各変数の値が確認できます。

以下のコードを確認したい箇所に挿入し、デバックしてみると、

console.log( [変数] ) ;

 上図のように、「実行ログ」で確認したい変数の値が確認できます。
 AスプシのXシートのデータの範囲は、セル「A1:H15」なので、
 (Hは8列目・・・A[1列目],B[2列目],・・・,H[8列目])

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

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

var Asheet_X_Value = Asheet_X.getRange(1,1,15,8).getValues();

1行目が移記されていないので、変数 i を 0 から

 for( var i=1; i < Asheet_X_Value.length ; i++ ){
 
  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 for( var i=0; i < Asheet_X_Value.length ; i++ ){

A列目が移記されていないので、変数 j も 0 から

for( var j=1; j <= Asheet_X_Value[0].length ; j++ ){
 
  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

for( var j=0; j <= Asheet_X_Value[0].length ; j++ ){

・・・修正。
再度実行。

結果・・・書式は異なるが、値は元のデータが移記されていると思います。

デバッグで挿入したコードは、また使うかも知れないので、コメントアウト

//   console.log(array_c);

まだ、気になる部分が・・・(次回に続く)。

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