VBAでデータの転記処理を重複チェックしてからする Part2 For Nextステートメントでコードの簡略化~マクロ講座

VBAでデータの転記処理をする Part2

VBAでデータの転記処理を重複チェックしてからする Part2 For Nextステートメントでコードの簡略化
VBAでデータの転記処理をする Part2

マクロ 72回

重複チェックしてからデータを転記するコード

71回からの続きになります。

前回作成したコードは転記処理の考え方を単純に記述しただけのものです。
そのコードをすっきりと分かりやすくするために For Next ステートメントで 記述し直します。

(サンプルファイルは、こちらから → 動画33回サンプルデータ

データを転記するコード

1. インプット用のデータを入力するシートです。


VBAでデータの転記処理をする Part21 border=0

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


VBAでデータの転記処理をする Part22 border=0

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


VBAでデータの転記処理をする Part23 border=0

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


VBAでデータの転記処理をする Part24 border=0

特定のデータが入力されているかどうか調べる

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


VBAでデータの転記処理をする Part25 border=0

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


VBAでデータの転記処理をする Part25 border=0

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 & "  が、すでに入力されていました。"
VBAでデータの転記処理をする Part25 border=0

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


VBAでデータの転記処理をする Part26 border=0

重複データがなければ転記する

9.そして、もしデータがすでに入力されていたら、メッセージを表示後に、その入力されているセルを選択してユーザーが確認できるようにしましょう。

    If Not myname Is Nothing Then
        MsgBox kensaku & "  が、すでに入力されていました。"
        Worksheets("Mdata").Activate
        myname.Select
VBAでデータの転記処理をする Part27 border=0

10. 検索したデータがないことが確認できたら、Els以降のコードを実行します。

     Else
        For i = 0 To 8
            MasterRange.Offset(0, i).Value = nyuuryoku.Offset(i, 0).Value
        Next
    End If
VBAでデータの転記処理をする Part28 border=0

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行目に転記できました。


VBAでデータの転記処理をする Part29 border=0