2016-07-25 23 views
0

我已經創建了一個簡單的宏來過濾數據並將其複製並添加到最後一行之後的特定工作表[ISRisks]中。然而我意識到,我不知道如何檢查數據是否已存在於[ISRisks]工作表中!請有人幫忙 - [ISRisks]中的列a包含唯一的RISKID字段進行檢查。 這是我到目前爲止有:僅當數據不存在時才使用宏將數據複製到新工作表

Sub ISRISKCOPY() 
     ' 
     Dim lMaxRows As Long 
     Dim ws As Worksheet 
     Dim rng As Range 
     Dim LR As Long 
     Dim rTable As Range 

    For Each ws In ActiveWorkbook.Worksheets 
       If (ws.Name <> "ISRisks") And (ws.Name <> "Closed Risks") And (ws.Name <> "Risk Grading Matrix ") And (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") Then 
      Application.DisplayAlerts = False 

      With ws 

      If .FilterMode Then .AutoFilterMode = False 
      Sheets(ws.Name).Range("$A$2:$W$2").AutoFilter Field:=5, Criteria1:=Array("IS", "IS - Information Security"), Operator:=xlFilterValues 
      Set rTable = Sheets(ws.Name).AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible) 
      rTable.Copy 
      lMaxRows = Sheets("ISRisks").Cells(Rows.Count, "a").End(xlUp).Row 

      Range("a" & lMaxRows + 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

      End With 

      Else 
       End If 

      Next ws 

      'sorting unique id column 
      Sheets("ISRisks").Range("A1").Select 
      ActiveWorkbook.Worksheets("ISRisks").Sort.SortFields.Clear 
      ActiveWorkbook.Worksheets("ISRisks").Sort.SortFields.Add Key:=Range("A1"), _ 
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
      With ActiveWorkbook.Worksheets("ISRisks").Sort 
      .SetRange Range("A2:A10000") 
      .Header = xlNo 

.MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

Application.DisplayAlerts = True 
    End Sub 
+0

你想檢查是否有*有*的數據,或特定的數據?另外,我***高度***建議閱讀和申請,[如何避免使用'.Select' /'.Activate'](https://stackoverflow.com/questions/10714251/how-to-avoid -using-select-in-excel-vba-macros) – BruceWayne

+0

嗨@BruceWayne - 謝謝我對VBA並不熟悉,但會考慮到這一點。非常感謝 – AJCT

+0

您可以替換範圍(「A3」)。選擇 範圍(選擇,選擇。結束(xlToRight))。選擇 範圍(選擇,Selection.End(xlDown))。選擇 Selection.Copy' with this (範圍(「A3」)。結束(xlDown)。行,範圍(「A3」)。結束(xlToRight).Column))。複製' – tjb1

回答

0

您可以使用此代碼搜索範圍,確定該值是存在的。

With Sheets("Sheet1").Range("A:A") 
    Set Rng = .Find(What:=FindString, _ 
        After:=.Cells(.Cells.Count), _ 
        LookIn:=xlValues, _ 
        LookAt:=xlWhole, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlNext, _ 
        MatchCase:=False) 
    If Not Rng Is Nothing Then 
     'Do This If Found 
    Else 
     'Do This If Not Found 
    End If 
End With 

你需要設置你想用牀單,你想搜索,並用正在檢查的變量替換FindString的範圍內。 if語句中的部分是您可以根據查找或未找到(如果未找到粘貼)執行操作的位置。如果發現不需要執行操作,那麼也可以重新縮短它。

上面的例子中發現here.

+0

謝謝@ tjb1 - 我將在我的最終代碼發佈後發佈 - 我非常感謝您的幫助。 – AJCT

相關問題