[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数の条件が合うものを抽出したい』(HARU)
いつもお世話になっています。
教えて下さい。
下の様な表を作成しています。
毎日利用するリスト
A B C D
10 200 3000
11 201 3001
12 202 3002
チェックリスト
A B C D
10 200 3000 AAA
11 201 3001 BBB
12 202 3002 CCC
10 200 4000 空白
チェックリストのDを毎日利用するリストに表示したいのですが、
チェックリストのAもBもCも合うものを表示したいのですが、
どのようにすればいいのでしょうか?
知恵をかしてください!
Listの中でKeyの重複、照合のルール等を考えないで、 単純に照合と言うだけならこんな事?
Option Explicit
Public Sub Sample()
Dim i As Long
Dim lngRows As Long
Dim rngList As Range
Dim rngResult As Range
Dim vntData As Variant
Dim vntResult() As Variant
Dim vntKey As Variant
Dim dicIndex As Object
Dim strProm As String
'Listの先頭セル位置を基準とする(データ先頭のセル位置)
Set rngList = Worksheets("チェックリスト").Range("A1")
'結果出力の先頭セル位置を基準とする(データ先頭列のセル位置)
Set rngResult = Worksheets("毎日利用するリスト").Range("A1")
'Dictionaryオブジェクトを取得
Set dicIndex = CreateObject("Scripting.Dictionary")
With rngList
'行数の取得
lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
If lngRows <= 1 And IsEmpty(.Value) Then
strProm = "データが有りません"
GoTo Wayout
End If
'列データを配列に取得
vntData = .Resize(lngRows + 1, 4).Value
End With
'Dictionaryにチェックリストを登録
With dicIndex
For i = 1 To lngRows
'A,B,C列をタブを挟んで連結
vntKey = vntData(i, 1) & vbTab _
& vntData(i, 2) & vbTab & vntData(i, 3)
'照合KeyをKeyとしてD列を登録
.Item(vntKey) = vntData(i, 4)
Next i
End With
With rngResult
'行数の取得
lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
If lngRows <= 1 And IsEmpty(.Value) Then
strProm = "データが有りません"
GoTo Wayout
End If
'列データを配列に取得
vntData = .Resize(lngRows + 1, 3).Value
'結果を格納する配列を確保
ReDim vntResult(1 To lngRows, 1 To 1)
End With
'毎日利用するリストの先頭〜最終行迄繰り返し照合
With dicIndex
For i = 1 To lngRows
'A,B,C列をタブを挟んで連結
vntKey = vntData(i, 1) & vbTab _
& vntData(i, 2) & vbTab & vntData(i, 3)
'照合KeyがDictionaryに有ったなら
If .Exists(vntKey) Then
'結果用配列にD列を代入
vntResult(i, 1) = .Item(vntKey)
End If
Next i
End With
'結果を出力
With rngResult.Cells(1, 4).Resize(lngRows)
.ClearContents
.Value = vntResult
End With
strProm = "処理が完了しました"
Wayout:
Set dicIndex = Nothing
Set rngList = Nothing
Set rngResult = Nothing
MsgBox strProm, vbInformation
End Sub
(Bun)
こんな感じでどうでしょう?
=INDIRECT("'チェックリスト'!d"&SUMPRODUCT((A2=チェックリスト!A2:A5)*(B2=チェックリスト!B2:B5)*(C2=チェックリスト!C2:C5)*ROW(チェックリスト!A2:A5)))
(seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.