Home > Excel VBA Macro フロー制御 > FAQ

マスターシートを管理番号で検索して追加情報を記入したいが?

Question 103.2   Previous Next
Excelを使い始めて1年あまり、現在業務をより効率化するためには数式の利用だけではなんともならないところまできてしまいました。 しかしながら、マクロを勉強して数ヶ月なかなか思うように進まず、他の方のVBAをみてなにか参考になればと探し続ける毎日です。 もし、お時間をいただけるのであればご教授願えますと幸いです。

現在、顧客の管理をエクセルで行っているのですが、下記のマクロを組みたいと考えております。
 シート1(入力)

シート1には「顧客管理番号」と「日付」と「データ入力のためのセル」をつくり、
 シート2(データ蓄積)

シート2にはシート1の「顧客管理番号」と「日付」をもとに、「データ入力のためのセル」を蓄積していきたいのです。

しかし、シート1からシート2への該当セルへの導き出し方が、よくわかずに困っております。

よろしくお願いいたします。
Answer   Copyright (C) 2010.11.30 永井善王
「マクロを勉強して数ヶ月」とのこと、課題解決に向けて頑張ってみえるようですね。
できるだけ詳しく説明してあげたいと思いますが、現在私は次に出版する本の執筆に追われていて、殆ど時間が取れません。
そのため、ポイントだけになりますが下記のとおりまとめておきます。

「該当セルへの導き出し方」は、次の2ステップになると思います。
第1ステップ … シート1の顧客管理番号と同じ番号は、シート2のB列の何行目にあるか?
第2ステップ … シート1の日付と同じ日付は、シート2の第1ステップで見つかった行の何列目にあるか?
    With Worksheets("Sheet1")
        顧客管理番号 = .Range("B1")
        日付 = .Range("D1")
    End With
    Worksheets("Sheet2").Activate
    下端行 = Range("A" & Rows.Count).End(xlUp).Row + 1
    右端列 = Cells(行 + 1, Columns.Count).End(xlToLeft).Column
    For 行 = 1 To 下端行 Step 5
        If 顧客管理番号 = Range("B" & 行) Then
            For 列 = 2 To 右端列
                If 日付 = Cells(行 + 1, 列) Then
'                      |
'                  ここで必要な処理をする
'                      |
                End If
            Next
        End If
    Next
赤字で示した For...Nextステートメントが上記の第1ステップと第2ステップのための繰り返し処理を行います。
For...Nextステートメントの理解は必須です。このサイトにもいくつかの解説ページがあり一例は
For...Next です。
青字の If文で同じ番号か、あるいは、同じ日付かを判断しています。

両方とも、このサイトか市販の入門書を参考にして、根気よく解読なさってください。 このサイトの検索は下記ページで簡単に行えると思います。 
すくマク検索
では、上手くできるようになったら、ご連絡ください。

 

Excel VBA Macro

Excel DownLoad