• ベストアンサー

[Excel VBA 2003]VBA上でVlookupする方法

レンジ内に特定の文字列が存在するかをVBA上で判定したいのですが VBA上ではVLookUpが使用できません。VBAでVLookUpのかわりとなる 関数または方法はありますか?

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

  • ベストアンサー
  • Tofu-Yo
  • ベストアンサー率33% (36/106)
回答No.1

"WorksheetFunction."を頭につけると大抵の関数は使えます。 たとえばA1~A7から文字列"b"を探して対応するB列のテキストまたは値を返す場合、 WorksheetFunction.VLookup("b", Range("a1:b7"), 2, 0) ただしたまに使えないのもあります。LENBなんかはこの方法で使えないくせにVBA関数で用意されているLENBはエクセルワークシート関数と意味が異なっていて、結局自力で(ユーザー定義関数で)定義するしかなかった記憶があります。

fasdfasdf
質問者

お礼

動きました。エラー時の処理はもうひと方の回答を参考にしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

検索値がヒットしたあとどうしたいのかが書いてないので何ですが、、、 Vlookupも使えますがご存知のようにVLOOKUPは値を返しますので 検査値のあるセル番地を取得したいのであれば適しません。 そのときは、検索専用のFindメソッドを使います。 例えば、A列で、"東京"の入力されているセルを取得した場合は、 '----------------------------- Sub test()   Dim myKey   Dim FoundCell As Range   myKey = "東京"   Set FoundCell = Range("A:A").Find(myKey, , xlValues, xlWhole)      If Not FoundCell Is Nothing Then        MsgBox FoundCell.Address & " にありました"      Else        MsgBox "なし"      End If End Sub '---------------------------- 詳しくはFindメソッドのヘルプを参照のこと。 以上です。  

fasdfasdf
質問者

お礼

