2015-11-20 93 views
-1

方面有一個片scr其中柱P具有以下觀點:刪除重複的值,只留下那些更高的行

P1=100 
P2=100 
P3=100 
P4=100 
P4=101 
P5=101 
P6=102 
P7=102 
P8=102 

,這意味着有唯一值的塊。我只需要保留上限值(這裏是 - P1,P4P6)。其他重複值應該被刪除。因此,我編寫了下面的代碼,但它不起作用,並且沒有提供任何錯誤。

Sub Test() 

Dim wb1 As Workbook             
Set wb1 = ActiveWorkbook            
Set src = wb1.Sheets("Modules_List")         

Application.ScreenUpdating = False         
Application.Calculation = xlCalculationManual 
Dim i As Long 
Dim k As Integer 
With src 
    For i = 1 To 100 
     For k = 1 To 100 
      If .Cells(i, "P").Value = .Cells(i + k, "P").Value Then .Cells(i + k, "P").Value = "" 
     Next k 
    Next i 
End With 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 


End Sub 
+1

爲什麼你就不能刪除通過工具欄複製? – findwindow

+1

@findwindow他希望單元格沒有被刪除,這是一個來自[這裏]的問題(http://stackoverflow.com/questions/33832170/copy-matched-row-and-rows-below-it-if-if- column-a-is-empty?noredirect = 1#comment55439156_33832170) –

+0

@findwindow此代碼是一個更大的動作[here]的一部分(http://stackoverflow.com/questions/33832170/copy-matched-row-and-rows -below-IT-如果列-A-是空)。爲了減小尺寸,我首先測試它作爲一個單獨的小組。我自己添加了重複項,正如在鏈接下的線程中所建議的那樣,但現在我需要刪除它們。自動,作爲一個行動的一部分。我嘗試實現這種方法,而不是將其複製到數組,因爲我認爲我將能夠將它應用到目標文件夾(請參見鏈接) – Meursau1t

回答

0

這是您最後三個問題的完整代碼。

Sub Copy_Data_by_Criteria() 

    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    Dim src As Worksheet 
    Dim Dst As Worksheet 
    Dim src2 As Worksheet 


    Set wb1 = ActiveWorkbook 
    Set wb2 = Workbooks.Open(Filename:="C:\Test.xlsx") 
    Set src = wb1.Sheets("Sheet1") 
    Set Dst = wb2.Sheets("Sheet1") 
    Set src2 = wb1.Sheets("Base 1") 

    Dim LastRow As Long 
    Dim r As Range 
    Dim CopyRange As Range 
    Dim Crit As Range 
    Dim strValue As Variant 
    LastRow = src.Cells(src.Rows.Count, "P").End(x1Up).Row 

    For Each Crit In src2.Range("G10:G" & 30) 
     If Crit <> "" Then 
      For Each r In src.Range("P6:P" & LastRow) 

       If r <> 0 Then strValue = r 

       If strValue = Crit Then 
        If CopyRange Is Nothing Then 
          Set CopyRange = r.EntireRow 
        Else 
          Set CopyRange = Union(CopyRange, r.EntireRow) 
        End If 
       End If 
      Next r 
     End If 
    Next Crit 
    If Not CopyRange Is Nothing Then 
    CopyRange.Copy Dst.Range("A1") 
    End If 

End Sub 

至於爲什麼你當前的代碼沒有做你想要什麼,你既然循環下添加您需要循環的值高達其刪除:

Sub Test() 

Dim wb1 As Workbook 
Set wb1 = ActiveWorkbook 
Set src = wb1.Sheets("Modules_List") 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
Dim i As Long 
Dim k As Integer 
With src 
    For i = 100 To 1 
     If .Cells(i, "P").Value = .Cells(i - 1, "P").Value Then .Cells(i, "P").Value = "" 
    Next i 
End With 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 


End Sub 
+0

@ Meursau1t我編輯了第一個代碼來擺脫循環來填補空白。 –

+0

@ Meursau1t我重新編輯了它,以便根本不需要更改源表單。因此不需要改變任何事情。 –

+0

謝謝你的回答。直到我將LastRow中的每個r在src.Range(「P6:P」&LastRow)中改爲某個常量,它才起作用。但無論如何,這是一個完美的解決方案。現在我必須花一天時間來了解它的功能。再次感謝您的一個偉大的教訓。希望有一天我能在這裏回報它) – Meursau1t