質問: ### 前提・実現したいこと Excel2つのファイルデーターを比較して、セルの値を転記色付けしたい。 検索して探してみましたが、列ごと転記するものはありましたが、値を比較して 転記する方法を見つけることが出来ませんでした。 こちらに質問させていただきました。よろしくお願いいたします。 EXCELシートは以下の感じです 元ファイル内 ”リスト”シート C列 客先コード(英数) D列 名前 K列 商品名 L列 商品コード (10行目から値あり) 参照ファイル内 ”注文リスト” (15行目から値あり) G列 客先コード O列 商品コード I列 名前 比較条件 1. 元 ファイル C列 、 L列 参照ファイル G列 、 O列 を比較して一致した場合に元ファイルP列へ 注文リストJ列の値を転記 2. 元ファイルに、商品コードがなく参照ファイル内にあった場合には 注文リストO列のセルを赤くする (新商品が出た場合に参照ファイルにデーターが先に作成されることがあるため) ### 補足情報(FW/ツールのバージョンなど) EXCEL2010 windows7
回答: > > 元ファイルに、商品コードがなく参照ファイル内にあった場合には 注文リストO列のセルを赤くする > > > 一度にいろんなことをやろうとせずに、一つづつ処理してみましょう。 まずは、 1)検索語となる値が入っているセルは例えばどれ? 2)それに対して、参照する一覧表のセル範囲はどれ? それをはっきりさせたら、 3)検索語のセルの値をみて覚えて、 4)一覧表のセル範囲を上から一つづつ同じ値があるかみて、 5)同じ値があったら隣のセルをコピペする。 という形でなら、コードが書けそうですか? その辺から始めてみてはいかがでしょうか? ``` Sub test() Dim rng検索語 As Range '検索語のセル Dim rng検索範囲 As Range '検索範囲 Dim c As Range '範囲を構成する各各のセル '1)検索語となる値が入っているセルは例えばどれ? Set rng検索語 = Workbooks("元ファイル").Worksheets("リスト").Range("C10").Cells '2)それに対して、参照する一覧表のセル範囲はどれ? Set rng検索範囲 = Workbooks("参照ファイル").Worksheets("注文リスト").Range("G15:G50000").Cells '3)一覧表のセル範囲を上から一づつみていき、 For Each c In rng検索範囲 '4)もし値の同じものがあったら、 If rng検索語.Value = c.Value Then '5)検索語の9列右の値と、見ているセルの8列右の値が同じなら If rng検索語.Offset(, 9).Value = c.Offset(, 8).Value Then '6)値の転記 rng検索語.Offset(, 13).Value = c.Offset(, 3).Value Exit For 'ループを抜ける '7)もし、空白なら ElseIf IsEmpty(rng検索語.Offset(, 9).Value) = True Then '9)フォントを赤にする c.Offset(, 8).Font.Color = vbRed Exit For 'ループを抜ける End If End If Next End Sub ``` > > 以下のように作成して見ましたが、上手くできているのか良くわかりません。 > > ものすごく時間がかかっています。 > > 複数の条件は、理解できないので。一つの条件から始めてみました。 > > > ですから、一度にいろいろなことをせずに、 とりあえず1つのデータに対して考えてみます。 1つが出来れば、コンピューターは繰り返すのは得意ですので。 あと、処理に時間が掛かろうが、まずは「自分で出来るようになる」ことが肝要かと。 例えば、自転車とか、目標としては大会に出て優勝したいという目標があったとしても、 まだ、ろくに乗れてない状態で、「速く走れない」と嘆いているようなものです。 まずは補助なしで走れないと、その先はないかと思います。 それから、セルは、「このセル」って指示したときは、 どのブックのどのシートという情報も暗に含めて「この」と表現していますよね? そのセルから相対位置で(例えば何列右等)示すことが可能です。 そういう表現方法を学ぶといいと思います。 ``` Sub test() Dim rng検索語 As Range '検索語のセル Dim rng検索範囲 As Range '検索範囲 Dim c As Range '範囲を構成する各各のセル '1)検索語となる値が入っているセルは例えばどれ? Set rng検索語 = Workbooks("元ファイル").Worksheets("リスト").Range("C10").Cells '2)それに対して、参照する一覧表のセル範囲はどれ? Set rng検索範囲 = Workbooks("参照ファイル").Worksheets("注文リスト").Range("G15:G50000").Cells '3)一覧表のセル範囲を上から一づつみていき、 For Each c In rng検索範囲 '4)もし値の同じものがあったら、 If rng検索語.Value = c.Value Then '5)検索語の9列右の値と、見ているセルの8列右の値が同じなら If rng検索語.Offset(, 9).Value = c.Offset(, 8).Value Then '6)値の転記 rng検索語.Offset(, 13).Value = c.Offset(, 3).Value Exit For 'ループを抜ける '7)もし、空白なら ElseIf IsEmpty(rng検索語.Offset(, 9).Value) = True Then '9)フォントを赤にする c.Offset(, 8).Font.Color = vbRed Exit For 'ループを抜ける End If End If Next End Sub ``` まずはここまで、理解できますか? 参考URL>> セル範囲の指定方法