入力したデータを IDや氏名で検索する
マクロ 74回
データをIDや氏名で検索し情報を表示
入力したデータを IDや氏名で検索するというボタンを作成することにします。
データを転記して、だいぶ蓄積されてくると顧客 id で検索してデータの中身を表示したい
あるいは顧客名で検索して入力されているデータを表示したいというような必要性が出
てきます。
今回は id で検索して情報を表示する、
顧客名で検索して入力された情報を表示する、と2通りのボタンを作って活用してみたい
と思います。
(サンプルファイルは、こちらから
マクロ74回サンプルデータ)
データをIDや氏名で検索する
1.データ入力に利用した表を利用して、検索したデータを表示させるようにします。 顧客 ID が入力されているセルはnyuuryokuという変数、が設定してあります。
![入力したデータを IDや氏名で検索する1 border=0](gazo2019/macro/macro74_01.png)
2. そして、顧客名の入力データには、変数kensakuという設定になっています。
![入力したデータを IDや氏名で検索する2 border=0](gazo2019/macro/macro74_02.png)
3. はじめに顧客 ID 変数nyuuryokuから探す方法を考えていきましょう。 一つ作ってしまえばあとはリメイクで応用できますね。
![入力したデータを IDや氏名で検索する3 border=0](gazo2019/macro/macro74_03.png)
4. そしてデータが蓄積されている「Mdata」というシート上では、 顧客管理用に検索する列を変数に入れてセットしてやる必要があります。 では前回作ったコードを見ながら新しいマクロを作成していきましょう。
![入力したデータを IDや氏名で検索する4 border=0](gazo2019/macro/macro74_04.png)
顧客IDで探す方法
5.前回のコードの上半分はほとんど検索に使ってますから、 これをうまくリメイクすればいいわけです。コピーしてリメイクします。
![入力したデータを IDや氏名で検索する5 border=0](gazo2019/macro/macro74_05.png)
6.この検索という変数が、顧客名の変数なので、idkensakuという名前に変えてます。
kensaku = Worksheets("Inputdata").Cells(3, 3).Value ↓ kensaku = Worksheets("Inputdata").Cells(2, 3).Value
に書き換えてやります。そしてさらに、
Set nyuuryoku = Worksheets("Inputdata").Cells(2, 3)
とすれば、
以下のようにもっと単純化できます。
Set nyuuryoku = Worksheets("Inputdata").Cells(2, 3) idkensaku = nyuuryoku.Value
![入力したデータを IDや氏名で検索する6 border=0](gazo2019/macro/macro74_06.png)
7. 前回使っていたnameclmという変数は、idclmに変更します。 そして、Setステートメントで、idclmをシートMdateの2列目としてやります。
Set idclm = Worksheets("Mdata").Columns(2)
![入力したデータを IDや氏名で検索する7 border=0](gazo2019/macro/macro74_07.png)
8.続いて、mynameという変数をidsellに変更して、Setステートメントを書き換えます
Set idsell = idclm.Find(idkensaku, LookAt:=xlWhole)
![入力したデータを IDや氏名で検索する17 border=0](gazo2019/macro/macro74_17.png)
コード書き換え
9. idclmのセットは次のように変更します。
Set idclm = Worksheets("Mdata").Columns(2)
![入力したデータを IDや氏名で検索する9 border=0](gazo2019/macro/macro74_09.png)
10. ここでMasterRangeのステートメントは、使わないのでコメントアウトしておき ましょう。
![入力したデータを IDや氏名で検索する10 border=0](gazo2019/macro/macro74_10.png)
11.そしてIf then elseの部分ですが、
If Not myname Is Nothing Then MsgBox kensaku & " が、すでに入力されていました。" Worksheets("Mdata").Activate myname.Select Else
以下のように書き換えます。mynameをidsellにします。IDが見つかったときは、idsellの右側つまり列をOffsetしたデータを入力シートに転記するように For ~Next構文で繰り返します。
If Not idsell Is Nothing Then For i = 0 To 8 nyuuryoku.Offset(i, 0).Value = idsell.Offset(0, i).Value Next Else MsgBox idkensaku & " は、ありません。" End If
![入力したデータを IDや氏名で検索する11 border=0](gazo2019/macro/macro74_11.png)
IDで検索
12. できあがったマクロをボタンに登録して、ID以外を消してから、動作を確認しましょう。
![入力したデータを IDや氏名で検索する18 border=0](gazo2019/macro/macro74_18.png)
13.IDをa0003に変更しマクロを実行します。
![入力したデータを IDや氏名で検索する19 border=0](gazo2019/macro/macro74_19.png)
14.実行すると、Mdataからデータが転記されます。
![入力したデータを IDや氏名で検索する20 border=0](gazo2019/macro/macro74_20.png)
名前検索用にリメイク
15. ID検索用のマクロをお名前検索ようにリメイクします。変数を対応するように直します。
idkensaku → kensaku
idclm → nameclm
idsell → myname
![入力したデータを IDや氏名で検索する14 border=0](gazo2019/macro/macro74_21.png)
15.そして For Next のところを
For i = 0 To 8 nyuuryoku.Offset(i, 0).Value = myname.Offset(0, i - 1).Value Next
のように変更します。
16.入力シートの表をお名前だけ残して、マクロを実行してみましょう。
![入力したデータを IDや氏名で検索する16 border=0](gazo2019/macro/macro74_22.png)
23. お名前があったので、Mdataから入力シートに転記されました。
![入力したデータを IDや氏名で検索する23 border=0](gazo2019/macro/macro74_23.png)
Sub お名前検索して表示() Dim kensaku As String, nameclm As Range, myname As Range Set nyuuryoku = Worksheets("Inputdata").Cells(2, 3) kensaku = Worksheets("Inputdata").Cells(3, 3).Value Set nameclm = Worksheets("Mdata").Columns(3) Set myname = nameclm.Find(kensaku, LookAt:=xlWhole) If Not myname Is Nothing Then For i = 0 To 8 nyuuryoku.Offset(i, 0).Value = myname.Offset(0, i - 1).Value Next Else MsgBox kensaku & " は、ありません。" End If End Sub
次回は、データの転記処理で顧客情報を修正して再登録するというマクロを作成します。