こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel 2つのDatabaseから一致した結果

結構な量のデータベースが2つあります。

例えば sheet2(データベース2)のJ2,P2,S2の3つ条件にあうものを
sheet1(データベース1)の中から検索して
一致した場合は sheet2のY2に○か× を表示
○の場合は一致した行の指定の列のセルをの sheet2のZ2 に表示させたいのですが
どちらのデータベースにも完全に一致する列の紐づけデータがないのでVLOOKUPは使えず
重複データも沢山あるため複数検索のDGETを使っても検索条件を毎回 入力していかなければならないので大変な手間になってしまいます。

http://i.imgur.com/SFsX0Zq.jpg

二行目・三行目とオートフィルで全ての行に対応できる方法はないでしょうか?
表示されていない列は非表示にしてあります。

関数にはこだわりません。複雑になってしまってもいいです。
マクロでもいいです。
皆様お知恵をお貸しください。宜しくお願い致します。

投稿日時 - 2014-10-02 09:24:40

QNo.8775961

すぐに回答ほしいです

質問者が選んだベストアンサー

こんばんは!
関数での方法は回答済みなので、VBAでの一例です。

標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。

Sub Sample1() 'この行から
Dim i As Long, lastRow1 As Long, lastRow2 As Long
Dim c As Range, wS As Worksheet
Set wS = Worksheets("Sheet2")
Application.ScreenUpdating = False
lastRow2 = wS.Cells(Rows.Count, "J").End(xlUp).Row
If lastRow2 > 1 Then
Range(wS.Cells(2, "Y"), wS.Cells(lastRow2, "Z")).ClearContents
End If
wS.Range("A:A").Insert
With Range(wS.Cells(2, "A"), wS.Cells(lastRow2, "A"))
.Formula = "=K2&""_""&Q2&""_""&T2"
.Value = .Value
End With
With Worksheets("Sheet1")
lastRow1 = .Cells(Rows.Count, "B").End(xlUp).Row
.Range("A:A").Insert
With Range(.Cells(2, "A"), .Cells(lastRow1, "A"))
.Formula = "=C2&""_""&L2&""_""&T2"
.Value = .Value
End With
For i = 2 To lastRow2
Set c = .Range("A:A").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
wS.Cells(i, "Z") = "×"
Else
wS.Cells(i, "Z") = "○"
wS.Cells(i, "AA") = .Cells(c.Row, "Y")
End If
Next i
.Range("A:A").Delete
wS.Range("A:A").Delete
End With
Application.ScreenUpdating = True
End Sub 'この行まで

※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。
※ 作業列を使用し関数でやる方法をコードにしただけです。m(_ _)m

投稿日時 - 2014-10-02 19:09:52

お礼

ありがとうございます!
本当に助かりました。

投稿日時 - 2014-10-06 17:34:18

ANo.3

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

以下の数式を入力して下方向にオートフィルしてください。

Y2セル
IF(COUNTIFS(Sheet1!B:B,J2,Sheet1!K:K,P2,Sheet1!S:S,S2),"○","×")

Z2セル
=IF(Y2="○",INDEX(Sheet1!$X$2:$X$1000,MATCH(J2&P2&S2,INDEX(Sheet1!$B$2:$B$1000&Sheet1!$K$2:$K$100&Sheet1!$S$2:$S$1000,),0)),"")

投稿日時 - 2014-10-02 13:51:21

お礼

ありがとうございます!
本当に助かりました。

投稿日時 - 2014-10-06 17:33:38

ANo.1

Y2に
=IF(COUNTIFS(Sheet1!B:B,J2,Sheet1!K:K,P2,Sheet1!S:S,S2),"○","×")
以下コピー

とかで。

投稿日時 - 2014-10-02 09:38:36

お礼

ありがとうございます!
助かりました。

投稿日時 - 2014-10-06 17:33:03

あなたにオススメの質問