2016-07-09 5 views
1

Sheet2.Column "A"のCell.valueがSheet( "Civil")に一致しない場合、そのセルをSheets( "Sheet2).Column"にコピーする "A" 「VBA Excell match Else

Correct Results

正しい結果が添付画像上のようになりますが、私はシート埋めるために正しいコードを書く に問題がある(」シート2).Column「D」を

Sub NewSearch_A() 

Dim cell As Range, rng As Range, rng2 As Range, rng3 As Range, cell1 As Range, n As Integer, m As Integer 
Set rng = Sheets("Civil").Range("A2:A1000") 
Set rng2 = Sheets("Sheet2").Range("A1:A100") 
Set rng3 = Sheets("Sheet2").Range("C1:C100") 
Set rng4 = Sheets("Sheet2").Range("D1:D100") 

n = 1 
m = 1 
For Each cell In rng 
    n = n + 1 
For Each cell1 In rng2 
    m = m + 1 
     If cell.Value = cell1.Value Then 
      Sheets("Sheet2").Range("C" & m & ":C" & m).Value = Sheets("Civil").Range("B" & n & ":B" & n).Value 

     Else 

      ' ???????????????????????????????????????????????? 


     End If 
    Next cell1 
    m = 1 
Next cell 
ActiveSheet.Columns("A:C").AutoFit 


End Sub 
+0

(これはあなたのpayscaleを超えるかもしれないが、あなたは[範囲のYにおける範囲Xの検索値]を見ている必要がありhttp://codereview.stackexchange.com/questions/133664/searching-values-of- range-x-in-range-y/133721#133721)。 – Jeeped

答えて

2

は避けてください第2ループはWorksheetFunctionMATCH functionです。

Sub NewSearch_A() 
    Dim rw As Long, mtch As Variant, wsc As Worksheet 

    Set wsc = Worksheets("Civil") 

    With Worksheets("Sheet2") 
     For rw = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row 
      mtch = Application.Match(.Cells(rw, "A").Value2, wsc.Columns("A"), 0) 
      If IsError(mtch) Then 
       .Cells(rw, "D") = .Cells(rw, "A").Value2 
      Else 
       .Cells(rw, "C") = wsc.Cells(mtch, "B").Value2 
      End If 
     Next rw 
    End With 

End Sub 
+0

完璧な作業、VBAコーディングの素晴らしいレッスンのための@Jeepedありがとう! – FotoDJ

+0

ネストされたループが必要になることがあります。そうであれば、あなたの目標に達すると 'Exit For'を使って、それ以上の行を調べ続けることはありません。内側のループは終了し、外側のループは中断したところから再開します。 – Jeeped