2017-01-19 464 views
1

我有一個代碼可以從工作表「ANAF ANGAJATORI」中移除重複項,範圍爲「A2:F1000」。重複標準:第1欄(A)&第3欄(C)。 (它只刪除A:F,因爲在列G上我有數據必須保持不受影響)。刪除重複項並在VBA中保留格式

的問題是:

  1. 我想保留原來的格式去除重複之後。

  2. 此外,我不想指定給定的範圍爲A2:F1000,因爲數據輸入是可變的,一旦它可能是A2到F100和其他時間A2到F10000。它應該像A2:F一樣。我想我應該定義一個拉斯特羅和一個變量?

這是我的代碼:

Sub Duplicates() 
    ' 
    ' Duplicates Macro 
    Sheets("ANAF ANGAJATORI").Select 
    ActiveSheet.range("A2:F1000").RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes 
End Sub 

回答

0

SOLUTION:

它通過尋找在A列中的最後一行,然後確定解決問題的2號範圍A2:F & lastrow(A2起點至範圍F至拉斯特羅)。

關於問題編號1它實際上並沒有保留格式,但它從您選擇的單元格複製它已經格式化,並粘貼到指定的列上,導致整個表格(包括空格沒有格式化空格留下刪除重複)。 它以相同的結果結束:保持格式。

在以下示例中,A2000在表格中作爲無數小數和C2000的格式表示爲文本。

Dim Src As Worksheet 

' sets range from 
    Set Src = ThisWorkbook.Sheets("ANAF ANGAJATORI") 

    ' finds the last row with data in column A 
    lastRow = Src.range("A" & Src.Rows.Count).End(xlUp).Row 

    ' removes duplicates 
    Sheets("ANAF ANGAJATORI").range("A2:F" & lastRow).RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes 

    ' formats the cells again to previous state by copying formatting from a certain cell (in this exemple A20000 is my last cell in the sheet, it will never be filled with data inputed by user) 
    Sheets("ANAF ANGAJATORI").range("A20000").Copy 
    Sheets("ANAF ANGAJATORI").range("A3:B" & lastRow).PasteSpecial xlPasteFormats 
    Sheets("ANAF ANGAJATORI").range("A20000").Copy 
    Sheets("ANAF ANGAJATORI").range("E3:F" & lastRow).PasteSpecial xlPasteFormats 
    Sheets("ANAF ANGAJATORI").range("C20000").Copy 
    Sheets("ANAF ANGAJATORI").range("C3:D" & lastRow).PasteSpecial xlPasteFormats 
1

對於你第二個問題,你可以嘗試定義範圍。

Dim x as Range 
Set x = Worksheets("ANAF ANGAJATORI").Cells 
ActiveSheet.range(x).RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes 

UPDATE: 這個工作對我來說:

Dim row As Long 
row = ActiveSheet.Range("F" & ActiveSheet.Rows.Count).End(xlUp).Row 
ActiveSheet.Range("A2:F" & row).RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes 
+0

對不起,這行不通。所說的應用程序超出範圍.. – MisterA

+0

@MisterA:「不起作用」的迴應對於幫助你的人不是很有用,如果你給人的印象是你已經放棄了,他們會覺得他們已經浪費了他們的時間。如果您發現錯誤,最好的辦法是嘗試您提供的答案,並將您發現的任何新信息提供給答案者,然後他們可以提供更多線索。值得注意的是,答案是人們可以逐字輸入的很少的東西 - 你需要整合它們。 – halfer

+0

我沒有放棄,我在我的評論(第一評論)後1小時研究併發布了我發現的解決方案。 1和2個問題,讓其他有相同困難的人可以從中受益!我還不能將它標記爲答案(還剩23小時)。 – MisterA

1

我認爲這能解決問題。

爲它工作,你需要刪除重複後,一個名爲「ANAF ANGAJATORI模板」模板表包含您需要

它基本上副本從模板格式的格式添加數據表上已運行。

Sub duplicates() 

    Sheets("ANAF ANGAJATORI").Select 
    ActiveSheet.Range("A2:F1000").RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes 

    Sheets("ANAF ANGAJATORI Template").Columns("A:F").Copy 
    Sheets("ANAF ANGAJATORI").Select 
    Range("A1").Select 
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ 
     SkipBlanks:=False, Transpose:=False 
    Range("A1").Select 

End Sub 
+0

謝謝。我基本上做了同樣的事情,但只複製了我需要的格式的單元格到執行刪除重複項的範圍內。 – MisterA

+0

很高興爲您服務! –