ひとり税理士のGAS -2.会計ソフトインポート用データを作成(4)-
前回のつづきです。
![](https://assets.st-note.com/img/1665748241937-HfMa5DFD7A.png?width=1200)
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」とし、データを入力したものを用意
![](https://assets.st-note.com/img/1665749172313-xAzDYy9Io5.png)
Bスプシを新規作成し、シート名を「Y」としたものを用意します。
![](https://assets.st-note.com/img/1665749535384-EL3wsPDSGK.png)
Bスプシでプログラムを作成します。
下図のように「拡張機能」→「Apps Script」を選択し、
「function myFunction() {」の次に、上のコードを入力します。
「myFunction」の部分・・・関数名・・・は、任意の名前でいいのですが、一部使えない名前もあります(「gas 識別子の命名規則」でクグッていただければ・・・。
![](https://assets.st-note.com/img/1665750454559-ZirAddnd31.png?width=1200)
プロジェクト名「無題のプロジェクト」を変更する場合は、
![](https://assets.st-note.com/img/1665752275052-Z6JDdXMeyH.png?width=1200)
スクリプト名を変更する場合は、
![](https://assets.st-note.com/img/1665752835857-EL9eALYSiA.png?width=1200)
コードを入力(以下のとおり入力してみます。エラーがでるようにわざと間違えています。)
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 );
}
![](https://assets.st-note.com/img/1665753181545-80cmUe1I9x.png?width=1200)
【実行】
プログラムは「実行」ボタンをクリックして動かします。
スプシの場合、プログラムを動かす「ボタンを作成する方法」とスプシの「メニューバー」にプログラムを動かすメニューを追加する方法があります(今回は説明省略)。
プログラムが正常に動かない場合は、「デバック」ボタンを使って誤りを探します。
![](https://assets.st-note.com/img/1665753610955-yUAk7SLobY.png?width=1200)
はじめて「実行」する場合は、次のメッセージが表示されます。
![](https://assets.st-note.com/img/1665754298732-x0w4uU4PGT.png?width=1200)
このプログラムにアクセスする権限を承認しないと使えません。
アカウントを選択して、
![](https://assets.st-note.com/img/1665754736960-URIC30hzUp.png?width=1200)
下図のように「詳細」→「・・・(安全でないページ)」→「許可」をクリックすると、プログラムが実行されます。
![](https://assets.st-note.com/img/1665755828799-XmYL35Gop0.png?width=1200)
実行したら、エラーが発生しました。
【デバッグ】
原因を探っていきましょう。
![](https://assets.st-note.com/img/1666002906946-1FEmoJPujN.png?width=1200)
英語で表示されているので、わからないという人もいると思いますが、下図の丸枠部分だけで、ある程度解明できます。
![](https://assets.st-note.com/img/1666003894009-pKGnvpsEJt.png?width=1200)
スクリプト名と関数名とエラーの行が表示されています。
![](https://assets.st-note.com/img/1666007857783-j4jOvOgXlG.png?width=1200)
実行したログは、下図のように確認できます。
![](https://assets.st-note.com/img/1666012274564-exfupBgjVC.png?width=1200)
エラーの行をチェックします。
![](https://assets.st-note.com/img/1666008126855-eKSboUSmUG.png?width=1200)
「[スプレッドシートID]」の部分・・・スプレッドシートIDを確認して入力するのを忘れていました。(スプレッドシートIDについては (1)を参照 )
var Asheet=SpreadsheetApp.openById('1a2b3c4d5e6f7g8h9i') ;
再度実行。
また、エラーが表示。
![](https://assets.st-note.com/img/1666009556067-rkFjizvnA8.png?width=1200)
今度は6行目。
エラーの内容・・・よくわからないけど「parameter」が一致していない・・・みたいな。
パラメータの使い方は問題ないようにみえるけど・・・もしかしたら「getDataRange」の使い方が問題?
調べてみると「スプレッドシート内のすべてのデータ」を取得する場合に用いるもので、「getRange」が正しいみたいなので、
var Asheet_X_Value = Asheet_X.getRange(1,1,2,3).getValues();
と修正。
で、再度実行。
![](https://assets.st-note.com/img/1666012494498-tjMNCGaxvk.png)
エラーの表示なしで終了したけど。
シートをチェック。
![](https://assets.st-note.com/img/1666012812602-o910S9lvmQ.png)
思った結果になっていない。
なぜだ・・・?。
下図のように、
確認した行番号ををクリックすると、ブレークポイントが設定され
「デバック」ボタンをクリックすると、上の行番号でプログラムが止まります。
右側の確認したい変数をクリックすると、各変数の値が確認できます。
![](https://assets.st-note.com/img/1666086601442-RQFApkEwUR.png?width=1200)
以下のコードを確認したい箇所に挿入し、デバックしてみると、
console.log( [変数] ) ;
![](https://assets.st-note.com/img/1666091143134-FMTEckjSBC.png?width=1200)
上図のように、「実行ログ」で確認したい変数の値が確認できます。
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);
まだ、気になる部分が・・・(次回に続く)。
この記事が気に入ったらサポートをしてみませんか?