マクロ 72回
71回からの続きになります。
前回作成したコードは転記処理の考え方を単純に記述しただけのものです。
そのコードをすっきりと分かりやすくするために
For Next ステートメントで 記述し直します。
(サンプルファイルは、こちらから → 動画33回サンプルデータ)
1. インプット用のデータを入力するシートです。

2. 前回はこのようなコードを作成して終了しました。このコードは、転記処理の考え方をそのまま単純に記述しただけのものです。

3. MasterRange.Offset(0, 1).Value = nyuuryoku.Offset(1, 0).Value
から
MasterRange.Offset(0, 8).Value = nyuuryoku.Offset(8, 0).Value
の部分は、
行番号を 変数i に置き換えることで、For Nextステートメントを使い簡略にできます。

4. それでは新しいデータを入力して、 For Next ステートメントで書き換えたコードを実行してみます。新規データが2行目に転記されました。

5. 今度は、特定の 名前が既に入力されているかどうかということを調べるコードを付けたしたいと思います。
顧客名が既に入力されているかを調べたいのでkensakuというstring 型の変数を宣言し、調べたい列にも名前が入力されているカラムということで nameclm As Range と宣言してあります。

6. 検索するために使うメソッドは、 Findメソッドです。

7. 検索するために使うメソッドは、Findメソッドです。kensakuは、Cells(3, 3)の値です。それをColumns(3)から探します。
kensaku = Worksheets("Inputdata").Cells(3, 3).Value
Set nameclm = Worksheets("Mdata").Columns(3)
Set myname = nameclm.Find(kensaku, LookAt:=xlWhole)
もしmynameがなければ、メッセージボックスを表示します。
If Not myname Is Nothing Then
MsgBox kensaku & " が、すでに入力されていました。"

8. ではここまでのコードを実行して 石山淳一が入力されているかどうかを調べてみましょう。

9.そして、もしデータがすでに入力されていたら、メッセージを表示後に、その入力されているセルを選択してユーザーが確認できるようにしましょう。
If Not myname Is Nothing Then
MsgBox kensaku & " が、すでに入力されていました。"
Worksheets("Mdata").Activate
myname.Select

10. 検索したデータがないことが確認できたら、Els以降のコードを実行します。
Else
For i = 0 To 8
MasterRange.Offset(0, i).Value = nyuuryoku.Offset(i, 0).Value
Next
End If

11. 検索するコードにデータ転記のコードを加えてやります。
Sub 検索して転記()
Dim kensaku As String, nameclm As Range, myname As Range
kensaku = Worksheets("Inputdata").Cells(3, 3).Value
Set nameclm = Worksheets("Mdata").Columns(3)
Set myname = nameclm.Find(kensaku, LookAt:=xlWhole)
Set nyuuryoku = Worksheets("Inputdata").Cells(2, 3)
Set MasterRange = Worksheets("Mdata").Cells(Rows.Count, 2). _
End(xlUp).Offset(1, 0)
If Not myname Is Nothing Then
MsgBox kensaku & " が、すでに入力されていました。"
Worksheets("Mdata").Activate
myname.Select
Else
For i = 0 To 8
MasterRange.Offset(0, i).Value = nyuuryoku.Offset(i, 0).Value
Next
End If
End Sub
12. それでは完成した転記コードを実行してみましょう。データが3行目に転記できました。