|
[46222]での質問では、下記の回答を ichinoseさんより頂きました。大変、お世話になりました。
今回は、下記のような追加コードを希望しています。
[46222]の内容
次のようなプログラムを希望しています。
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だけをコピーする。
Sub main()
Dim rw2 As Long
Dim rw1 As Long
Dim newdate As Date
With Worksheets("sheet1")
rw2 = .Cells(.Rows.Count, "c").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
[追加質問]
毎日、C列の日付とともにD列に3桁の数値を入力します。
その数値とは165 〜975の数値で、すべて存在する訳ではなく、抜けている数値もあります。(たとえば、167、193などは抜けています)
D列の入力方法はC列のように昇順ではなく、ランダム的な入力方法です。
しかし、下記のような入力方法のルールがあります。
*「同じ日付(C列)に対応する同じ数値(D列)は、続けて入力しなければいけ ない」
下記の例だと、D10の177が入力ミスです。
[追加コード]
下記のD10の177のように、このルールに反してD列に入力した場合、「入力ミス」と表示したいのです。
A B C D列
1 1 2007/1/31 176
2 2 2007/1/31 187
3 3 2007/1/31 177
4 4 2007/2/1 176
5 5 2007/2/2 188
6 6 2007/2/3 177
7 7 2007/2/3 177
8 8 2007/2/3 975
9 9 2007/2/3 170
10 10 2007/2/3 177 ← 入力ミス
If then End If と MsgBox “入力ミス”と ループ処理を使う事はわかるのですが、・・・
ご教授よろしくお願いします。
|
|