[[20190307165610]] 『VBA 複数条件を検索し値を表示したい』(みや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 複数条件を検索し値を表示したい』(みや)

VLOOKUP関数の複数条件みたいな事をマクロでしたいです。

検索するシート1にはA〜M列までデータが入力されています。
行数は都度変わりますが、列数は変わりません。
空白が存在するのはG、H、K、L列
検索するのはB列とE列になります。
(1)B列の表記は数字2桁とアルファベット3文字(すべて半角)で25VVVという様な表記になります。
(2)E列の表記はアルファベット・数字・#の組み合わせでS1G#1という様な表記になります。

検索結果を表示するシート2は
C列のC3以降(行数は変わる可能性があるが、必ず入力があります)に(1)が表記されています。
2行目G列〜AE列まで(2)が表記してあります。
G3以降に(1)と(2)を参照してシート1のJ列の値を返すという事をしたいのですが、可能でしょうか?
色々調べてみましたが、ヒットせず断念しています。。。

< 使用 Excel:Excel2016、使用 OS:Windows7 >


https://www.forguncy.com/blog/20170718_filteroption
 フィルターオプションじゃだめですか?

 最近似たような質問多いけどなんでだろう
(稲葉) 2019/03/07(木) 18:06

 あ、質問読み違えてるかもしれない。
 シート2はクロス・・・?
 例として、シート1のA B列を検索して、
 シート2の交わるところに、シート2のC列の値を出したいってことかしら?
 シート1
    |[A]  |[B]  |[C]     
 [1]|型番 |仕様 |発注番号
 [2]|25VVV|S1G#1|A       
 [3]|26VVV|S2G#1|B       
 [4]|27VVV|S3G#1|C       

 シート2
     |[C]  |[D]|[E]|[F]|[G]  |[H]  |[I]  
 [2]|     |   |   |   |S1G#1|S2G#1|S3G#1
 [3]|25VVV|   |   |   |A    |     |     
 [4]|26VVV|   |   |   |     |B    |     
 [5]|27VVV|   |   |   |     |     |C    

(稲葉) 2019/03/07(木) 18:20


 > シート2の交わるところに、シート2のC列の値を出したいってことかしら?
               ~~~~~~~↑~~
                  シート1の間違いでした。すみません。

(稲葉) 2019/03/07(木) 18:35


 そろそろ店じまいするので、たたき台おいておきます。
 また明日見させてください。
    Sub クロス()
        Dim dic As Object
        Dim cB As String, cE As String, cJ As String
        Dim i As Long, j As Long
        Set dic = CreateObject("Scripting.Dictionary")
        With Sheets("Sheet1")
            For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
                cB = .Cells(i, "B").Value: cE = .Cells(i, "E").Value: cJ = .Cells(i, "J").Value
                If Not dic.exists(cB) Then Set dic(cB) = CreateObject("Scripting.Dictionary")
                dic(cB)(cE) = cJ
            Next i
        End With
        With Sheets("Sheet2")
            For i = 3 To .Cells(Rows.Count, "C").End(xlUp).Row
                For j = Range("G1").Column To .Cells(2, Columns.Count).End(xlToLeft).Column
                    cB = .Cells(i, "C").Value: cE = .Cells(2, j).Value
                    If dic.exists(cB) Then If dic(cB).exists(cE) Then .Cells(i, j).Value = dic(cB)(cE)
                Next j
            Next i
        End With
    End Sub

(稲葉) 2019/03/07(木) 19:55


(稲葉)さん

ありがとうございます。
バッチリでした!
(みや) 2019/03/08(金) 09:30


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.