質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

573閲覧

Excel2つのファイルデーターを比較して、セルの値を転記色付けしたい。

sno

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/04/06 12:18

前提・実現したいこと

Excel2つのファイルデーターを比較して、セルの値を転記色付けしたい。
検索して探してみましたが、列ごと転記するものはありましたが、値を比較して
転記する方法を見つけることが出来ませんでした。
こちらに質問させていただきました。よろしくお願いいたします。

EXCELシートは以下の感じです

元ファイル内 ”リスト”シート
C列 客先コード(英数) D列 名前 K列 商品名 L列 商品コード (10行目から値あり)

参照ファイル内 ”注文リスト” (15行目から値あり)

G列 客先コード O列 商品コード I列 名前

比較条件
1.
元 ファイル C列 、 L列 
参照ファイル G列 、 O列 を比較して一致した場合に元ファイルP列へ 注文リストJ列の値を転記
2.
元ファイルに、商品コードがなく参照ファイル内にあった場合には 注文リストO列のセルを赤くする
(新商品が出た場合に参照ファイルにデーターが先に作成されることがあるため)

補足情報(FW/ツールのバージョンなど)

EXCEL2010
windows7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

元ファイルに、商品コードがなく参照ファイル内にあった場合には 注文リスト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/06 22:59

編集2020/04/08 04:46
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sno

2020/04/07 11:42

1)検索語となる値が入っているセルは例えばどれ?  元ファイル シート”リスト”内C10~C50000 客先コード(データ数は変化します)                 L10~L50000 商品コード 2)それに対して、参照する一覧表のセル範囲はどれ?  参照ファイル シート”注文リスト”内 G15~G50000 客先コード                      O15~O50000 商品コード 3)検索語のセルの値をみて覚えて、 4)一覧表のセル範囲を上から一つづつ同じ値があるかみて、 5)同じ値があったら隣のセルをコピペする。 という形でなら、コードが書けそうですか? その辺から始めてみてはいかがでしょうか? 以下のように作成して見ましたが、上手くできているのか良くわかりません。 ものすごく時間がかかっています。 複数の条件は、理解できないので。一つの条件から始めてみました。 Sub TEST3() Dim MOTO As Long Dim HIKAKU As Long Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("C65536").End(xlUp).Row For HIKAKU = 15 To d For MOTO = 10 To d If sh2.Range("G" & HIKAKU).Value = sh1.Range("C" & MOTO).Value Then MsgBox sh1.Range("g" & HIKAKU).Value sh1.Range("D" & MOTO).Value = "一致" Exit For End If Next Next End Sub
sno

2020/04/11 15:22

時間が経過し申し訳ございません。 下記の部分でエラーが発生してファイル名、シート名を確認変更して見ましたが改善できません 原因として何が考えられるでしょうか? エラー 9 「インデックスが有効範囲にありません。」 Set rng検索語 = Workbooks("元ファイル").Worksheets("リスト").Range("C10").Cells
mattuwan

2020/04/12 00:40

ブックの拡張子を省略してるとか? 表示されてるように書かなきゃ違うって言われても仕方ないのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問