2017-01-13 2 views
0

"test"시트에 두 개의 열이 있습니다. C와 D를 가정 해 봅시다.두 열을 비교하고 vba를 사용하여 붙여 넣기 복사

C와 D의 각 행에는 "COMPATIBLE"또는 "NOT DETERMINED"또는 빈 셀이있을 수 있습니다.

C와 D를 비교하고 C에 "COMPATIBLE"이 있고 D에 "NOT DETERMINED"가있는 경우 "COMPATIBLE"을 D에 붙여야하며 그 반대의 경우도 마찬가지입니다.

나는 코드 아래에있는, 그러나 확실하지 그것을 수행하는 방법 : PROGRESS 코드에서 작업을 업데이트

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' 문을 닫아야합니다. 너 뭐 해봤 니? 그리고 두 번째'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

"결정하지 "쓰고 싶지 않아"호환성 "을 작성하고 코드가 작동하지 않습니다. 실행되지만 아무 결과도 표시되지 않습니다. –

+0

1) 질문에" "호환성"은 D에 붙여야하며 반대의 경우도 마찬가지입니다. "_ 이제는 뭔가 다른 것을 말합니다 : 명확한 2) 코드 작업을 주석별로 워크 시트와 범위에 적용하기 위해"이전 "및"이후 "시나리오 예제를 추가하십시오. 귀하의 실제 워크 시트 이름과 범위에 맞게 : beforesaid "시나리오"를 추가하면 도움이 될 것입니다 – user3598756

+0

혼란을 가져 미안합니다. "C"가 "COMPATIBLE"이고 D가 "NOT DETERMINED"이고, "COMPATIBLE"이 D C가 "NOT DETERMINED"이고 D가 "COMPATIBLE"이면, th en "COMPATIBLE"은 C에 붙여 넣어야합니다. 여기에 예제가 있습니다 - [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

관련 문제