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

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

ただいまの
回答率

88.04%

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

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 491

score 4

前提・実現したいこと

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

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

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

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

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

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

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

EXCEL2010
windows7

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2020/04/07 08:54

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

0

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

セル範囲の指定方法

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/07 20: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

    キャンセル

  • 2020/04/12 00:22

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

    Set rng検索語 = Workbooks("元ファイル").Worksheets("リスト").Range("C10").Cells

    キャンセル

  • 2020/04/12 09:40

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

    キャンセル

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

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る