2016-06-19 16 views
0

が、この中で私を助けてください..エクセルVBAマクロ

を私は2つのワークブックBookone.xlsmとBooktwo.xlsm、bookoneを持っていますソースとbooktwoはターゲットのExcelファイルです。

BookoneとBooktwoには以下のデータがあります。 Source and target excel file snapshot

私はちょうど空であるセルを更新する必要がありますが、すべての細胞は私のVBAスクリプトの非空のセル

出力などの更新取得されます。事前に Output

おかげ.. :)

マイコード:

Sub UpdateW2() 

Dim w1 As Worksheet, w2 As Worksheet 
Dim c As Range, FR As Long 

Application.ScreenUpdating = False 

Set w1 = Workbooks("BookOne.xlsm").Worksheets("Sheet1") 
Set w2 = Workbooks("BookTwo.xlsm").Worksheets("Sheet1") 


For Each c In w1.Range("D2", w1.Range("D" & Rows.Count).End(xlUp)) 
    FR = 0 
    On Error Resume Next 
    FR = Application.Match(c, w2.Columns("A"), 0) 
    On Error GoTo 0 
    If FR <> 0 Then w2.Range("C" & FR).Value = c.Offset(, -3) 
    If FR <> 0 Then w2.Range("C" & FR).Value.Interior.ColorIndex=8 
Next c 
Application.ScreenUpdating = True 

End Subの

+0

ご意見ありがとうございます。 :) – Dhilipkumar

答えて

1

あなたはw2Aw1Dから値を検索しています。そこにはすべてのの値が見つかりますが、 "Mach7"は除きます。したがってすべての値が更新されます。

w2の列Cがまだ空の場合は、更新する必要があります。次に、これをチェックする必要があります。 WorksheetFunction.Matchとは逆に

Sub UpdateW2() 

Dim w1 As Worksheet, w2 As Worksheet 
Dim c As Range, FR As Variant 

Application.ScreenUpdating = False 

Set w1 = Workbooks("BookOne.xlsm").Worksheets("Sheet1") 
Set w2 = Workbooks("BookTwo.xlsm").Worksheets("Sheet1") 

For Each c In w1.Range("D2", w1.Range("D" & Rows.Count).End(xlUp)) 
    FR = Empty 
    FR = Application.Match(c, w2.Columns("A"), 0) 
    If TypeName(FR) <> "Error" Then 'match was found 
    If IsEmpty(w2.Range("C" & FR)) Then 'cell in w2 is still empty 
    w2.Range("C" & FR).Value = c.Offset(, -3) 
    w2.Range("C" & FR).Interior.ColorIndex = 8 
    End If 
    End If 
Next c 

Application.ScreenUpdating = True 

End Sub 

一致が見つからない場合は、Application.Matchエラーをスローしませます。代わりに、エラー値を返します。したがって、​​FRVariantとすると、On Error...は必要ありません。次に、FRがエラー値かどうかをチェックすることができます。

+0

ありがとう!コードは動作しています:) – Dhilipkumar