入力したデータを IDや氏名で検索する

入力したデータを IDや氏名で検索する
入力したデータを IDや氏名で検索する

マクロ 74回

データをIDや氏名で検索し情報を表示

入力したデータを IDや氏名で検索するというボタンを作成することにします。 データを転記して、だいぶ蓄積されてくると顧客 id で検索してデータの中身を表示したい あるいは顧客名で検索して入力されているデータを表示したいというような必要性が出 てきます。
今回は id で検索して情報を表示する、 顧客名で検索して入力された情報を表示する、と2通りのボタンを作って活用してみたい と思います。

(サンプルファイルは、こちらから マクロ74回サンプルデータ

データをIDや氏名で検索する

1.データ入力に利用した表を利用して、検索したデータを表示させるようにします。 顧客 ID が入力されているセルはnyuuryokuという変数、が設定してあります。


入力したデータを IDや氏名で検索する1 border=0

2. そして、顧客名の入力データには、変数kensakuという設定になっています。


入力したデータを IDや氏名で検索する2 border=0

3. はじめに顧客 ID 変数nyuuryokuから探す方法を考えていきましょう。 一つ作ってしまえばあとはリメイクで応用できますね。


入力したデータを IDや氏名で検索する3 border=0

4. そしてデータが蓄積されている「Mdata」というシート上では、 顧客管理用に検索する列を変数に入れてセットしてやる必要があります。 では前回作ったコードを見ながら新しいマクロを作成していきましょう。


入力したデータを IDや氏名で検索する4 border=0

顧客IDで探す方法

5.前回のコードの上半分はほとんど検索に使ってますから、 これをうまくリメイクすればいいわけです。コピーしてリメイクします。


入力したデータを IDや氏名で検索する5 border=0

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

7. 前回使っていたnameclmという変数は、idclmに変更します。 そして、Setステートメントで、idclmをシートMdateの2列目としてやります。

Set idclm = Worksheets("Mdata").Columns(2)

入力したデータを IDや氏名で検索する7 border=0

8.続いて、mynameという変数をidsellに変更して、Setステートメントを書き換えます

Set idsell = idclm.Find(idkensaku, LookAt:=xlWhole)
入力したデータを IDや氏名で検索する17 border=0

コード書き換え

9. idclmのセットは次のように変更します。

Set idclm = Worksheets("Mdata").Columns(2)
入力したデータを IDや氏名で検索する9 border=0

10. ここでMasterRangeのステートメントは、使わないのでコメントアウトしておき ましょう。


入力したデータを IDや氏名で検索する10 border=0

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

IDで検索

12. できあがったマクロをボタンに登録して、ID以外を消してから、動作を確認しましょう。


入力したデータを IDや氏名で検索する18 border=0

13.IDをa0003に変更しマクロを実行します。


入力したデータを IDや氏名で検索する19 border=0

14.実行すると、Mdataからデータが転記されます。


入力したデータを IDや氏名で検索する20 border=0

名前検索用にリメイク

15. ID検索用のマクロをお名前検索ようにリメイクします。変数を対応するように直します。
idkensaku → kensaku
idclm → nameclm
idsell → myname


入力したデータを IDや氏名で検索する14 border=0

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

23. お名前があったので、Mdataから入力シートに転記されました。


入力したデータを IDや氏名で検索する23 border=0
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

次回は、データの転記処理で顧客情報を修正して再登録するというマクロを作成します。