• ベストアンサー

エクセル2000:VLOOKUPについて質問

VLOOKUPについて質問です。 使う行の中にブランク(なにも入っていない)セルがあるのですが、VLOOKUPを使って返されてきたブランクのセルが0(ZERO)で表示されてしまいます。 元のワークシートが、ブランクとZEROが混在している(使い分ける)仕様になっているため、ブランクはブランクのまま表示させたいのですが、対策はあるでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.8

こんにちは。#7です。 >それではあまりにもおんぶにだっこで申し訳ないので、 ・・・ >VBAについて書かれているビギナー向きサイトがありましたら、 >そちらを教えていただけないでしょうか そうですか。控えめな方ですね^^; それでは、VBA関連の参考サイトをご紹介しておきます。 MOUG.Net  http://www.moug.net/ VBA入門用として評判の高い書籍を書いていらっしゃる、 大村あ○しさんの主催するサイトです。 なにを隠そう、わたしも初心者のころ、 この方のテキストでVBAを学びました。 マイクロソフト ヘルプとサポート  http://support.microsoft.com/default.aspx?LN=JA 原因不明のエラーに直面したとき、 やはり頼りにするのは開発元です。 FAQからバグ(仕様?!)に関する情報まで、 非常に詳細な情報が得られます。 丹念にさがすと、意外に?初心者にもわかりやすい書き方で 図解入りで解説したページもあります。 ほかにも、検索エンジンで探すと山のように引っかかります。 VBA便利帳  http://www2s.biglobe.ne.jp/~iryo/ Excelファンクラブ  http://www.fuji.ne.jp/~excelyou/

bari_saku
質問者

お礼

こんにちは。お礼が遅くなりまして…。 あくまで希望的憶測なのですが、参考書の類があれば何とかなりそうな気がしますので、まずは自力でやってみようと思います。 壁にぶち当たった時は、遠慮なくまたこちらに質問させて頂きますのでご安心(?)下さい。 何度も回答して頂きまして、ありがとうございました。

その他の回答 (7)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.7

こんにちは。 #3です。 数式をスマートにしたい、ということですが、 ワークシート関数の組み合わせで条件が複数となる場合、 式が長くなるのは、いたしかたありません。 もちろん、理想論を振りかざせば式が短いに越したことはないのですが。 ところでbari_sakuさんはVBAはお使いになれますか? どうしても深刻な理由で式を短くしたいということであれば、VBAを使って そのブックのみで使用できる「ユーザー関数」というものを作ることができます。 ユーザー関数を組み込むと、たとえば、  =MYLOOKUP(A1,B4:D100,1,FALSE) というひとつの条件式だけで、  ブランクのとき  エラーのとき  それ以外のとき で異なる処理を返す、独自のLOOKUP関数を作成することが可能です。 もしご希望でしたら補足してください。 補足があれば、作成してみます。

bari_saku
質問者

補足

こんにちは。 No.6の方のお礼欄にも書きましたが、VBAという言葉はじつは初耳です(^^;) 「作成してみます」だなんて・・・本当にありがとうございます!!(感涙) では早速お願いします・・・と本当は平身低頭したいところなのですが、それではあまりにもおんぶにだっこで申し訳ないので、もしhappypointさんご推薦の、VBAについて書かれているビギナー向きサイトがありましたら、そちらを教えていただけないでしょうか。 使いこなせればとても便利そうなので、これを機会に少しかじってみようかと思います。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

関数のネストも2段までと自分で決めています。 関数の値によって、左右したい時、2度同じ式が現われる(入力する)のも好みではないです。 VBAなら Sub test01() d = 10 For i = 1 To d If Cells(i, "A") = "" Then Else Cells(i, "b") = WorksheetFunction.VLookup(Cells(i, "A"), Range("c1:d5") _ , 2, False) End If Next i End Sub dは最下行の行数を指定します。

bari_saku
質問者

お礼

こんにちは。 No.7の方も言及されていますが、これがVBAというものなのですね。 始めて見ましたが、昔COBOLのプログラミングをやっていたせいか(年がバレる・・・)何となく何をいわんとしているかはわかるような気がします。 詳細なご回答、ありがとうございました。

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.5

#02ですが、補足から 関数使用でネストを繰り返していると、もしその後修正があった場合に非常に複雑な式を解読するのが困難になると思うのですが。 私だったら、作業セルを一つ追加して先ほどの式を =IF(ISERROR(B4),"",B4) と変更し、作業セルを非表示にすればワークシートの形式は崩さずに出来ると思うのですが。 もしかして、関数でブランクにする以外に通常のブランクセルも存在しているとか、無いですよね。

bari_saku
質問者

補足

幸いにして「通常のブランクセル」はありません。 ネストを繰り返す件につきましても、私としても式を複雑にするのは本意ではないのですが、じ、実はですね。 VLOOKUPの式を入れる列が、連続して100行超あるのです。 (ちなみに行は1300です) 一列ならdejiji-さんの方法に即飛びつけるのですが、100列設定することを考えますと…何かよいお知恵はありますでしょうか。

  • free-goo
  • ベストアンサー率18% (28/155)
