| 
    
     |  | ▼さや さん: おはようございます。
 
 >
 >1.A列に数値が入力されています。数値は昇順で、連番です。 (ダブりはありません)
 >
 >2.A列に対応して、C列に日付が入力されます。これも昇順ですが、ダブりがあります。
 >
 > 例えば、2007/1/1がC1からC10に同じく入力、2007/1/27がC50からC54に入力され  ています。
 >
 >3.A列を、下記の条件でsheet2のV列のセルV6を先頭とするセルにコピーしたい。
 >
 > 条件・・C列に入力される最新の日付(1番新しい日付)に対応している、A列     のセルだけをコピーする。
 >  2.の例だとA50からA54だけをコピーする。
 
 例えば、Sheet1のA、C列には、
 
 A  B     C
 1    1      2007/1/27
 2    2      2007/1/27
 3    3      2007/1/27
 4    4      2007/1/27
 5    5      2007/1/28
 6    6      2007/1/29
 7    7      2007/1/30
 8    8      2007/1/31
 9    9      2007/2/1
 10    10      2007/2/2
 11    11      2007/2/3
 12    12      2007/2/3
 13    13      2007/2/3
 14    14      2007/2/3
 15    15      2007/2/3
 
 というデータがあるとすると、
 
 最新の日付は、上記の条件だと入力されているデータの最終行(C15)から
 順に上の行を調べていきます。
 
 すると、10行目で日付が15行目と違っています。
 日付が変わった時点で、取得するセル範囲として、日付が変わる直前までの
 11行目から15行目までのデータを移行します(つまり、A11から、A15)。
 
 標準モジュールに
 
 '==============================================
 Sub main()
 Dim rw2 As Long
 Dim rw1 As Long
 Dim newdate As Date
 With Worksheets("sheet1")
 rw2 = .Cells(.Rows.Count, "a").End(xlUp).Row
 newdate = .Range("c" & rw2).Value
 For rw1 = rw2 - 1 To 1 Step -1
 If .Range("c" & rw1).Value <> newdate Then Exit For
 Next rw1
 .Range(.Cells(rw1 + 1, 1), .Cells(rw2, 1)).Copy
 Worksheets("sheet2").Range("v6").PasteSpecial xlValue
 Application.CutCopyMode = False
 End With
 End Sub
 
 そろそろループ処理の考え方に慣れていきましょう。
 
 
 |  |