|
▼さや さん:
おはようございます。
>
>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
そろそろループ処理の考え方に慣れていきましょう。
|
|