2011-07-19 9 views
2

Sheet1Sheet2Excel-VBAで2つの別々の列の列の文字列の違いを比較するにはどうすればよいですか?

私は2枚の画像は、私は私のExcel文書(シート1、シート2)から撮影したことをリンクしていとりわけ

は、ここで基本的には簡単な説明ですが、私はちょうど私のマクロは部品番号(列Cを比較したいです)を両方のシートから削除し、その違いを確認します。また、両方のシート間で文字列の違いが検出されると、BOM-listのシート上の行が強調表示され、パートナンバー(C列)の違いをユーザーに示します。しかし、それは画像に見られるように問題もあります。空の文字列を比較して間違った結果を与えるのを防ぐために、ループが処理しなければならない "スペース"を持つ行があります。

ご迷惑をかけて申し訳ございませんが、私の貧弱な英語のコマンドと説明があなたには分かりません。誰かがこれについて私を導くことができるのですか?私はむしろどこでどのように開始するのかについては客観的ではなく、私はエクセルVBAプログラミングの知識についての事前知識なしに1週間以内にこれを完了しなければなりません。

更新日:私は誰かが見てみると、私が代わりに列Cの範囲の値のPに列Aの行全体を強調するためにコードを変更することができますどのように私にあなたの意見を与えることができます私のポストを更新しました

違いのみ?

Sub differences() 

    Dim ws1 As Worksheet, ws2 As Worksheet 
    Dim lastRow1 As Integer, lastrow2 As Integer 
    Dim rng1 As Range, rng2 As Range, temp As Range, found As Range 

    Application.ScreenUpdating = False 

    Set ws1 = ThisWorkbook.Sheets("Sheet1") 
    Set ws2 = ThisWorkbook.Sheets("Sheet2") 

    lastRow1 = ws1.Range("A" & Rows.Count).End(xlUp).Row 
    lastrow2 = ws2.Range("A" & Rows.Count).End(xlUp).Row 

    Set rng1 = ws1.Range("C21:C" & lastRow1) 
    Set rng2 = ws2.Range("C21:C" & lastrow2) 

    For Each temp In rng1 
     Set found = Find_Range(temp.Value, rng2, , xlWhole) 
     If found Is Nothing Then 
      temp.Interior.ColorIndex = 3 
     End If 
    Next temp 

    For Each temp In rng2 
     Set found = Find_Range(temp.Value, rng1, , xlWhole) 
     If found Is Nothing Then 
      temp.Interior.ColorIndex = 3 
     End If 
    Next temp 


End Sub 

Function Find_Range(Find_Item As Variant, Search_Range As Range, Optional LookIn As Variant, Optional LookAt As Variant, Optional MatchCase As Boolean) As Range 

    Dim c As Range 
    Dim firstAddress As String 

    If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas 
    If IsMissing(LookAt) Then LookAt = xlPart 'xlWhole 
    If IsMissing(MatchCase) Then MatchCase = False 

    With Search_Range 
     Set c = .Find(What:=Find_Item, LookIn:=LookIn, LookAt:=LookAt, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=MatchCase, SearchFormat:=False) 
     If Not c Is Nothing Then 
      Set Find_Range = c 
      firstAddress = c.Address 
      Do 
       Set Find_Range = Union(Find_Range, c) 
       Set c = .FindNext(c) 
      Loop While Not c Is Nothing And c.Address <> firstAddress 
     End If 
    End With 
End Function 
+0

にこれを追加する行
試みをハイライトとして、(少なくとも私にとっては)イメージはレジスタせずに到達できない

EDIT
... –

+0

@Tiagoカルドーゾもう一度やり直してもらえますか? – Vivian

+0

@Vivian私はちょうど試みたが、まだ登録する必要がある –

答えて

0

私は画像を参照してください傾けるように、私は何をやろうとしていることは部品番号が他のリストにし、それを強調表示しない場合が存在するかどうかをチェックするという仮定を行います。

私の頭の上から外れて、これは基本的に何をする必要があります。

Public Sub Test() 
    CompareRange Sheet1.Range("A2", "A8"), Sheet2.Range("A2", "A8") 
End Sub 


Public Sub CompareRange(range1 As Range, range2 As Range) 
    Dim CompareCell As Range 
    Dim CheckCell As Range 
    Dim CellFound As Boolean 
    For Each CompareCell In range1.Cells 
     CellFound = False 
     For Each CheckCell In range2.Cells 

      If CheckCell.Text = CompareCell.Text Then 
       CellFound = True 
      End If 
     Next CheckCell 
     If Not CellFound Then 
      CompareCell.Interior.Color = vbYellow 
     End If 
    Next CompareCell 
End Sub 

この関数は、単一の列範囲があることを前提としています。それ以外の場合は、範囲内のすべてのセルをチェックし、意図した以上に強調表示します。限り、あなたのFINDループに加え

Dim CompareSheet as Worksheet 'Add at top of function 

'Add to the For Each Loop 
Set CompareSheet = temp.Worksheet 
CompareSheet.Range("A" & temp.Row, "P" & temp.Row).Interior.ColorIndex = 3 
+0

これまでに提供されたVivianの情報に基づいて、考えられる解決策の1つになる可能性があります(列Aを列Cで置き換える、@ Nathanは画像を見ることができなかったために知りませんでした)。 –

+0

@Nathan Fisher私は別の問題を抱えています。http://stackoverflow.com/questions/6784915/how-to-import-excel-related-bom-list-content-into-a-excel-sheet-in-excel-vbaあなたは見て、それを解決する方法について私にいくつかの提案を与えることができますか? – Vivian

関連する問題