元ファイルに、商品コードがなく参照ファイル内にあった場合には 注文リストO列のセルを赤くする
一度にいろんなことをやろうとせずに、一つづつ処理してみましょう。
まずは、
1)検索語となる値が入っているセルは例えばどれ?
2)それに対して、参照する一覧表のセル範囲はどれ?
それをはっきりさせたら、
3)検索語のセルの値をみて覚えて、
4)一覧表のセル範囲を上から一つづつ同じ値があるかみて、
5)同じ値があったら隣のセルをコピペする。
という形でなら、コードが書けそうですか?
その辺から始めてみてはいかがでしょうか?
ExcelVBA
1Sub test()
2 Dim rng検索語 As Range '検索語のセル
3 Dim rng検索範囲 As Range '検索範囲
4 Dim c As Range '範囲を構成する各各のセル
5
6'1)検索語となる値が入っているセルは例えばどれ?
7 Set rng検索語 = Workbooks("元ファイル").Worksheets("リスト").Range("C10").Cells
8'2)それに対して、参照する一覧表のセル範囲はどれ?
9 Set rng検索範囲 = Workbooks("参照ファイル").Worksheets("注文リスト").Range("G15:G50000").Cells
10'3)一覧表のセル範囲を上から一づつみていき、
11 For Each c In rng検索範囲
12 '4)もし値の同じものがあったら、
13 If rng検索語.Value = c.Value Then
14 '5)検索語の9列右の値と、見ているセルの8列右の値が同じなら
15 If rng検索語.Offset(, 9).Value = c.Offset(, 8).Value Then
16 '6)値の転記
17 rng検索語.Offset(, 13).Value = c.Offset(, 3).Value
18 Exit For 'ループを抜ける
19 '7)もし、空白なら
20 ElseIf IsEmpty(rng検索語.Offset(, 9).Value) = True Then
21 '9)フォントを赤にする
22 c.Offset(, 8).Font.Color = vbRed
23 Exit For 'ループを抜ける
24 End If
25 End If
26 Next
27End Sub
以下のように作成して見ましたが、上手くできているのか良くわかりません。
ものすごく時間がかかっています。
複数の条件は、理解できないので。一つの条件から始めてみました。
ですから、一度にいろいろなことをせずに、
とりあえず1つのデータに対して考えてみます。
1つが出来れば、コンピューターは繰り返すのは得意ですので。
あと、処理に時間が掛かろうが、まずは「自分で出来るようになる」ことが肝要かと。
例えば、自転車とか、目標としては大会に出て優勝したいという目標があったとしても、
まだ、ろくに乗れてない状態で、「速く走れない」と嘆いているようなものです。
まずは補助なしで走れないと、その先はないかと思います。
それから、セルは、「このセル」って指示したときは、
どのブックのどのシートという情報も暗に含めて「この」と表現していますよね?
そのセルから相対位置で(例えば何列右等)示すことが可能です。
そういう表現方法を学ぶといいと思います。
ExcelVBA
1Sub test()
2 Dim rng検索語 As Range '検索語のセル
3 Dim rng検索範囲 As Range '検索範囲
4 Dim c As Range '範囲を構成する各各のセル
5
6'1)検索語となる値が入っているセルは例えばどれ?
7 Set rng検索語 = Workbooks("元ファイル").Worksheets("リスト").Range("C10").Cells
8'2)それに対して、参照する一覧表のセル範囲はどれ?
9 Set rng検索範囲 = Workbooks("参照ファイル").Worksheets("注文リスト").Range("G15:G50000").Cells
10'3)一覧表のセル範囲を上から一づつみていき、
11 For Each c In rng検索範囲
12 '4)もし値の同じものがあったら、
13 If rng検索語.Value = c.Value Then
14 '5)検索語の9列右の値と、見ているセルの8列右の値が同じなら
15 If rng検索語.Offset(, 9).Value = c.Offset(, 8).Value Then
16 '6)値の転記
17 rng検索語.Offset(, 13).Value = c.Offset(, 3).Value
18 Exit For 'ループを抜ける
19 '7)もし、空白なら
20 ElseIf IsEmpty(rng検索語.Offset(, 9).Value) = True Then
21 '9)フォントを赤にする
22 c.Offset(, 8).Font.Color = vbRed
23 Exit For 'ループを抜ける
24 End If
25 End If
26 Next
27End Sub
まずはここまで、理解できますか?
参考URL>>
セル範囲の指定方法
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/07 11:42
2020/04/11 15:22
2020/04/12 00:40