VBAでデータの転記処理をする Part2
マクロ 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行目に転記できました。