2017-07-27 80 views
1

我有三個工作簿。比較兩個工作簿,刪除匹配的行

一個工作簿是我每個月添加到我需要從第二個工作簿中刪除的東西的列表。我每個月都會收到第二本工作簿。我收到的第二份工作簿總是包含多餘的條目(數量每個月都在增長),並且不會很快修復。沒有第二個工作簿無用的通用過濾器,所以我需要非常具體並且有一個愚蠢的清理清單。

我的第三個工作簿是我運行所有工作簿清理宏的地方。

目標是比較第一個工作簿A列或B列中的條目與我收到的第二個工作簿列A或B中的條目。如果任何條目匹配,請刪除第二個工作簿上的整個行。

我將每月進行一次數百行的操作,它將從一個宏指定給第三個工作簿中的一個形狀運行。

這裏我發佈了一些代碼,可以讓我打開我的兩個文件並複製其中一個文件的內容,但我需要的是將比較和刪除Workbook 2上與工作簿1匹配的行的代碼。我自己的代碼做到這一點是可怕的,不值得發佈。

代碼:

Sub test() 

    Dim strFileName As String 
    Dim wbTarget As Workbook 
    Dim wbSource As Workbook 
    Dim wsTarget As Worksheet 
    Dim wsSource As Worksheet 

    strFileName = Application.GetOpenFilename("Excel files (*.xls*),*.xl*", Title:="Open data") 

    Set wbSource = ThisWorkbook 
    Set wbTarget = Workbooks.Open(strFileName) 

    Set wsSource = wbSource.Worksheets("Sheet1") 
    Set wsTarget = wbTarget.Worksheets("Sheet1") 

    'to copy from Target - > Source 

    wsTarget.Range("B2").Resize(5, 5).Copy wsSource.Range("B2") 

    'etc. 

End Sub 

代碼,評論和建議,非常感謝! 乾杯, 克里斯托弗

代碼更新8:30 AM:這是一種新的方式,我正在考慮使事情工作。我的代碼行Set Rng = Range("A1:B10000" & LR)

Sub test() 

     Dim strFileName As String 
     Dim strFileName2 As String 
     Dim wbTarget As Workbook 
     Dim wbSource As Workbook 
     Dim wsTarget As Worksheet 
     Dim wsSource As Worksheet 
     Dim LR 
     Dim Rng As Range 

     strFileName = Application.GetOpenFilename("Excel files (*.xls*),*.xl*", Title:="Open 'Things Which Have Been Removed'") 


     strFileName2 = Application.GetOpenFilename("Excel files (*.xls*),*.xl*", Title:="Open This Month's Purge List") 

     Set wbSource = ThisWorkbook 
     Set wbTarget = Workbooks.Open(strFileName) 

     Set wsSource = wbSource.Worksheets("Sheet1") 
     Set wsTarget = wbTarget.Worksheets("Sheet1") 

    Set LR = wsSource.UsedRange.Rows 

      With wbTarget.Sheets(1) 
      Set Rng = Range("A1:B10000" & LR) 
      Rng.RemoveDuplicates Columns:=Array(4), Header:=xlNo 
     End With 

    End Sub 
+0

任何使用MS Access的經驗?您可以創建一個指向這兩個電子表格的鏈接,並將其作爲表格拉入。然後,你需要的是一個SQL DELETE查詢,它表示DELETE FROM TABLE 2 WHERE EXISTS IN TABLE 1)。這是簡化的,不會運行,但是非常接近。然後你可以導出表格2.如果你打算做很多這類事情,我建議你查看一下。 – bushell

+0

不幸的是,我的公司從來不會使用訪問權限。效率太高。它會解決很多問題,但好主意! – chrisleepotter

回答

-1

您可以使用find方法得到一個類型不匹配錯誤;打開工作簿後你可以使用此代碼,findind單元格地址你可以很容易地刪除它清除命令

Dim GCell As Range 

Set GCell = ActiveSheet.Cells.Find("yourvariable") 
+0

這也可以,但是避免使用ActiveSheet是我遵循的一個很好的規則。如果某些代碼出錯或選擇了其他工作表,它可避免工作表之間的混淆。我正在嘗試創建一個很難解決的工作簿。此外,在這種情況下,我認爲我超出了我的知識範圍。我知道我可以用這種方法找到一個特定的單詞,但我不知道我的Workbook1上的所有零件編號條目。 – chrisleepotter

0

要回答你的具體問題。

Set Rng = Range("A1:B10000" & LR) 

應該

Set Rng = Range("A1:B" & LR) 

我想幫助你的其他問題,但你的描述是混亂的,這就是我理解的;您在第二個工作簿中標識錯誤信息並將該信息從第二個工作簿複製到第一個工作簿,然後您需要一個宏將第一個工作簿中的內容與第二個工作簿相匹配,並刪除第二個工作簿中匹配的行。問題,爲什麼不刪除第二個工作簿中的行而不是將它們複製到第一個工作簿?

+0

嘿,謝謝一堆,我打算將這個應用到我的代碼! 對不起,我想澄清一下。僅僅提供信息很難,尤其是在沒有上下文的情況下。所以,我只有一個宏的Excel表格。我有一張Excel表格,其中包含我過去幾個月收集的所有「不良數據」零件編號。我還有另外一張單獨的表格,每個月我都會收到這些表格,可能會或可能不會收集我收集的一些「不良數據」。我只是想確保每當我收到這個新的工作簿時,只需按下一個按鈕就可以消除我不想要的所有數據。泰! – chrisleepotter

相關問題