• 締切済み

複数条件でvlookup

下記の様な区分ごとの状態変化が記録されたテーブルがあります。 ここから、ある区分がある時点でどんな状態だったかを数式で取得したいです。 <テーブル> 区分、時刻、状態 ----------------------------------------- 区分A、9:00:00、状態1 区分B、9:15:00、状態1 区分A、10:00:00、状態2 区分C、10:45:00、状態2 区分A、11:00:00、状態3 <入力> → <取得値> 区分A、9:30:00 → 状態1 区分A、11:10:00 → 状態3 区分B、12:10:00 → 状態1 区分の制約がなければvlookupで取得できるのですが、 複数の条件でvlookupするにはどうしたらよいでしょうか。 背景を補足しますと、 現在は上記に相当するロジックをVBAで記述してますが 速度向上のため、VBAの中で関数を使おうと考えてます。(例えばWorksheetFunction.VLookup(~~~)など) 以上、よろしくお願いします。

みんなの回答

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんばんは 「現在は上記に相当するロジックをVBAで記述」とはどのようなコードですか? Sub test()   Dim Sh1 As Worksheet   Dim Sh2 As Worksheet   Dim Sh3 As Worksheet   Dim r As Range   Dim t As Range      Application.ScreenUpdating = False      'テーブル、データはセルA1:C最終行、1行目項目行     Set Sh1 = Worksheets("Sheet1")   '入力、データはセルA1:B最終行、項目行無し     Set Sh2 = Worksheets("Sheet2")   '作業シート     Set Sh3 = Worksheets.Add(, Sh2)        Sh1.Range("A1").CurrentRegion.Offset(1).Copy Sh3.Range("B1")   With Sh3     With .Range("A1").Resize(.Range("A1").CurrentRegion.Rows.Count)       .Formula = "=B1&C1"       .Value = .Value     End With     .Range("A1").CurrentRegion.Sort .Range("A1"), xlAscending, Header:=xlNo     Set t = .Range("A1").Resize(.Range("A1").CurrentRegion.Rows.Count)   End With   With Sh2     With .Range("C1").Resize(.Range("A1").CurrentRegion.Rows.Count)       .Formula = "=INDEX(" & t.Offset(, 3).Address(1, 1, xlA1, 1) & _         ",MATCH(A1&B1," & t.Address(1, 1, xlA1, 1) & ", 1))"       .Value = .Value     End With   End With   Application.DisplayAlerts = False   Sh3.Delete   Application.DisplayAlerts = True   Application.ScreenUpdating = True End Sub こんな感じにしても遅いですか?

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.1

添付図参照 C9: =IFERROR(VLOOKUP(B9,IF(A$2:A$6=A9,B$2:C$6,""),2),"") 『お断り』上式は必ず配列数式として入力のこと

すると、全ての回答が全文表示されます。

関連するQ&A