[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定日以前の日付で検索 VBA』(蘭)
例えば下の表で E1に、指定日を入力 F1に、あ を入力
2つの条件で、AB列を調べて *12/10以前の日付で1番大きい日付と、あ の行の C列の値を G1に、表示させたい。
表みたいにA列の日付、B列の項目が同じ行が複数ある事もあります。 その時は、下の行のC列の値を表示したいです。
この処理は、マクロで、行いたいのですが。 よろしくお願いします。
A B C D E F G 1 12/1 あ 100 12/10 あ 400 2 12/2 い 200 3 12/6 あ 300 4 12/6 あ 400 5 12/12 え 500 6 12/20 お 600
マクロにしてみました。どうでしょう? 元データは、日付の昇順に配置されているものとしています。 (6UP)
Sub Macro1() With Sheets("Sheet1") If Not IsDate(.Range("E1")) Then Exit Sub If Application.Min(.Range("A:A")) > .Range("E1") Then Exit Sub .Range("F1:G1").Clear .Range("F1").Formula = "=INDEX(B:B,MATCH($E1,$A:$A))" .Range("F1:G1").FillRight .Range("F1:G1").Value = .Range("F1:G1").Value End With End Sub
6UPさん ありがとうございます。 おかげさまで、出来ました。
これからも宜しくお願いします。 (蘭)
すみません 解決したと思ったのですが
検索値を E1 12/15 と F1 い にすると F1の い が、え に書き換わって、以下の様になってしまいます。
D E F G 1 12月15日 い
結果が、下です。
D E F G 1 12月15日 え 500
この場合、G1には、500ではなく、200 を返して欲しいのですが。
宜しくお願いします。 (蘭)
すみません。ご質問をよく読まず、E1をみてF1とG1を戻すものを書いています。 大変申し訳ありませんが、今から外出してしまいます。 (6UP)
とりあえず数式で、G1に =INDEX(C1:C6,MATCH(1,IF(B1:INDEX(B1:B6,MATCH(E1,A1:A6))=F1,))) として、 Ctrl+Shift+Enter。 としますと、数値が戻ると思います。 (6UP)
昨日は、忘年会がありました。大変失礼しました。 こちらでどうでしょう? (6UP)
Sub Macro1() Dim r As Long With Sheets("Sheet1") .Range("G1").Clear If Not IsDate(.Range("E1")) Then Exit Sub If Application.Min(.Range("A:A")) > .Range("E1") Then Exit Sub r = Application.Match(.Range("E1"), .Range("A:A"), 1) For r = r -1 To 0 Step -1 If .Range("B1").Offset(r, 0).Value = .Range("F1").Value Then _ .Range("G1").Value = .Range("C1").Offset(r, 0).Value: Exit Sub Next r End With End Sub
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.