エクセルの表から2つの条件に合致する値を表示したいのですが、添付した画像のような条件の場合に、どのように検索範囲を並び替えるとか関数を設定すればうまくいくでしょうか?

画像

Excel166閲覧

ベストアンサー

0
画像

G3:↓ =INDEX(C$3:C$10,MAX((A$3:A$10<=E$3)*IF(B$3:B$10=F3,ROW(B$3:B$10)))-1) 【お断わり】上式は必ず配列(CSE)数式として入力のこと CSE入力した証拠に、[数式バー]上では当該式の両端が括弧{}で囲われていま~す。

その他の回答(4件)

0

VBAによる回答です。 以下のを標準モジュールにコピペしてマクロ登録して実行して下さい。 「<---」の部分は実態に応じて変更を。 Sub Main()     Const StartRM = 3   '<---元表の左上セルの次の行No     Const CM = 1        '<---元表の左上セルの列No     Const StartRH = 3   '<---購入表の左上セルの次の行No     Const CH = 5        '<---購入表の左上セルの列No     Dim WSM As Worksheet, WSH As Worksheet     Dim LastRM, LastRH, RM, RH     Dim Hiduke1, Hiduke2, Hinmoku, Kakaku     Dim Flg As Boolean          Set WSM = Worksheets("Sheet1") '<---元表のあるシート     Set WSH = Worksheets("Sheet1") '<---購入表のあるシート          LastRM = Cells(Rows.Count, CM).End(xlUp).Row     LastRH = Cells(Rows.Count, CH).End(xlUp).Row          For RH = StartRH To LastRH         Hiduke1 = WSH.Cells(RH, CH + 0)         Hiduke2 = DateAdd("m", -1, Hiduke1)         Hinmoku = WSH.Cells(RH, CH + 1)         Flg = False         For RM = StartRM To LastRM             If Hiduke1 >= WSM.Cells(RM, CM + 0) Then                 If Hiduke2 < WSM.Cells(RM, CM + 0) Then                     If Hinmoku = WSM.Cells(RM, CM + 1) Then                         Kakaku = WSM.Cells(RM, CM + 2)                         Flg = True                         Exit For                     End If                 End If             End If         Next RM                  Select Case Flg             Case True: WSH.Cells(RH, CH + 2) = Kakaku             Case Else: WSH.Cells(RH, CH + 2) = "NG"         End Select     Next RH End Sub

0

下の画像では一例で 1.G2のセルに __=IFERROR(VLOOKUP(E3,OFFSET($A$2,MATCH(F3,B$3:B$10,0),0,COUNTIF(B$3:B$10,B3),3),3,1),"") 2.G2のセルを下のG8のセルまでコピー としたもので OFFSET関数にMATCH関数でVLOOKUP関数の適用範囲を求め VLOOKUP関数によるあいまい検索によるものです。

画像
0

=index($A$3:$C$10,match(date(year(E3),month(E3),1)&F3,$A$3:$A$10&$B$3:$B$10,0),3) 上記を入力したセル内でCTRL+SHIFT+ENTERを押してください。