もうひと方の回答にエラー時の処理が入っていなかったので参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vbaでvlookup

    エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。

  • 連動するvlookupかVBAを教えて下さい。

    現在、シート2にデータ一覧表(列が100程度/行は無数です)が存在しており、シート1にvlookupで反映させています。(シート1は行ごとの印刷用) 今回、列データの追加・削除を行う事になりました。 今まではvlookupで =VLOOKUP(Z3,一覧表,81,FALSE)のように抽出していましたが、 この場合、シート2の列を挿入するたびに設定しなくてはいけません。 ※Z3にはシート2のA列(ID)を手入力します。 シート2の列に連動してシート1の関数を変化させることは出来ますか? もしくは、VBAなら可能なのでしょうか? ちなみに、シート1ではシート2のデータが無秩序に並んでいます。 何か良い方法を教えて下さい。。。。よろしくお願いいたします。

  • Excel2007 VLOOKUP関数の相談

    もし検索不足で重複した質問でしたら申し訳ありません。 VLOOKUP関数について、シート「A」に文字列を入力したら シート「リスト」シート上に同じ文字列があれば その文字列関係の情報を持ってくるというVLOOKUP関数を使用していました。 <使っていた関数> =IF(ISERROR(VLOOKUP(H306,リスト!A:B,2,0)),"",VLOOKUP(H306,リスト!A:B,2,0)) この入力する文字列が数字(別データからコピーして貼り付ける)に変わっただけなのですが、 何故か対象情報の抽出をしてくれません。 <使おうとしている関数> =IF(ISERROR(VLOOKUP(I2,データ0501!A2:F695,3,0)),"",VLOOKUP(I2,データ0501!A2:F695,3,0)) ネットで検索したのですが、関数情報が不足しているのか、 コピーした数字列の貼り付け方が間違っているのかわからない状況です。 恐れ入りますが解決策があればお教えいただければと思います。 どうぞ宜しくお願い申し上げます。

  • VLOOKUP関数をVBAで書くには

    EXCEL VBAの初心者です VLOOKUP関数をVBAで書きたいのですが、よくわかりません すいませんがどなたかご教授、願えないでしょうか? sheet1     sheet2 A    B  A    B      名称 CD    名称 CD 滋賀県 25     滋賀県  25 京都府 26     大阪府 27 大阪府 27 兵庫県 28     兵庫県 28 sheet2のA列をキーにsheet1のA列と照合して sheet2のB列にsheet1で一致した行のB列をコピーする VLOOKUP関数を使うと、sheet2のB2は =IF($A2="","",VLOOKUP($A2,Sheet1!$A$2:$B$5,2,0)) としたら、25を得ることができました VBAでする場合、どのように書けばいいのでしょうか? よろしくお願いします

  • 【Excel2007】VLOOKUP

    関数結果がエラーになってしまい困っています。 65000行分の商品リストシートに、別シートで作成したその商品に該当する区分を VLOOKUP関数で抽出しようとしたのですが、上手くいきません。 検索して欲しいJ2(文字列)と合致した情報は シート「データ」C列にあり、C列をもとに抽出して欲しい情報は選択した範囲の 左から5番目の列にあります。(全て文字列) ということで下記の関数を作成しましたが検索結果が空白で出てきません。 =IFERROR(VLOOKUP(J2&"",データ!$C$3:$G$12048,5,FALSE),"") 文字列前後に余分な空白・全角半角に相違はないのですが、 他に対処しなければならないことは何があるかお教えいただけないでしょうか。 とても困っています、恐れ入りますがどうぞ宜しくお願い申し上げます。

  • ExcelのVlookup関数で一致した文字のセルの番地を取得する方法

    ExcelのVlookup関数で一致した文字のセルの番地を取得する方法 プログラム(VBA)で、検索で使用する関数でVlookup関数というのがあるというのが最近知ったのですが、Vlookup関数は、検索するセルの範囲を指定して、検索対象の文字列が一致した場合、そのセルの内容(値)を返すという風に書いてあったのですが、値ではなく、そのセルの番地を取得する方法はあるのでしょうか? ありましたら、その方法を詳しく教えてください。Vlookup関数以外でも検索するコードがあるようですが、Vlookup関数に限った場合でよろしくお願いします。 回答よろしくお願いします。

  • Excel2013VBAでVLOOKUP条件付き

    いつもお世話になっております。 Excel2013VBAでVLOOKUP関数を使用して、商品名に対応した商品コードをとりたいのですがうまくいきません。 アクティブシートの表のA列、D列、G列に商品名を複数入力してあります。 テーブルシートのB列に同じく商品名があり、C列に商品コードがあります。 VLOOKUPを使ってテーブルシートから商品コードを取り出して、アクティブシートのA列、D列、G列の商品名の下の行に商品コードを入力するにはどうすればよろしいでしょうか? 条件として、テーブルシートのC列の商品コードは空白のものが存在する。その場合は処理する必要なし。 アクティブシート内の商品名の下の行が空白の場合のみ処理を行う。商品名が連続して入力してある箇所で商品コードが存在する場合は、メッセージでセル番地を表示して、処理を中断。ただし連続して入力してあっても、商品コードが存在しないものは問題なしとして次の処理を行う。 一部作りかけのものを提示します。また、下記コードはブレークポイントで停止しながらだと一応動作していましたが、普通に動かすとフリーズを起こします。すいません。 たびたびすいませんが、よろしくお願いいたします。 Sub VLOOKUP検索() Dim h As Range, ac As Range Application.ScreenUpdating = False Set ac = ActiveWindow.ActiveCell On Error Resume Next For Each h In Range("A:A,D:D,G:G") If h.Offset(1, 0) = "" Then h.Offset(1, 0) = Application.WorksheetFunction.VLookup(h, Worksheets("テーブル").Range("B:C"), 2, False) End If Next Application.ScreenUpdating = True ac.Select End Sub

  • Excel2000VBAでのセル参照について

    Excel2000のVBA自動記録である構文をつくりました。 その中で、セルやレンジを特定しているのですが (A1)や(A1:B10)とか.. その後シートの行や列を追加あるいは削除した時に、この部分を自動的に対象のセルやレンジに書き換わる方法というのはあるのでしょうか? (関数式なんかは、自動で参照するよう書き換わるのですが、そのようなイメージです) 初心者です。何卒よろしくお願いします。

  • vba vlookupについて

    VBAで範囲検索をしたくて、 vlookuを使おうと思ったのですが 1000~2000 2001~3000 3001~4000 4001~5000 5001~6000 6001~7000 7001~8000 8001~9000 9001~10000 このような表から 1237 を検索しようとすると失敗してしまいました(・・;) wskyu.Range("D24") = Application.WorksheetFunction.VLookup(kihon, .Range("D:H"), 5, True) このコードでエラーは起きず、 kihonに1237が入っています 1000 2001 ↑がD列です H列は 309 359 406 569 630 680 700 703 904 こんな感じです 思い通りにいけば1237を検索するので当てはまるのは1列目で 309が表示される予定だったのですが 実際やってみると630が表示されました、、、 なぜなのでしょうか そもそもVLOOKUPでこのような検索方法はできないのでしょうか? 補足として 最初はSELECT CASEを使い 1000~2000の間にあれば 309を表示 という風にしていたので 表などが間違っているのではないようです しかしそれだとコードがとても長くなってしまうので VLOOKUPにしようと思いました どうかよろしくお願いします!!

  • Excel VBAのVLOOKUP関数について

    Excel VBAのVLOOKUP関数について VBAでのVLOOKUPで他のブックを使用する場合の方法がわかりません。 ブックαにて参照したい他のブックβのパスやファイル名、シート、セルは保持しております。 同一ファイル内では取得することができたのですが、他のブックではうまくいきません。 また、VLOOKUP関数にて取得できた場合、取得したセルの下に1段、左に1段目のセルを取得したい場合どうすればいいのでしょうか? 環境はEXCEL2003です。 ご存知の方がいれば教えてください!