2017-01-13 9 views
0

"test"シートに2つの列があります。列CとDを仮定してみましょう。2つの列を比較し、vbaを使用してペーストをコピーします。

CとDの各行には、「COMPATIBLE」または「NOT DETERMINED」または空白のセルが含まれている可能性があります。

私はcol CとDを比較したいと思います.Cが "COMPATIBLE"でDが "NOT DETERMINED"であれば、 "COMPATIBLE"はDにペーストしてください。

私はコードではなく、それを完了する方法がわから下回っています:

進行コードで仕事を更新
Sub compare_cols() 

'Get the last row 
Dim Report As Worksheet 
Dim i As Integer, j As Integer 
Dim lastRow As Integer 

Set Report = Excel.Worksheets("test") 'You could also use Excel.ActiveSheet _ 
             if you always want this to run on the current sheet. 

lastRow = Report.UsedRange.Rows.Count 

Application.ScreenUpdating = False 

For i = 2 To lastRow 
    For j = 2 To lastRow 
     If Report.Cells(i, 1).Value = "COMPATIBLE" Then 
      If InStr(1, Report.Cells(j, 2).Value, Report.Cells(i, 1).Value, vbTextCompare) > 0 

Option Explicit 

Sub compare_cols() 
With Worksheets("Latency") '<-.-| reference your worksheet 
    With .Range("F1:G" & .UsedRange.Rows(.UsedRange.Rows.count).Row) '<--| reference its columns C:D range from row 1 down to worksheet last used row 
     Correct .Cells, "COMPATIBLE", "Not Determind", 2 
     Correct .Cells, "Determind", "COMPATIBLE", 1 
    End With 
    .AutoFilterMode = False 
End With 
End Sub 

Sub Correct(rng As Range, val1 As String, val2 As String, colToChangeIndex As Long) 
With rng '<--| reference passed range 
    .AutoFilter Field:=1, Criteria1:=val1 '<--| filter referenced range on its 1st column with 'val1' 
    .AutoFilter Field:=2, Criteria1:=val2 '<--| filter referenced range on its 2nd column with 'val2' 
    If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filterd cells other than header 
     .Resize(.Rows.count - 1, 1).Offset(1, colToChangeIndex - 1).SpecialCells(xlCellTypeVisible).Value = "COMPATIBLE" '<--| write "COMPATIBLE" in column "D" 
    End If 
End With 
End Sub 
+0

これはすべてコードですか? ...まず 'If'と' For'文を閉じる必要があります。何を試しましたか?そして2番目の 'If'ステートメントを完成させてください... – BruceWayne

+0

はい私はこれについています。どのようにコードを閉じてコードを完成させるかわからない –

答えて

0

このコードをでき試してみてくださいAutoFilter()

Option Explicit 

Sub compare_cols() 
    With Worksheets("test") '<-.-| reference your worksheet 
     With .Range("C1:D" & .UsedRange.Rows(.UsedRange.Rows.Count).Row) '<--| reference its columns C:D range from row 1 down to worksheet last used row 
      Correct .Cells, "COMPATIBLE", "NOT DETERMINED", 2 
      Correct .Cells, "NOT DETERMINED", "COMPATIBLE", 1 
     End With 
     .AutoFilterMode = False 
    End With 
End Sub 

Sub Correct(rng As Range, val1 As String, val2 As String, colToChangeIndex As Long) 
    With rng '<--| reference passed range 
     .AutoFilter Field:=1, Criteria1:=val1 '<--| filter referenced range on its 1st column with 'val1' 
     .AutoFilter Field:=2, Criteria1:=val2 '<--| filter referenced range on its 2nd column with 'val2' 
     If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filterd cells other than header 
      .Resize(.Rows.Count - 1, 1).Offset(1, colToChangeIndex - 1).SpecialCells(xlCellTypeVisible).Value = "COMPATIBLE" '<--| write "COMPATIBLE" in column "D" 
     End If 
    End With 
End Sub 
+0

私は"決定していない "と書いて欲しくない私はちょうど" COMPATIBLE "と書いてみたいと思います。コードが動いていません。実行しますが、何も表示されません。 –

+0

1) "互換性"はDに貼り付けられ、逆も同様です。 "_今、あなたは何か違うと言っています:明確にするための"前 "シナリオと"後 "シナリオの例を追加してください。彼らはあなたの実際のワークシートの名前と範囲に合っています:beforesaid "シナリオ"を追加すると助けになるでしょう – user3598756

+0

私は、Cが " Cが「NOT DETERMINED」であり、Dが「COMPATIBLE」である場合、thここでの例 - [link](https://ufile.io/ff72b) –

1

あなたは

Sub CvalueAndDvalue() 
    Dim cValue As Range, dValue As Range 

    Dim Report As Worksheet 
    Set Report = Excel.Worksheets("test") 

    For i = 2 To Report.Range("C" & Rows.Count).End(xlUp).Row 
     Set cValue = Report.Range("C" & i) 
     Set dValue = Report.Range("D" & i) 

     If (Trim(cValue) = "COMPATIBLE" And Trim(dValue) = "NOT DETERMINED") Then 
      dValue = cValue 
      ElseIf (Trim(dValue) = "COMPATIBLE" And Trim(cValue) = "NOT DETERMINED") Then 
      cValue = dValue 
     End If 
    Next i 
End Sub 
+0

修飾された範囲が追加されました – nightcrawler23

+0

範囲を指定する形式は何ですか?私は列1から100の両方の列をチェックインする必要があると言います –

+0

コードはC列の最後の行までの両方の列CとDをチェックします。何を意味するのか分かりません。範囲 " – nightcrawler23

関連する問題