|
▼どぢょりん さん:
おはようございます。
前にこの質問が出た時も思いましたが、
「セルにオートシェープで丸を付け」る処理そのものはマクロ記録で
基本が得られます。
>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処理をしていけばいいと思います。
|
|