- ベストアンサー
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でする場合、どのように書けばいいのでしょうか? よろしくお願いします
- service_lu
- お礼率83% (5/6)
- Visual Basic
- 回答数4
- ありがとう数8
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAの場合、関数を使うと言うより、動作そのものを考えればよいと思います。 1.Sheet2のA2の値を取得 2.Sheet1のA列のA2の値と一致するセルを探す 3.一致した場合その行のB列の値を取得する 4.取得した値をSheet2のB2に入力する 5.1~4を必要な行数繰り返し処理する これをVBにすると Sub Macro1() For n = 2 To 5 '処理するSheet2の行数範囲 a = Sheets("Sheet2").Cells(n, 1) 'aにA列の値を代入 For m = 2 To 5 '検索するSheet1の行数範囲 If Sheets("Sheet1").Cells(m, 1) = a Then 'Sheet2のA列の値とSheet1のA列が一致した場合 v = Sheets("Sheet1").Cells(m, 2) 'vにB列の値を代入 Sheets("Sheet2").Cells(n, 2).Value = v 'Sheet2のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub のようになります。 あくまで一例です。
その他の回答 (3)
- fujillin
- ベストアンサー率61% (1594/2576)
VBA内でワークシート関数を使用するには、WorksheetFunctionを介することで可能になります。そうすれば、ぐるぐるまわさなくても1行で済みます。 (詳細はヘルプの「Visual Basic でワークシート関数を使用する」を参照) <例> myVar = Application.WorksheetFunction.VLookup("A2", "A2:B5", 2, 0) MsgBox myVar 例ではシート指定を省略してますが、対象シートを指定してください。 私の環境では、なぜかVlookupが取得できないので、確認はできませんが・・・ (オブジェクトに存在することは確認できるのですが、実行すると取得できない)
お礼
fujillinさん ありがとうございます WorksheetFunctionを使うと1行で表現できるわけなんですね。 勉強になりました。 ありがとう!
- qualheart
- ベストアンサー率41% (1451/3486)
ぐるぐる回す書き方ですね。 色々ありますよ。 例のようにFor...Nextは特定の変数に対して数値を代入して繰り返し処理を行う場合に使用できます。数値をCells指定の行数や列数に代入すれば、行ごとや列ごとに繰り返し処理ができるパターンですね。 For n = 2 To 5 ~ Next それ以外には「Do...Loop」があります。 これは条件が真になるまで続けるループ処理です。 今回の場合に当てはめると Do While Sheets("Sheet2").Cells(n, 1) = "" ~ n = n + 1 Loop のようにSheet2のA列に空白が存在するまで繰り返す、というような処理をすることもできますね。 そのとき、Loopの最後の「n = n + 1」と書いておくことで、繰り返す度にnの値を1つずつ増し1行ずつループ処理するようにすることができます。 ご参考まで。
- n-jun
- ベストアンサー率33% (959/2873)
エクセルマクロ(VBA)自動記録 http://excel.onushi.com/macro/auto.htm 数式を入れたいのであれば記録を取ってみるのも参考になるかもです。
お礼
n-jun さん、ありがとうございます。 自動記録も参考にして勉強してみます。
関連するQ&A
- Vlookupのような関数について
Vlookupにて、下記にある文字シートにあるB列の文字を、都道府県シートのB列に挿入する場合、以下のような関数を利用すればよいかとおもいます。 =vlookup(A1,数値シート:$A$1:$B$4,2,false) そこで、文字シートのA列とB列が入れ替わった場合(キーとなる列が左端では無い場合)はどのような関数にすれば良いのでしょうか? ※文字シートのAとBを入れ替えてというのは無しでお願いします。 都道府県シート A列 B列 埼玉県 東京都 神奈川県 山梨県 文字シート A列 B列 山梨県 あいう 東京都 かきく 神奈川県 なにぬ 埼玉県 さしす
- 締切済み
- その他MS Office製品
- Excel VBA VLOOKUP の書き方
次の関数をVBAで書くにはどのように記述すればよいでしょうか? =IF(ISNA(VLOOKUP(B2,Sheet2!A2:B9,2,FALSE)),"",VLOOKUP(B2,Sheet2!A2:B9,2FALSE)) よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- IFとVLOOKUP関数
VLOOKUP関数を使って検索結果を出そうと思いましたが、 データ量が93000行X8列になりますので、 共通分けして複数のシート(A、B、C、D)に分けました。 あるセルに『A』と入れると『シートA』の表から検索を行う、 あるセルに『B』と入れると『シートB』の表から検索するといった感じにするには、 IFとVLOOKUPを使用するなら、どのような式を入れたらいいのでしょうか? また、他の関数を使う式があるのでしょうか? マクロやVBAも考えましたが、 あまり知識がありません。 データ量から考えると マクロやVBAで行った方がいいのでしょうか?
- ベストアンサー
- Windows系OS
- VLOOKUP関数をVBAで使用したい
VLOOKUP関数をVBAで使用したい 「検索」シートにID番号を入力すると、「データ」シートのA列に入っているデータから入力されたID番号を検索し、該当するID番号のある行の横並びに入っている別の列データ(B~AG列)を取り出し、それぞれを「検索」シートの様々なセルに表示するVBAを作っていますが、VBAでVLOOKUP関数を用いる方法がよく分からず苦戦しています。 「データ」シートの1、2行目は見出しで、検索されるデータが入っているのは3行目からです。また、「データ」シートには不定期に新しいデータが追加されていきます。 「検索」シートに検索結果を表示する際も、以下のように規則性のないセル配置なので少しややこしいです。 「検索」シートのセル=「データ」シートの列 B6=B列 B8=C列 B10=D列 B11=E列 B12=F列 B13=G列 B14=H列 B16=I列 D16=J列 F16=K列 B17=L列 D17=M列 F17=N列 B20=O列 C20=P列 E20=Q列 B21=R列 C21=S列 E21=T列 B22=U列 C22=V列 E22=W列 B23=X列 C23=Y列 E23=Z列 B24=AA列 C24=AB列 E24=AC列 B26=AD列 E26=AE列 B29=AF列 B31=AG列 このような動作をVBAでさせることは可能でしょうか? また、検索して該当するID番号がなかった際も、VBAだとそこで動作が止まってしまうので、「該当するID番号がありません」といったエラー判定が出るようにすることはできますか? 教えてください。よろしくお願いします。
- 締切済み
- オフィス系ソフト
- VLOOKUP関数(範囲を広げる場合)
こんにちは。 VLOOKUP関数の事で教えてください! 最近何となくVLOOKUP関数の内容がわかってきた ところなのですが、以下の場合は、どのように したら良いものでしょうか・・ __|___A__|____B____|__C__| 1|地域1|地域2 |コード | 2|東京 |東京都 | 1 | 3|大阪 |大阪府 | 2 | 4|千葉 |千葉県 | 3 | 5|埼玉 |埼玉県 | 4 | 6|茨城 |茨城県 | 5 | (A1:C6を「範囲」として) たとえば[D2]に「大阪」または「大阪府」 どちらかの文字が入力された場合、 [E1]には[2](コード)と表示させる数式は はどのようにしたら良いのでしょうか。 「A列かつB列」という複数条件の数式は、 調べてみて分かったのですが「A列またはB列」 という条件の数式を教えて下さい! よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VLOOKUP関数と同じことをVBAでおこなうには
初めまして、当方VBAの素人です。よろしくお願いします。 同じような質問で、このようなVBAを見つけました。 Sub Macro1() For n = 2 To 5 '処理するSheet2の行数範囲 a = Sheets("Sheet2").Cells(n, 1) 'aにA列の値を代入 For m = 2 To 5 '検索するSheet1の行数範囲 If Sheets("Sheet1").Cells(m, 1) = a Then 'Sheet2のA列の値とSheet1のA列が一致した場合 v = Sheets("Sheet1").Cells(m, 2) 'vにB列の値を代入 Sheets("Sheet2").Cells(n, 2).Value = v 'Sheet2のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub このVBAではSheet2での検索、入力が列になるのですが、列でなく、行でできないでしょうか。できればSheet1のB列の値をSheet2の1行で検索、Sheet2の2行に入力されるだけではなく、Sheet1のC列の値をSheet3の1行で検索、Sheet3の2行に入力されるようにしたいと思います。 解る方、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VLOOKUP関数について教えて下さい
Excel97を使用しています。 VLOOKUP関数を使って二つのデータを照合したいのですが、 A B C D E コード|内容 | |コード |内容 | 0001 |ああ |ああ |0001 |ああ | 0002 |ああ | |0002 | | 0003 | | 0|0003 | | D,E列の範囲からA列のコードを検索かけたいのですが、 =VLOOKUP(A2,ひかく,2,0) ↑ D,E列 だと内容欄に空欄が入っていると0になってしまいます。 0でなく空欄にしたい場合はどうしたらよいのでしょうか?
- 締切済み
- オフィス系ソフト
- VLOOKUP関数についての質問です。
VLOOKUP関数についての質問です。 例えば、シート1に、 A列 B列 C列 番号 品物 送り先 1 ばなな スーパー 2 ミカン 学校 3 イチゴ ケーキ店 あるとします。 VLOOKUP関数を用いて、 シート2に A列 B列 送り先 品物 ・ ・ ・ ・ ・ ・ とそれぞれ入力したいとして、以下のセルも同様の式を使い入力しますが いちいち式を立てて入力していくと大変です。 セルにVLOOKUP関数をコピーして使うにはどうしたらいいですか?? お願いします。
- ベストアンサー
- Visual Basic
- Excel VBAで、VLOOKUP関数をうまく使って見出しからデータ
Excel VBAで、VLOOKUP関数をうまく使って見出しからデータをコピーしたいです。 sheet3 に見出しだけ入れたら、その見出しのデータを丸ごとVLOOKUPを使って、以下のようにコピーしてきたいと思ってます。 sheet1 動物系 植物系 雑貨系 家電系 … パンダ チューリップ かご テレビ … うさぎ パンジー キーホルダー ビデオ … ・ ・ ・ ・ … ・ ・ ・ ・ … ・ ・ ・ ・ … sheet2 形容詞系 無料系 … かわいい ただ … かっこいい 0円 … すてきな むりょー … ・ ・ … ・ ・ … ・ ・ … sheet3(sheet2の同じ列に入ってるキーワードと、かけあわせたいsheet1の見出しだけ入ってます) A B C D E … 動物系 動物系 ○○系 ○○系 ○○系 … 雑貨系 ○○系 ○○系 ○○系 ○○系 … 家電系 ○○系 ○○系 ○○系 ○○系 … ○○系 ○○系 ○○系 ○○系 ○○系 … ・ ・ ・ ・ ・ … ・ ・ ・ ・ ・ … ・ ・ ・ ・ ・ … VBA初心者で、関数をうまく使えばできると思うのですが、わかりません。 dictionaryとfindも調べたのですが、どうも違うようでVLOOKUPをうまく使って、見出しだけ入れたらコピーしてみたいのです。 どうしたらいいでしょうか? 教えていただけると助かります。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- HLOOKUPでもVLOOKUPでもなくて、それに似た関数はありますか
HLOOKUPでもVLOOKUPでもなくて、それに似た関数はありますか? やりたいことは、 同じファイルにシート1とシート2があり、 シート1には a列 b列 c列 d列 1 ミッキー サッカー チョコレート 2 ミニー 野球 クッキー 3 ドナルド テニス ビスケット 4 デイジー 水泳 ポテトチップス ・ ・ ・ という、10,000行ほどのエクセル表があり、 シート2には、 野球 水泳 ・ ・ などという風に、シート1のc列の文字列が全部ではなく、複数ある1列のみのエクセル表があります。 そして、このシート2のセルをそれぞれシート1で検索して、それを含む一行全部を表示した エクセル表を新たにシート3に作成したいのですが、関数かVBAかで可能でしょうか? 例えば、この場合、シート3には a列 b列 c列 d列 2 ミニー 野球 クッキー 4 デイジー 水泳 ポテトチップス ・ ・ ・ というように表示したいのです。 HLOOKUPやVLOOKUPは検索される文字列は端っこしかダメなんですよね? 教えて下さい!!
- ベストアンサー
- Visual Basic
お礼
qualheartさん、ありがとうございます! ぐるぐる回す書き方を勉強したかったのですが、 説明まで書いていただき、大変、勉強になります。 どうも、ありがとう!