[[20071211212845]] 『指定日以前の日付で検索 VBA』(蘭) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定日以前の日付で検索 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.