[[20120509100756]] 『別シートの重複データ検索』(たんぽぽ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートの重複データ検索』(たんぽぽ)

 OSはXP
 バージョン2003

 はじめまして。
 sheet1のA列に会社の名前、B列にデータ件数の合計
 sheet2のA列に会社の名前とB列にクレーム件数の合計が入っています。

 順序はB列を基準に数字の大きい順です。なのでSheet1と2の並び順は異なっております。

 こんな感じです。
 sheet1                  Sheet2
 A列      B列       A列      B列
 AAA CO.,LTD  150       BBB CO.,LTD  90      
 BBB CO.,LTD  120       AAA CO.,LTD  70 
 CCC CO.,LTD  90        CCC CO.,LTD    2

 Sheet1と2のA列を検索し、同一の値があったらSheet1のC列にSheet2のB列の値を入れたいと思ってます。

 A列      B列       C列  
 AAA CO.,LTD  150       70      
 BBB CO.,LTD  120       90 
 CCC CO.,LTD  90        2

 たとえば関数を使って
 IF(OR(C1="",COUNTIF(Sheet2!A:A,A1)=0),"",INDEX(Sheet2!A:B,MATCH(A1,Sheet2!A:A,0),2))

 みたいな感じでもいけるかな、と思ってますが(まだ試してませんが)
 VBAでも同じようなことが出来るでしょうか?
 


 >(まだ試してませんが)

 試してみようよ。

 >VBAでも同じようなことが出来るでしょうか?

 うん。もちろんできる。
 ・関数をそのままVBAでセルに入れ込むことができる。
 ・VBAで判定して処理することもできる。この方法は、千差万別、たくさんあるね。

 ★質問の主旨は、できるかできないかを確かめたい?
 それとも、コードが欲しい?

 (ぶらっと)

 とりあえず、マッチングのパターンを3つほど。
 いずれも、処理効率をアップする手当は割愛している。
 なお、アップされた
 IF(OR(C1="",COUNTIF(Sheet2!A:A,A1)=0),"",INDEX(Sheet2!A:B,MATCH(A1,Sheet2!A:A,0),2))
 これって、C1 はだめなんじゃない?

 Sub Sample1()
    With Sheets("Sheet1")
        .Range("A1", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 2).Formula = _
            "=IF(OR(A1="""",COUNTIF(Sheet2!A:A,A1)=0),"""",INDEX(Sheet2!A:B,MATCH(A1,Sheet2!A:A,0),2))"
    End With
 End Sub

 Sub Sample2()
    Dim c As Range
    Dim a As Variant

    With Sheets("Sheet1")
        For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
            a = Application.Match(c.Value, Sheets("Sheet2").Columns("A"), 0)
            If IsNumeric(a) Then
                c.Offset(, 2).Value = Sheets("Sheet2").Range("B" & a).Value
            Else
                c.Offset(, 2).ClearContents
            End If
        Next
    End With

 End Sub

 Sub Sample3()
    Dim dic As Object
    Dim c As Range

    Set dic = CreateObject("Scripting.Dictionary")

    With Sheets("Sheet2")
        For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
            dic(c.Value) = c.Offset(, 1).Value
        Next
    End With

    With Sheets("Sheet1")
        For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
            c.Offset(, 2).Value = dic(c.Value)
        Next
    End With

 End Sub

 (ぶらっと)

>ぷらっと様

すいません。関数間違ってました・・・(汗)

しかも質問の言葉が足りませんでした。

VBAでの関数の組み込み方を知らなかったので、どうするのかと思い
なんかヒントをいただければなー、と。

サンプル1がすごく参考になりました。
内容分かりやすかったです。関数の使い方も勉強できました。

ありがとうございました。
(たんぽぽ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.