[[20170218114000]] 『VLOOKUPを用いない検索方法(セルに関数はない)』(ひ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VLOOKUPを用いない検索方法(セルに関数はない)』(ひ)

Sheet1に
A1 簡単品番
B1 正式品番
C1 品名
という列タイトルにしてそれぞれ以下に対応データが入力されているものとします。
簡単品番は4桁の数字、正式品番はローマ字数字が複雑に入り込んだものです。

次にSheet2に
A1 正式品番
B1 品名
という列タイトルを用意し、A2に、正式品番ではなく簡単品番を入力したとします。品名はVLOOKUPで入力が可能かと思いますが、A2に4桁の数字である簡単品番を入力してエンターを押した時に、そのA2の内容が、簡単品番に対応する正式品番にすりかわるというのか、別セルに移動した瞬間に入れ替わることはできますか?
会社でそのようなブックを見たのですが、どのように成り立っているかわからず、また理解している人もいないので気になっております。Sheet2のA2以下のセルに関数は入っていませんでしたし、入っていたにしても上から簡単品番を入力すれば元のセルの中身は消えてしまうと思うのです。
私個人は、やり方としては簡単品番入力で、正式品番も品名も別セルにVLOOKUPで検索データを入力する、というやり方しかわかりません。
まずはどのようにそれが処理されるか原理?を知りたいです。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


Changeイベントプロシージャを使っているのではないでしょうか。
ワークシート毎に、動作するマクロが背後で動いているのでしょう。

これは、セル内容(セルの値ですね)に変更があったとき自動で実行されるマクロです。
ユーザーがそのマクロを設定することができます。

セル内容がユーザーの入力などで変化したとき、
・どのセルで変更が起きたか
がExcel側から知らされますから、
それをもとに、
・それがA列にあるかどうかを調べて、
・簡易番号をもとにして、(VLOOKUPでもよいでしょう)正式番号を取得して
・そのセルの値を正式番号に置き換える、
といった処理をそのマクロで行えば良いでしょう。

マクロを知っているなら、
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html
などを参考に勉強してみてください。

(γ) 2017/02/18(土) 12:03


被りましたが、Worksheet_Change イベントのところにマクロが書いてあり、そこで検索、表示しているのかと思いますよ。
(???) 2017/02/18(土) 12:08

やはりマクロが関連しているのですね。
現在マクロに関しては勉強中ですが、ざっくりとどういう処理がされているのかは回答いただいた内容からわかった気がします。
ボタンを押して動くものはマクロだとは思っていたのですが、私が質問にあげたのは仰られる通り自動処理のマクロなのですね。
教えていただいたリンクを元にして勉強し、今度会社のマクロも確認してみます。
お二方とも回答ありがとうございました。
(ひ) 2017/02/18(土) 12:16

Sheet2のシートを選択し、
シートタブ上で右クリック→コードの表示

表示された画面の一番大きな枠(?)に以下のコードをコピペ

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim m As Variant
    Dim Rng As Range

    If Target.Address(False, False) <> "A2" Then Exit Sub
    Set Rng = Sheets("Sheet1").Range("A1").CurrentRegion
    m = Application.Match(Target.Value, Rng.Columns(2), 0)
    If IsError(m) Then
        m = Application.Match(Target.Value, Rng.Columns(1), 0)
    End If
    If IsError(m) Then
        Me.Range("A2:B2").ClearContents
    Else
        Application.EnableEvents = False
        Me.Range("A2").Value = Rng(m, 2).Value
        Me.Range("B2").Value = Rng(m, 3).Value
        Application.EnableEvents = True
    End If
End Sub

で、そういう操作が自動で出来る(マクロ)と思います。
でも、こんなことを覚えるよりは、、、、

Match関数+Index関数でVlookupの機能を拡張できるようになる方が有用かと思います。

(まっつわん) 2017/02/18(土) 12:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.