
【VBA】複数条件のVLOOKUP
いつもこちらの識者の方々にはお世話になっています。
VBAの質問です。
sheet1に下記のような表があります。
品目 入荷日 出荷日
バナナ 7月1日 7月5日
りんご 7月5日 8月24日
みかん 8月5日 8月30日
sheet2には下記の表があります。
品目 入荷日 出荷日 箱
バナナ 7月1日 7月5日 黄
りんご 7月5日 8月24日 赤
みかん 8月5日 8月30日 オレンジ
バナナ 6月28日 8月30日 緑
りんご 6月20日 7月5日 青
みかん 6月18日 8月24日 朱
この表のsheet1の、品目・入荷日・出荷日の全ての項目が一致しているものをsheet2から探し、sheet1ののD2セル以降に箱の色をあてはめていきたいのですが、&で文字列をくっつけた検索用の行を作ることができないため難儀しています。
作業用の列を作らずにやる場合、どういった構文が適していますでしょうか。
No.3ベストアンサー
- 回答日時:
こんばんは!
>&で文字列をくっつけた検索用の行を作ることができないため・・・
とありますが、作業用の列を設けては具合が悪いことがあるのでしょうか?
質問ではVBAでの方法となっていますが、VBAでも作業用の列を設けた方が簡単だと思うのですが、
今回は質問通りに作業用の列を設けずにやってみました。
標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。
Sub Sample1() 'この行から
Dim i As Long, k As Long, endRow As Long, wS1 As Worksheet, ws2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
endRow = wS1.Cells(Rows.Count, "D").End(xlUp).Row
Application.ScreenUpdating = False
If endRow > 1 Then
Range(wS1.Cells(2, "D"), wS1.Cells(endRow, "D")).ClearContents
End If
For i = 2 To wS1.Cells(Rows.Count, "A").End(xlUp).Row
For k = 2 To ws2.Cells(Rows.Count, "A").End(xlUp).Row
With wS1.Cells(i, "A")
If .Value = ws2.Cells(k, "A") And .Offset(, 1) = ws2.Cells(k, "B") And .Offset(, 2) = ws2.Cells(k, "C") Then
.Offset(, 3) = ws2.Cells(k, "D")
End If
End With
Next k
Next i
Application.ScreenUpdating = True
End Sub 'この行まで
※ 二重ループになりますので、そこそこ時間を要するかもしれません。
※ VBAですので、列挿入 → 作業列として使用 → 挿入列を削除!
といった感じでやればもう少しはやくなると思います。m(_ _)m
No.5
- 回答日時:
最近Workbookに対するADOの適用に凝っているのでご参考までに。
xl2007以降対応です。'日付は見た目7月5日ですが、2013/7/5といった日付シリアルで入っている事を前提としています。
'Microsoft ActiveX Data Objects Libraryに参照設定が必要 詳細は下記参照の事
'http://okwave.jp/qa/q8243178.html
Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim i As Long
Dim targetRange As Range, targetRow As Range
Const srcSQL As String = "SELECT [箱] FROM [Sheet2$] WHERE [品目]='criteria1' AND [入荷日]=#criteria2# AND [出荷日]=#criteria3#;"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties").Value = "Excel 12.0 Macro;HDR=YES"
.Open ThisWorkbook.FullName
End With
With Sheets("Sheet1")
Set targetRange = .Range("A1").CurrentRegion
Set targetRange = Intersect(targetRange, targetRange.Offset(1, 0))
End With
For Each targetRow In targetRange.Rows
SQL = srcSQL
For i = 1 To 3
SQL = Replace(SQL, "criteria" & CStr(i), targetRow.Cells(i).Value)
Next i
rs.Open SQL, cn, adOpenStatic, adLockReadOnly
If Not rs.BOF Then
targetRow.Cells(3).Offset(0, 1).Value = rs.Fields(0).Value
End If
rs.Close
Next targetRow
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
'2シート間のクエリで一気に目的のデータを生成して別シートに貼り付ける方法もありそうですが、順番が変わったりしそうなので、ここではSheet1の行毎にループを回す方法をとっています。
凄すぎます・・・
凄すぎて今の僕にはほとんどわかりませんでした。
でも一つ一つ勉強していってこのレベルまで到達できるよう頑張ります!
No.4
- 回答日時:
関数で対応するなら、D2セルに連結文字を検索値とする以下のような数式が計算負荷が少ないと思います。
=INDEX(Sheet2!$D$2:$D$1000,MATCH(A2&B2&C2,INDEX(Sheet2!$A$2:$A$1000&Sheet2!$B$2:$B$1000&Sheet2!$C$2:$C$1000,),0))&""
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(エンターテインメント・スポーツ) ニートは、過去へ戻るしかないですよね? 1 2023/02/19 22:06
- その他(エンターテインメント・スポーツ) 2007年の想い出はありますか? 1 2023/03/03 20:54
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルについて 8 2023/02/11 07:36
- 邦楽 サザンオールスターズの皆さんは、何故武道館まで時間がかかったのでしょうか 3 2022/06/03 21:06
- ストレス 女性車掌が不機嫌な理由は何だと思いますか? 1 2022/09/09 21:28
- 妊活 妊娠の可能性がないと思って大丈夫でしょうか? 1 2022/07/08 20:25
- 妊活 妊娠の可能性 1 2022/07/08 20:46
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- その他(エンターテインメント・スポーツ) 15年前って、昔ですか?それともわりと最近? 2 2023/02/07 22:57
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
英数字のみ全角から半角に変換
-
マクロ1があります。 A1のセル...
-
Office 2021 Professional Plus...
-
outlookのメールが固まってしま...
-
マクロ自動コピペ 貼り付ける場...
-
【Excel VBA】PDFを作成して,...
-
office365って抵抗感ないですか?
-
会社PCのメールが更新されない
-
Excel 日付を比較したら、同じ...
-
teams設定教えて下さい。 ①ビデ...
-
別シートの年間行事表をカレン...
-
Microsoft Formsの「個人情報や...
-
エクセルの貼り付け「リンクさ...
-
Excelで〇のついたものを抽出し...
-
エクセルでXLOOKUP関数...
-
エクセル:一定間隔で平均値を...
-
Office2021を別のPCにインスト...
-
office2019 のoutlookは2025年1...
-
Microsoft 365 の一般法人向け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
英数字のみ全角から半角に変換
-
大学のレポート A4で1枚レポー...
-
【Excel VBA】PDFを作成して,...
-
マクロ1があります。 A1のセル...
-
Office 2021 Professional Plus...
-
マクロ自動コピペ 貼り付ける場...
-
会社PCのメールが更新されない
-
Microsoft Formsの「個人情報や...
-
エクセルでXLOOKUP関数...
-
Excel 日付を比較したら、同じ...
-
Office2021を別のPCにインスト...
-
office2019 のoutlookは2025年1...
-
パソコンを買い替える際、前の...
-
outlookのメールが固まってしま...
-
Excel テーブル内の空白行の削除
-
office365って抵抗感ないですか?
-
Office(H&B2016)を使用中に古...
-
Outlook で宛先が複数の場合の人数
-
teams設定教えて下さい。 ①ビデ...
おすすめ情報