入力したデータを IDや氏名で検索する
マクロ 74回
データをIDや氏名で検索し情報を表示
入力したデータを IDや氏名で検索するというボタンを作成することにします。
データを転記して、だいぶ蓄積されてくると顧客 id で検索してデータの中身を表示したい
あるいは顧客名で検索して入力されているデータを表示したいというような必要性が出
てきます。
今回は id で検索して情報を表示する、
顧客名で検索して入力された情報を表示する、と2通りのボタンを作って活用してみたい
と思います。
(サンプルファイルは、こちらから
マクロ74回サンプルデータ)
データをIDや氏名で検索する
1.データ入力に利用した表を利用して、検索したデータを表示させるようにします。 顧客 ID が入力されているセルはnyuuryokuという変数、が設定してあります。
2. そして、顧客名の入力データには、変数kensakuという設定になっています。
3. はじめに顧客 ID 変数nyuuryokuから探す方法を考えていきましょう。 一つ作ってしまえばあとはリメイクで応用できますね。
4. そしてデータが蓄積されている「Mdata」というシート上では、 顧客管理用に検索する列を変数に入れてセットしてやる必要があります。 では前回作ったコードを見ながら新しいマクロを作成していきましょう。
顧客IDで探す方法
5.前回のコードの上半分はほとんど検索に使ってますから、 これをうまくリメイクすればいいわけです。コピーしてリメイクします。
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
7. 前回使っていたnameclmという変数は、idclmに変更します。 そして、Setステートメントで、idclmをシートMdateの2列目としてやります。
Set idclm = Worksheets("Mdata").Columns(2)
8.続いて、mynameという変数をidsellに変更して、Setステートメントを書き換えます
Set idsell = idclm.Find(idkensaku, LookAt:=xlWhole)
コード書き換え
9. idclmのセットは次のように変更します。
Set idclm = Worksheets("Mdata").Columns(2)
10. ここでMasterRangeのステートメントは、使わないのでコメントアウトしておき ましょう。
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で検索
12. できあがったマクロをボタンに登録して、ID以外を消してから、動作を確認しましょう。
13.IDをa0003に変更しマクロを実行します。
14.実行すると、Mdataからデータが転記されます。
名前検索用にリメイク
15. ID検索用のマクロをお名前検索ようにリメイクします。変数を対応するように直します。
idkensaku → kensaku
idclm → nameclm
idsell → myname
15.そして For Next のところを
For i = 0 To 8 nyuuryoku.Offset(i, 0).Value = myname.Offset(0, i - 1).Value Next
のように変更します。
16.入力シートの表をお名前だけ残して、マクロを実行してみましょう。
23. お名前があったので、Mdataから入力シートに転記されました。
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
次回は、データの転記処理で顧客情報を修正して再登録するというマクロを作成します。