- ベストアンサー
if文+v lookupの組み合わせエラー
- 数値と本数を入れる表とvlookupの参照元の表があります。
- if文とvlookupを組み合わせて、中国産または国産の場合にそれに対応する数字を計算したいです。
- しかし、指定した式を入れると正しくないというエラーメッセージが表示されます。なぜでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
- bunjii
- ベストアンサー率43% (3589/8249)
>下記の式を入れたら”名前は正しくありません”と出ました。なぜでしょうか? Excel 2013で検証してみました。 提示の数式を入力すると貼付画像のエラーが発生します。 数式の中にIF関数の引数と判断できない記述があり、それを定義された名前と解釈すると命名規則に合わないものであることが原因です。 IF関数の第2引数と第3引数の数式らしき記述を[]で括っているのは何のためですか? 第2引数 [$AD19*(VLOOKUP($AC19, $C33:$D36,2,FALSE))] ↓ $AD19*(VLOOKUP($AC19, $C33:$D36,2,FALSE)) 第3引数 [$AD19*(VLOOKUP($AC19, $C$28:$D$31,2,FALSE))] ↓ $AD19*(VLOOKUP($AC19, $C$28:$D$31,2,FALSE)) 上記のように修正すればエラーが無くなります。 しかし、数式中に空白文字が含まれていますので含めないよう習慣づけることをお勧めします。
お礼
解答ありがとうございます。
補足
すみません、エクセルさんのサジェスチョンは [真の場合] と [ ]となっていたのでそうしました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>C列に数字、D列に文字が入っていてますが と言っている方もおられる様ですが、 >19鉛筆 2 100 中国 の先頭にある19は「セルに入力されている数値」ではなく、おそらく行番号ではないかと思います。 つまり、C19セルに「鉛筆」、D19セルに「2」、E19セルに「100」、F19セルに「中国」と入力されていて、G19セルは空欄で何も入力されていないという事だと思われます。 ですから、ずれているのはC列とD列ではなく、 $AG19=”中国” という、「中国」と入力されているか否かを判定している箇所で参照しているセルを 、AG列のセルとしている事が間違いで、正しくは $AF19=”中国” とすべきだと思います。 従いまして御質問の数式を、少なくとも次の様に変更しなければ正しく動作しないと思われます。 =if($AF19=”中国”, $AD19*VLOOKUP($AC19, $C33:$D36,2,FALSE), $AD19*VLOOKUP($AC19, $C$28:$D$31,2,FALSE)) 但しこれだけではAC19セルが空欄である場合や、AC19セルに入力されているのと同じ値が入力されているセルがC列に存在しなかった場合、AD19セルに数値以外のデータ(文字列データ)が入力されている場合、等にはエラーとなってしまいますし、 AF19が「日本」となっていなくとも「中国」以外の値が入力されていたり、空欄となっていたりした場合にも、$C$28:$D$31の範囲から検索された値を使って、AD19の値と掛け合わせてしまいます。 その様な事を防ぐために次の様な関数にされた方が良いと思います。 =IF(AND($AC19<>"",$AF19<>"",ISNUMBER($AD19)), IFERROR($AD19*VLOOKUP($AC19,CHOOSE(MATCH($AF19,{"日本","中国"},0), $C$28:$D$31, $C33:$D36),2,FALSE),""),"") 尚、もし国名の下に続いている「鉛筆」~「マジック」等の品目が並べられている行の範囲が、どの国のデータにおいても同じ行数(御質問の例の場合は「鉛筆」~「マジック」の4行)であると決まっている場合には、 $C$28:$D$31, $C33:$D36等の様に、一々、セル範囲を指定しなくとも、次の様にする手もあります。 =IF(AND($AC19<>"",$AF19<>"",ISNUMBER($AD19),ISNUMBER(MATCH($AF19,{"日本","中国"},0))), IFERROR($AD19*VLOOKUP($AC19,OFFSET(INDEX($C$27:$C$36,MATCH($AF19,$C$27:$C$36,0)),1,,4,2),2,FALSE),""),"")
補足
長文させて申し訳ないです。それは行番号でした。すみません。
- kagakusuki
- ベストアンサー率51% (2610/5101)
出たのは ”名前は正しくありません” 以外にも有った筈です。 "-名前の先頭が、英数字、ひらがな、カタカナ、漢字、またはアンダースコアではありません。" "-名前に空白またはほかの無効な文字が含まれています。" "-名前゛Excelの組み込み名またはブック内の他のオブジェクト名と競合しています。" という表示は現れていませんでしたか? 質問者様の関数式には [ と ] という2種類の無効な文字が含まれているため、Excelに受け付けられなかったのです。
お礼
回答有難うございました。
補足
省略してすいません。ただ、皆さんに指摘されるまで、どれを指摘していたのかさっぱり見当が付かなかったのです。エクセルの野郎がIF(論理式、[真の場合], [偽の場合])と提示しやがったんで!
- aokiii
- ベストアンサー率41% (63/151)
if($AG19=”中国”, [$AD19*(VLOOKUP($AC19, $C33:$D36,2,FALSE))], [$AD19*(VLOOKUP($AC19, $C$28:$D$31,2,FALSE))]) ではなく IF($AG19="中国", ($AD19*(VLOOKUP($AC19, $C33:$D36,2,FALSE))), ($AD19*(VLOOKUP($AC19, $C$28:$D$31,3,FALSE)))) としてください。 Excelは数式中の大括弧中括弧小括弧を区別できません(配列数式に自動で付く中括弧は別)ので、質問の大括弧は名前の一部として認識しているようです。
お礼
思い通りいけました。有難うございます。
補足
そうだったんでんすね。if文入れる時にエクセルが提示するのが [ ] だったもんで、わかりませんでした。
- mshr1962
- ベストアンサー率39% (7417/18945)
>下記の式を入れたら”名前は正しくありません”と出ました。 []を使ってるからでしょう。EXCELでは、検索以外では[]は使いません。 あと、VLOOKUPの参照の列が間違えてます。 C列に数字、D列に文字が入っていてますが、 名称で検索して数字を計算に使うのなら、 C列とD列を入換えないと、見つからないとして#N/Aエラーになります。
補足
すいません、C列は行番号です。紛らわしくてすいません。実際は数字は商品の右に入ってます。
補足
画像と赤線まだ挿入して頂いて恐縮です!!