2014-11-03 118 views
0

我有以下腳本,在Google文檔 - >工作表中運行良好。它不適用於很多行。我猜測,因爲數組越來越大,跟蹤值。根據列中單元格的值刪除重複的行

我需要一個腳本,我可以在MS EXCEL中運行,它將刪除在列中具有重複值的行。 (除非該列「」)

谷歌文檔的腳本,對小文件的工作原理:

function removeDuplicates() 
{ 
    var s = SpreadsheetApp.getActiveSheet(); 
    var c = Browser.inputBox("Please", "Type in the column name (e.g.: A, B, etc.)", Browser.Buttons.OK_CANCEL); 
    var r, v; 
    var aValues = []; 
    try 
    { 
    if(c != "cancel") 
    { 
     r = 2; // first row is row two 
     while (r <= s.getLastRow()) 
     { 
     v = s.getRange(c + r).getValue(); 
     if(v != "") 
     { 
      if(aValues.indexOf(v) == -1) 
      { 
      aValues.push(v); 
      } 
      else 
      { 
      s.deleteRow(r); 
      continue; 
      } 
     } 
     r++; 
     } 
     Browser.msgBox("Duplicates removed!"); 
    } 
    } catch (e) {Browser.msgBox("Error Alert:", e.message, Browser.Buttons.OK);} 
} 

任何幫助,將不勝感激。

+0

您是否嘗試了功能區命令的「數據」►「數據工具」►「刪除重複項」或者是否有早期版本的Excel?這是否是更大的VBA例程的一部分? – Jeeped 2014-11-03 21:17:31

+0

似乎刪除重複刪除重複的空白行也(我需要保留)。這只是一個簡單的例程,我需要能夠在多張紙上運行 – 2014-11-03 21:22:39

+0

你當然是對的。我混淆了兩個沒有互相回覆的工作表操作。 (非空白的AutoFilter,然後Remove Duplicates不會在可見細胞上重複數據刪除) – Jeeped 2014-11-03 21:32:05

回答

1

這似乎符合法案。

Sub dedupe_ignore_blanks() 
    Dim r As Long, v As Long, vVALs As Variant, sCOL As String 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    Application.Calculation = xlCalculationManual 
    With ActiveSheet.Cells(1, 1).CurrentRegion 
     sCOL = "B" 
     sCOL = Application.InputBox("Type in the column name (e.g.: A, B, etc.)", _ 
      "Please", sCOL, 250, 75, "", , 2) 
     If CBool(Len(sCOL)) And sCOL <> "False" Then 
      For r = .Rows.Count To 2 Step -1 
       If Application.CountIf(.Columns(sCOL), .Cells(r, sCOL).Value) > 1 Then _ 
        .Rows(r).EntireRow.Delete 
      Next r 
     End If 
    End With 
FallThrough: 
    Application.Calculation = xlCalculationAutomatic 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 
End Sub 

我從你的代碼片斷收集,你有數據行1 Application.CountIF在標題行不計算空白單元格。

+0

魔法!花了一段時間運行,但它完成了工作 – 2014-11-04 17:47:28

+0

@ChrisMuench - 感謝您的跟進。如果這是一個重複的任務,並且希望提高效率,那麼在操作開始時將* screenupdating *和* enableevents *關閉並將* calculate *設置爲手動並在最後恢復它們將顯着改善運行時。以上改進。 – Jeeped 2014-11-04 18:12:06

+0

這不是我經常做的事情。 100000行電子表格可能需要20-30分鐘,這是非常可以接受的 – 2014-11-04 19:55:59