• 締切済み

スプレットシートで#N/Aを表示させない

kkkkkmの回答

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.1

それぞれのVLOOKUP関数を以下のように変更してください。 '=IFERROR(VLOOKUP($A' + myRow + ',\'単価シート\'!$A$2:$D$4,' + i + ',False),"")'; '=IFERROR(VLOOKUP($E' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False),"")';

関連する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が 表示されなくなりますか? 宜しくお願いします。

  • スプレッドシートのVLOOKUPについて

    スプレッドシートで1つ教えて下さい。 A列のプルダウンで選択すると別シートの品番単価表を参照し B列からD列に単価が表示されるようにしました。 同様にE列プルダウンで選択すると別シートの部品単価表を参照し F列からH列に単価が表示されるようにしました。 単価の値を変更後、再度プルダウンから値を選択すると 再度参照するように前回いろいろと教えて頂き下記のようなコードを書きました。 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($G' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False)'; sheet.getRange(myRow, i + 6).setFormula(strformula2); } } }; しかしE列に値がなくてもセットしてしまい #N/Aが表示されてしまいます。 例えば 単価シート(2から4行目は品番単価、6から8行目は部品単価) 品番  単価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   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が 表示されなくなりますか? 分かる方おられましたら 教えて頂けないでしょうか。 宜しくお願いします。

  • #N/A の消し方

    セルI11に =INDEX(形材!D:D,MATCH(B11&C11&D11,INDEX(形材!$E$1:$E$10000&形材!$F$1:$F$10000&形材!$G$1:$G$10000,),0))&"" 上記の関数だと、B、C、Dに何も入力しなくてもI11は空白なのですが、 違うシートのセルH7に =INDEX(部品!D:D,MATCH(B7,INDEX(部品!$E$1:$E$10000,),0))&"" を入れると、Bに何も入力しないとH7に#N/Aが表示されます。 #N/Aを表示させない方法はありますか

  • エクセル 関数 ISERROR VLOOKUP

    エクセル関数でご教授お願いします。 今「LIST」シートのA列に品番、B列に単価が入力されています。 これを「入力」シートのA列1行目に品番を入力して、B列1行目に単価を引っぱってくる関数を作りました。 以下関数です。(「入力」シートのB列の関数です) =IF(ISERROR(VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)),"品番ミス",VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)) 品番が間違っている場合は”品番ミス”と入力されます。 この状態で問題なのは、入力シートのA列に何も入力されていない時に、B列に品番ミスと入ってしまう事です。 何とか、空白にしたいのですがいい方法はありませんでしょうか?

  • Excelデータ比較

    エクセルにおいて、sheet2のA列、B列、C列をsheet1のA列、B列、C列と比較して、一致した場合sheet2のD列に書かれている納入先企業名を下記のように自動入力したいのですが、どうやってsheet2のD列に関数を組めばよいのか分からないので教えてください! 【sheet1】 A列 B列 C列 D列 1行 001 AAAA 部品1 A社 2行 002 BBBB 部品2 B社 3行 003 CCCC 部品3 C社 4行 004 DDDD 部品4 D社 5行 005 EEEE 部品5 E社 6行 006 FFFF 部品6 F社 7行 007 GGGG 部品7 G社 【sheet2】 A列 B列 C列 D列←この列に取引先企業が入るようにする 1行 001 AAAA 部品1 A社←sheet1にあるのでA社と入る 2行 008 HHHH 部品8 #N/A←sheet1にないので#N/Aとなる 3行 004 DDDD 部品4 D社 4行 009 IIII 部品9 #N/A 5行 005 EEEE 部品5 E社 6行 002 BBBB 部品2 B社 7行 010 HHHH 部品10 #N/A

  • #N/Aの表示、非表示について

    excel2010 あるwebサイトにvlookup関数の高速化という内容が掲示されていたので、 それを使用してみました。 そこで、ちょっとおかしな状況になっているので、 それに関する質問です。 構成 SHEET5に下記の様なデータがあります。 A列にALLコード、B列にデータです ALLコード          データ 0109S10100100B60   722 0110H10100110B32   18 0110S10100020B62   0 0110S10100040B62   77 0110S10100050B62   19 0110S10100070B62   35 0110S10100090B62   16 0110S10100100B60   200 0111H10100110B32   41 0111S10100030B62   68 0111S10100040B62   70 0111S10100050B62   32 0111S10100070B62   60 0111S10100080B62   17 0111S10100090B62   25 0111S10100100B60   100 0112H10100110B32   14 0112H20100020B41   11 0112H20100030B42   89 0112H20100040B43   23 0112H20100050B42   27 0112H20100070B44   5 0112H20100080B40   17 0112S10100010B62   11 0112S10100020B62   12 0112S10100030B62   69 上記ALLコードの先頭4桁はシリアル番号になっており、 実際のコードは、それ以降の12桁なので、異なるシートにVLOOKUP関数で下記の様に マトリクス表にしました。 A列:コード B列:0109 C列:0110 D列:0111 でB2セルに =IF(INDEX(Sheet5!$A$2:$A$1000004,MATCH(CONCATENATE(B$1,$A2),Sheet5!$A$2:$A$1000004,1),1)=CONCATENATE(B$1,$A2),VLOOKUP(CONCATENATE(B$1,$A2),Sheet5!$A$2:$B$1000004,2,TRUE),NA()) という式を入れて、対象範囲B2:D15までコピーしています。 コード          0109   0110   0111 S10100081B62   #N/A   #N/A   #N/A S10100091B62   #N/A   #N/A   #N/A S10100110B69   #N/A   #N/A   #N/A S10100100B60   722   200    100 S10100120B60   #N/A   #N/A   #N/A S10100010B62   #N/A   #N/A   #N/A S10100020B62   #N/A   0     #N/A S10100030B62   #N/A   #N/A    68 S10100040B62   #N/A   77     70 S10100050B62   #N/A   19     32 S10100060B62   #N/A   #N/A   #N/A S10100070B62   #N/A   35     60 S10100080B62   #N/A   #N/A    17 S10100090B62   #N/A   16     25 N/Aがあると見づらいので、 式のNA()を削除し、 B2セル =IF(INDEX(Sheet5!$A$2:$A$1000004,MATCH(CONCATENATE(B$1,$A2),Sheet5!$A$2:$A$1000004,1),1)=CONCATENATE(B$1,$A2),VLOOKUP(CONCATENATE(B$1,$A2),Sheet5!$A$2:$B$1000004,2,TRUE),) で対象範囲コピーしたところ、下記の様な結果になりました。 コード          0109   0110   0111 S10100081B62   #N/A     0      0 S10100091B62   #N/A     0      0 S10100110B69   0       0      0 S10100100B60   722     200     100 S10100120B60   0       0       0 S10100010B62   #N/A     0      0 S10100020B62   #N/A     0      0 S10100030B62   #N/A     0      68 S10100040B62   #N/A     77      70 S10100050B62   #N/A     19      32 S10100060B62   #N/A     0       0 S10100070B62   #N/A     35      60 S10100080B62   #N/A     0       17 S10100090B62   #N/A     16      25 0110と0111は正しく表示しているのですが、0109列は#N/Aが残っています。 コピーペーストを間違ったわけではありませんが、 何故0109だけ#N/A表示が残っているのか、想定される原因を教えていただきたく。 ちなみにALLコード先頭に 0108S10100100B60 888 を追加して1列増やすと、 コード       0108   0109   0110   0111 S10100081B62   #N/A   0     0     0 S10100091B62   #N/A   0     0     0 S10100110B69   0     0     0      0 S10100100B60   888    722    200   100 S10100120B60   0     0     0      0 S10100010B62   #N/A   0     0     0 S10100020B62   #N/A   0     0     0 S10100030B62   #N/A   0     0     68 S10100040B62   #N/A   0     77     70 S10100050B62   #N/A   0     19     32 S10100060B62   #N/A   0     0      0 S10100070B62   #N/A   0     35     60 S10100080B62   #N/A   0     0     17 S10100090B62   #N/A   0     16     25 の様になり、0109の#N/A表示は解消されました。 EXCELの仕様なのでしょうか? とりあえず、ダミー列のデータ挿入で非表示にすれば、 見た目上は、すっきりですが、何か異なる方法があれば教えていただきたく。 ※実際は、もっと行・列共に数が多いのですが、抜粋で例をあげています。

  • Excelで#N/Aエラーの対策

    Sheet1の表の一部をSheet2に抜粋して表示したくて =IFERROR(INDIRECT(A1),"") と抜粋を表示するSheet2のセル範囲に配列数式として入力しました。 式内の参照先A1には、「Sheet1!A1:E5」「Sheet1!G1:D7」等を示す範囲の名前を記入しています。 画像では「範囲1」となっています。その名前を変更することで、抽出する範囲も変更されます。 「A1:E5」なら5行5列、「G1:D7」なら6行7列のように抽出する範囲の大きさが異なるので 上記の配列数式はその最大の範囲6行7列の大きさに合わせて入力しています。 ここで5行5列分を抽出すると、画像の様に最大範囲に満たない部分に#N/Aエラーが出るため、 その対策として IFERROR関数を使用したわけですが、エラー対策前後で変化がありません。 IFNA関数や、IF関数とISERROR関数のネストでも同様です。IS関数ではエラーかどうかは判別できているようです。 このケースではエラー対策の関数は無効なのでしょうか。 尚、条件付き書式で「エラーなら文字色を背景色に同じ」としてごまかすことはできますが、 その値を別の引数として使用するため、可能なら根本的にエラー対策したいところです。

  • 数字と#N/Aの足し算

    H74=VLOOKUP(G74,[*****.xls]***!$J$121:$Q$180,6,FALSE) これが、8705535です。 I74=VLOOKUP(G74,[*****.xls]***!$J$181:$Q$240,6,FALSE) これが、#N/Aです。 =SUM(H74+I74)とやると、#N/Aになります。 逆の場合もあります。 H74の列が、#N/Aとなり、I74の列が、整数になる行もあります。 #N/Aのところを0にする方法か、 =SUM(H74+I74)のとき、#N/Aにならない方法を教えてください。 上の例でいうと、8705535+#N/A=8705535で、 =8705535が出したいんです。 よろしくお願いいたします。

  • オートフィルタをマクロで書いたのですが、一部うまくいかなくて困っていま

    オートフィルタをマクロで書いたのですが、一部うまくいかなくて困っています。 わかる方がいらしたらぜひご教授ください。 商品情報というブックがあり、抽出シート(1枚目)と2枚目のシートにデータが入っています。 2枚目のシートのフィールド名を抽出シートのA1を基準に貼り付けています。 条件をA1:I2に入力し、2枚目のシートの条件に合うものを抽出シートのA5以降に取り出すマクロを書いています。次回マクロを起動させたときにA5以降にデータがあれば削除させます。 そこで問題なのですが、A1:I2の条件だとA列からI列までのフィールド名に対する条件を 1行入力することができますが、同じ行になるのでAND条件になってしまいます。 本当は条件列をI3までにして、条件を2行にわたって書いて または条件も検索したいのです。 ただ、または条件は入力する場合と入力がない場合があります。 条件をA1:I3(3行目)に変更してマクロを実行すると、または 条件がある場合はちゃんとでるのですが、条件がない場合はすべてでてきてしまいます。 どのようにすればA1:I3に変更して、2行目と3行目に条件があった場合はその条件で該当するものを 抽出し、特に3行目に条件がない場合は2行目だけの条件で抽出できるのでしょうか? (2行目のAnd条件検索と3行目のまたは条件検索ができますでしょうか?) Dim myRow1 As Long, myRow2 As Long myRow1 = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row myRow2 = Sheets("抽出").Range("A" & Rows.Count).End(xlUp).Row If myRow2 >= 5 Then Sheets("抽出").Range("A5:I" & myRow2).ClearContents Sheets("抽出").Range("A5:I" & myRow2).ClearFormats End If Sheets(2).Range("A1:I" & myRow1).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("抽出").Range("A1:I2"), CopyToRange:=Sheets("抽出").Range("A5"), Unique:=False End Sub

  • VLOOK関数で#N/Aエラーの回避法

    お伺いします。 sheet1のA列に商品コード、B列に前月実績があるとします。 sheet2に10月実績表があるとします。 sheet1のB1セルに =VLOOKUP(A1,sheet2!$A$3:$H$1200,5,0) が入力されています。 10月に実績がゼロの時はsheet2の表にはその商品コードの行がない。 これを前提にするとsheet1のB1セルには#N/Aが表示されてしまいます。 すると合計ができません。#N/A を空白または実績なしと表示したいのです。 また、合計値を正確に出したいのです。 どうか、お知恵をお貸しください。