回答No.4

#3方に補足しているように、もう1つ条件を入れてはダメですか?? =IF(ISERROR(VLOOKUP(A1,B4:D100,1,FALSE)),"",if(VLOOKUP(A1,B4:D100,1,FALSE)="","",VLOOKUP(A1,B4:D100,1,FALSE))) bari_sakuさんが 作られた数式の間に もう1つ追加しただけです。最初のVLOOKで、該当ない場合は、空白表示 次に 該当するものがあったが、結果が空白の場合、0(zero)を表示するところ、IFの追加で、0(zero)であれば、表示しないってしたんですが、こんなんじゃないですか???? 間違っていたら ごめんなさい・・・・・・・

bari_saku
質問者

補足

半泣き状態だった私も、ない知恵を振り絞ってひとつ考えてみました。これでも大丈夫でしょうか? =IF(OR(ISERROR(VLOOKUP(A23,B4:DL306,19,FALSE)),ISBLANK(VLOOKUP(A23,B4:DL306,19,FALSE))),"",VLOOKUP(A23,B4:DL306,19,FALSE)) 後で手直しする可能性を考えて、なるべくスマートな式にしたいのですが、ここまで長くなるとスマートもヘッタクレもないような……

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.3

こんにちは。 ISBLANK関数でブランクかどうかを判別し、 IF関数でブランクか否か判断させます。 以下の数式は、 VLOOKUPの結果が「ブランク」の場合のみ、 ""(長さ0の文字列)を返します。 セルの番地は適当に変更して使用してください。 =IF(ISBLANK(VLOOKUP(C1,A1:B3,2,FALSE)),"",VLOOKUP(C1,A1:B3,2,FALSE))

bari_saku
質問者

補足

こんにちは。 実は、表示にあたってさらに「エラーの場合はなにも表示しない」という条件があったりします。 よって現在は =IF(ISERROR(VLOOKUP(A1,B4:D100,1,FALSE)),"",VLOOKUP(A1,B4:D100,1,FALSE)) ……という式になっているのですが、さらにISBLANK関数を付け加えるとなると…… おそらく、OR関数とISERROR関数とIF関数を使って、「エラー又はブランクの場合は""を表示し、そうでない場合はVLOOKUPで該当するセルの内容を表示させる」という式を作ればいいと思うのですが、私の知識ではその案を出した所までが限界です。 どうか引き続き、お知恵を貸していただけないでしょうか。

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.2

式で別セルを参照するとブランクがゼロになって返ってきます。これをブランクにするにはもう一つ参照セルを作れば解決するのですが。 A、B列にVLOOKUP関数の範囲があるとすると、C列に=IF(B1<>"",B1,"")と入れ、この列を返すようにすれば0とブランクが区別できます。

