エクセルVBAでVLOOKUP自動参照表示

このQ&Aのポイント
  • エクセルVBAを使用して、VLOOKUP関数を使って自動的に参照して表示させる方法について教えてください。
  • 作業者Aと作業者Bの計画をエクセルで管理しています。作業者ごとに入力範囲が異なり、入力した品物に対応する付属品を自動的に表示させたいです。
  • エクセル2013を使用しており、作業者Aの本日の計画はB3:B15、作業者Bの本日の計画はB17:B29というようになっています。入力した品物に応じてVLOOKUP関数を使って付属品を表示させる方法を教えてください。
回答を見る
  • ベストアンサー

エクセルVBAでVLOOKUP自動参照表示

計画のファイルがあります。 例えば、"テーブル"シートのA列に品物A、品物B、品物C・・・、と入力されていて、B列にはA列の品物に対応して、付属A、付属B、付属Aなどと入力されているとします。実際は、品物数は数千種類あります。(この例の場合は、品物Aと品物Cは同じ付属を使う) "計画"シートには、B列にデータの入力規則のリストより、品物Aや品物B・・・などを選択します。 現在は、例えばB3:B15までが作業者Aの入力範囲としていたとすると、B5:B15まですべて入力規則のリストになっており、B3に品物Aを選んだらその下のB4に同じくリストから付属Aを選んで入力している状態です。(他の列にVLOOKUP関数を設定すると簡単にできると思いますが、これ以上列を追加表示すると印刷時縮小されすぎて却下です) 作業者Aの入力範囲のどこにで品物の選択をできるようにしておきたいので、入力範囲にはすべてリストが設定されており、数式を入れることはできません。 VBAでVLOOkUP関数を使えばできそうですが、リストから"テーブル"シートのA列の品物を選択したら、その下のセルにB列より参照して表示させればいいのでしょうが、やり方が分かりません。 作業者Aの本日の計画がB3:B15、作業者Bの本日の計画がB17:B29、作業者Aの翌日の計画がG3:G15、作業者Bの本日の計画がG17:G29とすると、その範囲に入力したら自動で参照して表示させ、また"テーブル"シートのB列が空欄なら何も表示しないようにさせるにはどうしたらよろしいでしょうか? たびたびすいませんが、どうやったらよろしいでしょうか?エクセル2013です。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.1

選択入力した下のセルに品物に対応するテーブルというシート名のB列のデータをVlookupで取得して表示するということでしょうか。 以下の動作でいかがでしょう。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo mExit Application.EnableEvents = False If Intersect(Target, Range("B3:B15,G3:G15,B17:B29,G17:G29")) Is Nothing Then Application.EnableEvents = True Exit Sub Else Target.Offset(1, 0).Value = Application.WorksheetFunction.VLookup(Target.Value, Sheets("テーブル").Range("A:B"), 2, False) End If Application.EnableEvents = True Exit Sub mExit: Application.EnableEvents = True End Sub

hinoki24
質問者

お礼

思い通りに動作しました。 最初、シート名とかを実情に合わせて変更せずにやったり色々あって、エラーになってしまってその後まったく動かなくなってしまいました。 実情に合わせ修正をかけ、標準モジュールにApplication.EnableEvents = Trueとしてやり直したら思い通りの動きになっていました。 どうもありがとうございました。

