みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

スクリプトの#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が
表示されなくなりますか?
宜しくお願いします。

投稿日時 - 2019-04-17 13:02:31

QNo.9607679

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

今、気が付きました。前回からvarが抜けてました。トリガーの方で前回はエラーが出なかったのに今回は出たので気が付きました。

strformula ・・・・・・・・・・

var strformula ・・・・・・・・・・・

strformula2 ・・・・・・・・・

var strformula2 ・・・・・・・・・

にそれぞれ変更してください。

あと、ちょっと気になったのですが、単価シートの品番と部品が同じ列になっていますが、それぞれ増えたとき、コードの参照先に幅を持たせていないので都度コードを書き直さなくてはいけないですよね。
列を別にして100行くらいまで参照先を増やしておけばいかがでしょう。
品番をA$2:$D$100、部品をF$2:$I$100
みたいな感じです。おおきなお世話だとは思いますが…m(__)m

投稿日時 - 2019-04-17 14:52:40

ANo.1

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行目がうまく動かなかったと思いますが、原因は分かりましたか。

投稿日時 - 2019-04-17 14:04:33

あなたにオススメの質問