noname#49904
noname#49904
回答No.1

 =VLOOKUP(の中に返す答えをIF(…,"",IF(…,0 のように検出される答えの中の0とブランクを両方IF文の入れ子にすれば可能かと、やってみてないので自信なしです

bari_saku
質問者

お礼

こんにちは。回答第一号、恐れ入ります。 関数はまだまだ使うようになったばかりで、改めてエクセルの深遠さを感じています。 今日も別の仕事の合間に、ない知恵をしぼって、頭の中で一生懸命式を組み立ててました。 もう少し粘ってみようと思います。ありがとうございました。

関連するQ&A

  • EXCELのVLOOKUPを有用に使いたいのですが

    すみません。どなたか教えてください。 たとえばA1のセルに以下の値があったとします。 <abc>1<abc> このうちの1の部分をA2のセルに表示したいときは=MID(A2,6,1)で表示できました。別のシート(仮にsheet2)に例えばA行に1から昇順に番号が振られていてB行にデータが入っていたとします。VLOOKUPを使ってsheet2のB行を表示したいときは=VLOOKUP(A2,Sheet2!A:B,2,FALSE)でできると思ったのですがエラー表示になってしまいました。A2のセルを更にコピーして例えばA3に形式を選択して貼り付けで値を選択して1を表示してから=VLOOKUP(A3,Sheet2!A:B,2,FALSE)をするとB行の値が表示されるのでA2は1とみなされてないということになるかと思うのですが、A2内で1とみなすようにできる関数はないでしょうか?

  • EXCELのVLOOKUPで

    アンチョコを見てC8のセルに「1直」と入力したら 勤務時間というシートのA列からI列までの中から2番目の行に あるデータを表示するということを次のように設定できました。 (説明あってるかな?) IF(C8="","",VLOOKUP(C8,勤務時間!A:I,2,FALSE))←D9のセルに入力 それで「直休」とC8のセルに入力した場合、 A~Iまでの行には何も表示してほしくないのです。 勤務時間のシートにはもちろん空白になってます。 ところが「直休」を選択するとA~Iに「0(ゼロ)」が表示されてしまいます。 「直休」と入力したらA~Iを空白にすることはできませんか? またできるならなんという式を入れればいいのでしょうか? よろしくお願いします。 わからないことがあればもちろん補足いたします。

  • エクセルのVLOOKUPについて

    VLOOKUPで別のシートのセルから数字を引っぱってくる設定をしたのですが、その参照するセルが空白だった場合、0が表示されてしまいます。 空白のときは空白にしたいのですが、以下の関数にどう付け加えればいいですか? =VLOOKUP(B2,Sheet1!B4:I52,8,0)

  • VLOOKUPがうまく行かない

    VLOOKUP関数でSheet1のA2セルに=VLOOKUP(B2,Sheet1!$A$1:$B$22,1)と入力すると、012というコードが変えてこないといけないのですが、Sheet1の1行目の最終行のデータを持ってきてしまいます。昇順に並べ替えもしているのに、何故でしょうか?

  • エクセル VLOOKUP関数?を使ってこのような事が出来るか知りたいです。

    Sheet1の2行目A~D列に 1 2 5 8と入っています。 Sheet2の   〃   に 3 2 5 9と入っています。 Sheet3の   〃   に 9 3 5 1と入っています。 Sheet4のA1にSheet1 と入力した際、B1~E1のセルに、Seet1に入っていた 1 2 5 8と表示させたいのですが、出来ますでしょうか? 私が思うにVLOOKUP関数?と思いますが、どんな式にしていいのかわかりません。 それか、他の関数の場合はどうすればいいのか?付け足さなくてはいけな出来ないものがあればそれも知りたいと思います。 宜しくお願いします。

  • VLookUp関数について教えて下さい。

    至急お願いします! 現在下記の様な状態です。 ・VLookUpの設定シート A行 B行 ・ ・ ・ ・ ・ ・ 052 △△銀行 ・ ・ ・ ・ 0052 ●●社 ・別シート(社内伝票です) セルA1 セルB1 052 △△銀行 ※セルA1に052 と入れるとVLookUp関数により、B1には△△銀行 と表示されます。 但し、同じセルにB1に●●社 と表示させたいが為に、A1に0052 と入れると、052 と認識されて(052と表示される)B1に △△銀行と表示されてしまいます。 うまく052 と入れたら△△銀行 0052 と入れたら●●社 と表示分けされる方法はないものでしょうか? 初心者なので、分かりやすく教えて頂けると助かります。 宜しくお願い致します。

  • エクセル関数VLOOKUPのことですが

    VLOOKUPで別のシートのセルから数字を引っぱってくる設定をしたのですが、その参照するセルが空白だった場合、0が表示されてしまいます。 空白のときは空白にしたいのですが、以下の関数にどう付け加えればいいですか? =VLOOKUP(B2,Sheet1!B4:I52,8,0)

  • EXCEL の VLOOKUP で 結果は正しいのですが・・・・

    EXCEL の VLOOKUP で 結果は正しいのですが・・・・ 2SHEETの EXCEL BOOK で 1SEET目は「台帳」と言う名前です。 検索値は1SHEET目にあり、検索対象は2SHEET目にあります。 2SHEET目の検索範囲に「早得」と名前をつけてあります。 検索の結果は検索値があるか/無いかが判れば良いので、検索範囲の1カラム目(検索キー)を返すようにしています。 2SHEET目のY列に以下の式を入力すると、 結果が返ってくるのですが、 =IF(ISNA(VLOOKUP(台帳!G6,早得,1,0)),"",VLOOKUP(台帳!G6,早得,1,0)) SHEET2上に検索値があると、その同じ行に結果を返したいのですが、違う行に結果が表示(返って)されてしまいます。 例: Sheet1(台帳)のG25の値が、 Sheet2の「早得」の22行目にあった場合、 Sheet2の15行目に結果が表示されるような感じで規則性がつかめませんが、ちゃんと存在するものだけSheet2の関数を入れているY列に返ってきます。正しい結果が返ってきているようなのですが、表示される行がおかしなところに表示されてしまいます。 何がまずいのかさっぱりわかりません。 環境は Windows XP の Office 2003 です。 よろしくお願いいたします。

  • Vlookup関数について

    Vlookup関数での質問です。 検索範囲内に日付表示の項目があります。元の表は日付表示になっていても、Vlookupの式で返したい値が日付の場合、式を入れたセルに、日付では表示されずシリアル値で表示されます。文字列の場合はそのまま文字列の表示となります。 これはエクセルの仕様なのでしょうか?シリアル値になっているものを表示形式の変更によって日付表示に直すしかないのでしょうか?

  • エクセル VLOOKUPについて教えてください

    宜しくお願いします。 エクセルの関数で結果が空白の時『0』と表示させ、次のシートの計算に反映させたいのですが、空白の為計算できないようです。よい方法を教えてください。 セルに入っている式は IF(ISNA(VLOOKUP(A1,○○!$A$1:$F$50,5,0)),"0",(VLOOKUP(A1,○○!$A$1:$F$50,5,0)) この式が一行に3箇所入っており、一つに数字が入ると残りの2つのセルは空白になってしまいます。 一つのセルに数字がはいったら、残りのセルに『0』と表示させたいのです。 どうぞ宜しくお願い致します。

専門家に質問してみよう