- 締切済み
スクリプトの#N/A対策
前回は大変丁寧な回答ありがとうございました。 申し訳ありません、今一度スプレットシートで 1つ教えて頂けないでしょうか。 前回同様の内容に入力列を1つ追加したいのです。 入力シートと単価シートがあります。 入力シートはA列から品番,単価1,単価2,単価3,部品,単価1,単価2,単価3となります。 単価シートはA列から品番,単価1,単価2,単価3で3行、1行空けて6行からは 部品,単価1,単価2,単価3で3行になります。 品番 単価1 単価2 単価3 あ 50 60 70 い 80 90 100 う 110 120 130 QQ 10 20 30 WW 40 50 60 EE 70 80 90 この様になります。 入力シートのA列で品番,E列で部品を入力すると単価シートを参照し B列からD列に品番単価,F列からH列に部品単価が表示されるようにしました。 そこで現状のコードだとE列に値が無くても部品単価1,2,3に#N/Aが セットされてしまいます。 下記のコードをA列,E列がセットされていない時は何もしないようにしたいのです。 function WriteVlookup() { var sheet = SpreadsheetApp.getActive().getSheetByName('入力シート'); var myCell = sheet.getActiveCell(); var myRow=myCell.getRow(); var myColumn=myCell.getColumn(); if(myColumn==1 && myRow>=2 ){ for(var i = 2; i <= 4; i++) { strformula ='=VLOOKUP($A' + myRow + ',\'単価シート\'!$A$2:$D$4,' + i + ',False)'; sheet.getRange(myRow, i).setFormula(strformula); strformula2 ='=VLOOKUP($E' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False)'; sheet.getRange(myRow, i + 4).setFormula(strformula2); } } }; 例えば入力シートであと A列に入力すると E列まだ空白なのでF列からは#N/Aと表示されてしまいます。 A B C D E F G H あ 50 60 70 #N/A #N/A #N/A い 80 90 100 QQ 40 50 60 上記のコードをどのように修正すれば#N/Aが 表示されなくなりますか? 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kkkkkm
- ベストアンサー率66% (1719/2589)
今、気が付きました。前回からvarが抜けてました。トリガーの方で前回はエラーが出なかったのに今回は出たので気が付きました。 strformula ・・・・・・・・・・ を var strformula ・・・・・・・・・・・ strformula2 ・・・・・・・・・ を var strformula2 ・・・・・・・・・ にそれぞれ変更してください。 あと、ちょっと気になったのですが、単価シートの品番と部品が同じ列になっていますが、それぞれ増えたとき、コードの参照先に幅を持たせていないので都度コードを書き直さなくてはいけないですよね。 列を別にして100行くらいまで参照先を増やしておけばいかがでしょう。 品番をA$2:$D$100、部品をF$2:$I$100 みたいな感じです。おおきなお世話だとは思いますが…m(__)m
- kkkkkm
- ベストアンサー率66% (1719/2589)
Vlookupの式を変えたほうがいいと思いますので =IFERROR(VLOOKUP($E2,'単価シート'!$A$6:$D$8,2,False),"") この場合E列の入力がない場合やE列に入力した部品が一覧ない場合も空白になります。 strformula2 ='=IFERROR(VLOOKUP($E' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False),"")'; あと品番の時と同じように部品単価も変更して元に戻すのでしたら if(myColumn==1 && myRow>=2 ){ を if((myColumn==1 && myRow>=2) || (myColumn==5 && myRow>=2) ){ に変更してください。 あと、確か前回3行目がうまく動かなかったと思いますが、原因は分かりましたか。