質問: 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の仕様なのでしょうか? とりあえず、ダミー列のデータ挿入で非表示にすれば、 見た目上は、すっきりですが、何か異なる方法があれば教えていただきたく。 ※実際は、もっと行・列共に数が多いのですが、抜粋で例をあげています。
回答: 高速化したいから二分検索(true検索)にしたということでしょうか。 確かにその量なら分かりますけど...... ただエラーの条件指定が不足しています。sheet5の a列は昇順にデータが 並んでいますが 先頭の a2よりも小さな値を検索値にした場合にもエラー が起きます。 =if(b$1&$a2