| 
    
     |  | ▼どぢょりん さん: おはようございます。
 前にこの質問が出た時も思いましたが、
 「セルにオートシェープで丸を付け」る処理そのものはマクロ記録で
 基本が得られます。
 
 >Sheet1には元データが入っています。
 >  A列(コード) B列(品名) C列(価格) D(個数) E(仕入先)
 >____________________________________
 >1  11111-111    商品A    10,000     5     A社
 >____________________________________
 >2  22222-222    商品B    20,000     3     B社
 >____________________________________
 >3  33333-333    商品C    30,000     2     C社
 >____________________________________
 >4  44444-444    商品D    40,000     8     D社
 >____________________________________
 >  (以下 約200行)
 >
 >
 >このうち、該当する行だけを選択してsheet2に貼り付けるマクロを作りました。
 >sheet3が定められた様式になっていて、sheet2と結ばれています。
 これはフィルタで抽出しているわけですか?
 つまり、
 「商品A」 といったら 「A社」が返ってくるような、LOOKUPテーブルを
 メモリ上につくっておけば、
 
 >sheet3
 >   A列      B列  C列  D列  E列  F列
 >____________________________
 >1 11111-111 商品A 10,000  5   A社   B社
 >2                        C社   その他
 >____________________________
 >3 22222-222 商品B 20,000  3   A社   B社
 >4                        C社   その他
 >____________________________
 >5 33333-333 商品C 30,000  2   A社   B社
 >6                        C社   その他
 >____________________________
 >7 44444-444 商品D 40,000  8   A社   B社
 >8                        C社   その他
 >____________________________
 
 >E・F列の該当するセルにオートシェープで丸を付けたい
 という目的のために「商品 - 仕入れ先」対応表をLOOKUPすることができる
 のではないかと思います。
 LOOKUPテーブルといったのは、具体的には Dictionaryオブジェクトのこと
 です。
 Sheet2に出現している「商品と対応する仕入れ先名」をDicに格納していけば
 LOOKUPテーブルは簡単につくれます。
 Dim dic As Object
 Set dic =CreateObject("Scripting.Dictionary")
 dic("商品A") = "A社"
 〜
 イメージとしては こういう感じです。
 
 これができあがったら、
 Sheet3 の「商品」の列をうえから順にみていって、
 If dic.Exists("商品A") Then
 'dic("商品A") で"A社" が返るから、
 E,F列の その行.Range(E1:F2)に書いてある仕入れ先名のなかで
 "A社"のセルに 丸を描く
 
 といったLoop処理をしていけばいいと思います。
 
 |  |