マクロ 74回
入力したデータを IDや氏名で検索するというボタンを作成することにします。
データを転記して、だいぶ蓄積されてくると顧客 id で検索してデータの中身を表示したい
あるいは顧客名で検索して入力されているデータを表示したいというような必要性が出
てきます。
今回は id で検索して情報を表示する、
顧客名で検索して入力された情報を表示する、と2通りのボタンを作って活用してみたい
と思います。
(サンプルファイルは、こちらから
マクロ74回サンプルデータ)
1.データ入力に利用した表を利用して、検索したデータを表示させるようにします。 顧客 ID が入力されているセルはnyuuryokuという変数、が設定してあります。

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

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

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

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

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