2017-12-30 46 views
0

나중에 여러 번 편집 :전체 워크 시트와 시트의 값 비교

여러 시트가있는 Excel 스프레드 시트가 4 ~ 8 개있는 경우 이전 보고서의 정보입니다. 그리고 모든 업데이트 된 값을 포함하는 시트 NIKE가 있습니다. 현재 항목과 새 항목이 NIKE의 행을 읽을 수있는 코드를 작성하고 4 ~ 8 번째 시트에 새로운 행이 있는지 확인합니다.

슬프게도 부분적으로 정상적으로 작동하는 코드가 있는데, 이는 코드가 읽고 필요한 일부 행을 복사 할 수 있음을 의미합니다.

Sub CompareNew() 
Dim cellName, cellCl As Range 
Dim uF, uFS As Long 
Dim sName, ClName As String 
Dim sDevice, sImported, sTracker As Worksheet 

Application.ScreenUpdating = False 

Set sImported = Sheets("NIKE-DOC-REP-DEVICE_SERVICETOCI") 
uF = sImported.Range("A" & Rows.Count).End(xlUp).Row 
Set sTracker = Sheets("Tracking Add-Delete") 'Hoja de tracking 
uFT = sTracker.Range("B" & Rows.Count).End(xlUp).Row 

For Each cellName In sImported.Range("A2:A" & uF) 
sName = cellName 
ClName = cellName.Offset(, 3) 

Set sDevice = Worksheets(sName) 
uFS = sDevice.Range("B" & Rows.Count).End(xlUp).Row 

Set cl = sDevice.Range("E5:E" & uFS).Find(ClName, , , lookat:=xlWhole) 
    If cl Is Nothing Then 
     sDevice.Cells(uFS + 1, 2) = sDevice.Cells(uFS, 2) + 1 
     sImported.Activate 
     sImported.Range(Cells(cellName.Row, 2), Cells(cellName.Row, 10)).Copy sDevice.Cells(uFS + 1, 3) 
     sTracker.Cells(uFT + 1, 2) = Format(Date, "[$-en-US]mmmm d, yyyy;@)") 'El codigo ya empieza a copiar informacion a la hoja de Tracking 
     sImported.Cells(cellName.Row, 4).Copy sTracker.Cells(uFT + 1, 3) 
     sImported.Cells(cellName.Row, 2).Copy sTracker.Cells(uFT + 1, 4) 
     sImported.Cells(cellName.Row, 3).Copy sTracker.Cells(uFT + 1, 5) 
     sTracker.Cells(uFT + 1, 6) = "Added" 
    Else 
    End If 
Next cellName 

Application.ScreenUpdating = True 

End Sub 

아래의 코드 (현재 행이 통합 문서의 나머지 부분으로 NIKE에서 추가되는 읽기 및 존재하지 않는 경우 나중에 내가 추적기 시트에 복사합니다, 추가합니다이 코드 추가 참조하시기 바랍니다 모든 각각의 시트가 아니라 D 것이다 .. 대향 코드는 아래

Sub CompareOld() 
Dim cellName, cellCl As Range 
Dim uF, uFS As Long 
Dim sName, ClName As String 
Dim sDevice, sImported, sTracker As Worksheet 

Application.ScreenUpdating = False 

wsName = Array("WAN Backbone-DC-RoutersSwitches", "Tools Servers", "Backbone Firewall", "Voice Messaging Managed Device", "NGWAN devices") 

For i = 0 To UBound(wsName) 
    Set sDevice = Worksheets(wsName(i)) 
    uFS = sDevice.Range("B" & Rows.Count).End(xlUp).Row 
    Set sImported = Sheets("NIKE-DOC-REP-DEVICE_SERVICETOCI") 
    uF = sImported.Range("A" & Rows.Count).End(xlUp).Row 
    Set sTracker = Sheets("Tracking Add-Delete") 
    uFT = sTracker.Range("B" & Rows.Count).End(xlUp).Row 

    For Each cellName In sDevice.Range("E5:E" & uFS) 
     ClName = cellName 

     Set cl = sImported.Range("E5:E" & uFS).Find(ClName, , , lookat:=xlWhole) 
     If cl Is Nothing Then 
      sTracker.Activate 
      sTracker.Cells(uFT + 1, 2) = Format(Date, "[$-en-US]mmmm d, yyyy;@)") 
      sDevice.Cells(cellName.Row, 5).Copy sTracker.Cells(uFT + 1, 3) 
      sDevice.Cells(cellName.Row, 3).Copy sTracker.Cells(uFT + 1, 4) 
      sDevice.Cells(cellName.Row, 4).Copy sTracker.Cells(uFT + 1, 5) 
      sTracker.Cells(uFT + 1, 6) = "Removed" 
      sDevice.Rows(cellName.Row).EntireRow.Delete 
     End If 
    Next cellName 
Next i 

Application.ScreenUpdating = True 

End Sub 

이것을)

를 추적기 시트 모두 copying'em 및 o 기존의 행을 비교하여 현재 행을 비교하고 그 중 하나라도 NIKE 시트에없는 경우 현재 시트에서 제거하고 추적 시트에 복사합니다. (거의 작동하지 않습니다 ... 전혀 모르겠어요!)

첨부 파일은 VBA Module2를 참조하십시오.이 파일에 문제가 있습니다. 어떤 팁을 사전에

파일 아래 https://drive.google.com/file/d/10rXA6fInX5g8zJucrnxsNHl-7vXBpIvz/view?usp=sharing

감사합니다! 그리고 ... 문제에 대해 항상 미안

대신
+0

일부 도움말은 CompareNew 및 CompareOld에 대한 답변을 제공합니다. 이제 트래커 업데이터를 수정해야 할 때입니다. – tanoMandanga

답변

1

:

Set lookIn = Sheets(strName).Range("E5:B" & Range("E" & Rows.Count).End(xlUp).Row) 

... 당신이 시도 할 수 ... x이의 수입니다

Set lookIn = Sheets(strName).Range*"E5:B" & !Sheets(strName).UsedRange.Rows.Count - x 

... 하단에서 건너 뛸 행. 그것이 유일한 문제라면 적어도 마지막 시트에 대해서는 좋은 생각 일 수 있습니다.

(당신이 전망이 좋은 그것을 조정할해야 할 수도 있습니다, 그래서 내가 당신의 데이터에 대해 아무것도 몰라 때문에 그 코드는 테스트되지 않은 것입니다.)

어떤 사람들은 UsedRange 루프에 좋은 방법은 통해 아니라는 것을 당신에게 말할 것이다 범위에 있어야합니다. 셀에 데이터를 넣은 다음 해당 셀에서 데이터를 지우면 "사용됨"으로 간주되기 때문입니다.

하지만 문제가 발생하지 않았으며 일부 대안보다 빠릅니다.

+0

팁을 주셔서 감사합니다.하지만 여전히 문제를 일으키는 올바른 시트를 선택하는 데 도움이됩니다. rawName 시트에는 다른 5 개의 시트에 저장되거나 저장 될 장치가 포함 된 2k 개의 행이 포함되어 있습니다. 코드를 실행할 때 rawName.range에 저장된 2k-ish 행을 표시 한 다음 각 strName 시트에 대해 각각 다른 시트에있는 800 또는 300 또는 20 행 대신 1048576 행을 표시합니다. 파일이 조금 더 깊이 들어가 있습니다. 도움을 다시 한번 감사드립니다! – tanoMandanga

+0

[link] https://drive.google.com/file/d/10rXA6fInX5g8zJucrnxsNHl-7vXBpIvz/view?usp=sharing [/ link] – tanoMandanga