関連するQ&A

  • エクセル2013VBA Changeイベント 選択

    お世話になります。一度質問を締め切ったのですが、色々やっているうちに問題がでてきたので再投稿いたしました。Excel2013です。 計画のファイルがあります。 例えば、"テーブル"シートのA列に品物A、品物B、品物C・・・、と入力されていて、B列にはA列の品物に対応して、付属A、付属B、付属Aなどと入力されているとします。実際は、品物数は数千種類あります。(この例の場合は、品物Aと品物Cは同じ付属を使う) "計画"シートには、A列にデータの入力規則のリストより、A社やB社・・・を選択し、 さらにB列は入力規則のリストより、=INDIRECT(B2)などといれて、A列の入力規則に対して品物Aや品物B・・・などを選択します。選択するようにしています。 それで、品物Aを選んだら、その下の行に付属Aとか自動ででるようにしたいと思っています。 (列は増やしたくありません) 入力範囲のどこでも選択をできるようにしておきたいので、入力範囲にはすべてリストが設定されており、数式を入れることはできません。 とりあえず、品物を入力する範囲は、C2:C25,G2:G25範囲です。 その状態で、 とりあえずご教授いただいて下記コードまでたどりついていき通常は大丈夫なのですが、B列とC列をまとめて選択コピーして貼り付けると、付属Aと出るべきところが何も起こりません。アクティブセルが隣の列を選択しているためだと思われますが、どうすればよいか分かりません。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = True On Error GoTo mExit Application.EnableEvents = False If Intersect(Target, Range("C2:C25,G2:G25")) Is Nothing Then Application.EnableEvents = True Exit Sub Else If Target.Offset(1, 0).Value = "" Then Target.Offset(1, 0).Value = Application.WorksheetFunction.VLookup(Target.Value, Sheets("テーブル").Range("B:C"), 2, False) Application.EnableEvents = True End If End If Application.EnableEvents = True Exit Sub mExit: Application.EnableEvents = True End Sub 度々お手数をおかけいたしますが、ご教授ください。

  • ExcelのVLOOKUPを使った自動表示

    昨日も似たような質問をしたのですが、新たに困った事が出てきたので 質問します。 Sheet1のセルに例えば下記のようにA列に番号、B列に苗字、C列に名前     A  B   C  1  1  山田 太郎  2  2  田中 一郎  :  :  :   : と記載されていて、 Sheet2のセルB1に苗字、C1に名前を入力したらA1に自動的にその人の 番号が表示されるようにしたいのですが…。 VLOOKUP関数をうまく使えば出来るのでしょうか?? よろしくお願いいたします。

  • エクセル関数の自動表示について

    自動表示についてご質問いたします。 シート1 (3月入力時)       A列  B列  C列  D列  E列  F列  G列  H列 1行目  1月   2  10  11  12  30  31  33 2行目  2月   1   2   5   8   9  10  48 3行目  3月   3   5  10  11  30  31  32 4行目  4月   こういうシート1の表があったとします。 シート1で3月入力した時点で、シート2では以下の表があったとします。        A列  B列  C列  D列  E列  F列  G列   1行目    3   5  10  11  30  31  32 と、自動で表示され。 4月(シート1)に数値を入力すれば、シート2の数値が最新数値に自動で入れ替わる・・・と、いう関数を作りたいのですが、いい関数ありますでしょうか? この場合、シート1ではB列~H列の数字の個数は固定(今回は7個)であり、毎回ランダムで数字が入力されていきます。 これをシート2の1行目、A列~G列に最新数値を毎回反映させて、表示したいのです。 どなたか、ご存知の方よろしくお願いします^^;

  • ExcelのVLOOKUPで結果の表示が・・・

    うまくいきません。 =IF(B17="","",VLOOKUP(B17,Sheet3!$A$1:$B$40,2)) という関数を入力しました。 結果は範囲内の2列目から検索された 「0010181」という数字のはずなのですが正しく表示されません。 この場合、結果は「0040602」と表示されました。 (関数は間違っていないと思うのですが) セルの書式設定は「文字列」になっています。 他のセルでもやはり正しい結果がでません。 こんなことは初めてでさっぱりわかりません。 どうしたら、範囲内にある正しい数字(文字列)が表示されますか? うまく説明できないので不明な点があったら補足致しますので よろしくお願い致します。

  • エクセルで別シートを参照

    「あ」のシートに"社員番号"(A列)と"カナ"(B列)のリストがあり、 「い」のシートには"社員番号"(A列)と"漢字氏名"(B列)・"部署"(C列)のリストがあります。 「あ」のシートのC列とD列に、「い」のシートのB列とC列を表示させるにはどうしたらよいでしょうか。 新規に社員番号を入力していく場合は、VLOOKUPなどで出来ると思いますが、すでに入力済みのデータについて一括で参照する方法が判りません。 よろしくお願いいたします。

  • VLOOKUPで

    Excel2000を使っています。 Sheet1のB列に=IF(ISBLANK(A1),"",VLOOKUP(A1,Sheet2!A1:C100,2,0)) Sheet1のC列に=IF(ISBLANK(A1),"",VLOOKUP(A1,Sheet2!A1:C100,3,0))を入れてあります。 Sheet2のA列にはコード番号、B列には氏名、C列には住所が入っています。 Sheet1のA列に番号を入力すると、B,C列に氏名、住所が表示される表を作りましたが、Sheet2にデータを追加したら番号を入力しても、追加したメンバーについては、エラー表示(#N/A)が出てしまいます。 コード番号は頭にゼロが付くので、Sheet1のA列は文字列、Sheet2はすべて文字列にしてあります。 最初はうまくいってたのですが、後から追加した分だけがエラーになります。他のリストからデータをコピーし、値のみを貼り付けてだめだったので、手入力してみたのですがやはりだめでした。検索範囲を超えていることは絶対にありません。 どうしてもわからないので、質問させていただきます。 心当たりございましたらよろしくお願いいたします。

  • エクセル 関数 ISERROR VLOOKUP

    エクセル関数でご教授お願いします。 今「LIST」シートのA列に品番、B列に単価が入力されています。 これを「入力」シートのA列1行目に品番を入力して、B列1行目に単価を引っぱってくる関数を作りました。 以下関数です。(「入力」シートのB列の関数です) =IF(ISERROR(VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)),"品番ミス",VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)) 品番が間違っている場合は”品番ミス”と入力されます。 この状態で問題なのは、入力シートのA列に何も入力されていない時に、B列に品番ミスと入ってしまう事です。 何とか、空白にしたいのですがいい方法はありませんでしょうか?

  • エクセルVBAで行うVLOOKUPについて

    エクセル2000を使用しています。 いまいろいろVBAを使用してますが、わからないことがあります。 シート1に入力データ、シート2に参照のデータ USERFORM を使用し たとえばテキストBOX1にコードAと入れるとテキストBOX2に東京支店と表示し確認をできるようにしたいのです。東京支店は、シート2の参照データから引用してきます。 BOX1にAと入れてエンターを押した時点でVLOOKUPを実施させたいのですがいまいちわかりません。 シート2は A列にコード A,B,C,D,.... B列に東京支店、千葉支店... よろしくお願いいたします

  • VLOOKUPについて(参照先で長文、複数表示)

    VLOOKUPについて質問です。 エクルのシートに「リスト」と名前をつけ、横並びでA列に「番号」、B列に 「会社名」C列に「住所」D列に「電話番号」E列に「URL}というデータを入れてあります。 それを別のシートに表示させたくて以下のように表記しています。 =VLOOKUP(A2,リスト!,A2:E50,2,FALSE) いくつか表示させていて、表示させたい内容によってFALSEの前の数字を変えています。 これで表示させたいシートのA2セルに番号を入れることでそれぞれのデータが表示させられています。 そこでいくつか質問です。 □住所が長すぎて表示させたいシートのセルに収まりきらない場合、全て見れるようにするにはどうすれば良いですか? □改行されているデータも表示先のセルが1行分だと見れないのでしょうか? □元データの文字色や背景色は表示させられないのでしょうか? □表示されてるデータをコピーできますか? □同じシートで複数の参照(番号1と番号2のデータなど)をしたくて最初の「A2」部分(「B2」とかにして番号を入力する場所)を増やしてみましたが、B2とした方には表示されませんでした。同じデータから違う番号のデータも参照するというのは無理なのでしょうか?(同じ番号の項目を複数参照することはできました) わからないことだらけですので、1つでもわかることがあればお教え下さい。 こんな風に記載するんだよと、例文のようなものを頂けると助かります。 よろしくお願いします。

  • 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行に入力されるようにしたいと思います。  解る方、よろしくお願いします。

専門家に質問してみよう