0
A
回答
0
存储第一个实例的单元格供以后删除。 然后去删除重复,直到结束。
Dim F as integer, S as integer 'indices for First and Second cells to be compared
Dim Deleted as boolean 'indicates if second line was deleted
Dim First as Range, Second as Range 'First and second cells to be compared
Dim Start as string 'Indicates the position of the first cell's start
Start = "A1" 'can be as you like
Set First = Sheet1.Range(Start) 'Sets the start cell
F = 0 '
Do While First.Value <> "" 'loop while sheet contains data in the column
S = F + 1 'second cell is at least 1 cell below first cell
Deleted = false 'no second cell was deleted yet
Set Second = First.Offset(S,0) 'second cell is an offset of the first cell
Do While Second.Value <> "" 'loop while second cell is in sheet's range with data
if Second.Value = First.Value then 'if values are duplicade
Second.EntreRow.Delete 'delete second cell
Deleted = true 'stores deleted information
else 'if not, second cell index goes next
S = S + 1;
end if
Set Second = First.Offset(S, 0) 'sets second cell again (if deleted, same position, if not deleted, next position
Loop
if Deleted then 'if deleted, should delete first cell as well
First.EntireRow.Delete
else
F = F + 1 'if no duplicates found, first cell goes next
end if
Set First = Sheet1.Range(Start).Offset(F,0) 'sets first cell again (if deleted, same position, if not, next)
Loop
1
短一点的解决方案,以便快速上午的训练做:
Sub quicker_Option()
Dim toDel(), i As Long
Dim RNG As Range, Cell As Long
Set RNG = Range("a1:a19") 'set your range here
For Cell = 1 To RNG.Cells.Count
If Application.CountIf(RNG, RNG(Cell)) > 1 Then
ReDim Preserve toDel(i)
toDel(i) = RNG(Cell).Address
i = i + 1
End If
Next
For i = UBound(toDel) To LBound(toDel) Step -1
Range(toDel(i)).EntireRow.Delete
Next i
End Sub
+0
非常有趣!我从来没有想过使用数组来存储单元地址。 (+1)的想法。 –
0
我使用此代码创建总帐控制帐户的自动对账,如果用同等价值符号相反的任何小区是指切成片2;因此只留下对账项目。
的代码:
sub autoRecs()
dim i as long
Application.ScreenUpdating = False
Application.StatusBar = True
Dim i As Long
Cells(5, 6).Select
Dim x As Long
Dim y As Long
x = ActiveCell.Row
y = x + 1
Do Until Cells(x, 6) = 0
Do Until Cells(y, 6) = 0
Application.StatusBar = "Hey Relax! You can rely on me......"
If Cells(x, 6) = Cells(y, 6) * -1 Then
Cells(x, 6).EntireRow.Cut (Worksheets(2).Cells(x, 6).EntireRow)
Cells(y, 6).EntireRow.Cut (Worksheets(2).Cells(y, 6).EntireRow)
Cells(x, 6).Value = "=today()"
Cells(y, 6).Value = "=today()"
Else
y = y + 1
End If
Loop
x = x + 1
y = x + 1
Loop
Application.StatusBar = False
End Sub
Sub deleteBlankCells()`this is to delete unnecessary cells after run the above macro`
Range(Cells(5, 1), Cells(Rows.Count, 1).End(xlUp)).Select
For i = Selection.Rows.Count To 1 Step -1
Application.StatusBar = "OOH! I'm cleaning all the blanks for you....."
If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then
Selection.Rows(i).EntireRow.Delete
End If
Next i
Application.StatusBar = False
End Sub
0
我喜欢内VBA阵列的工作,所以这里是一个例子。
- 假设该数据表示围绕A1的currentregion,但是,很容易改变
- 读取源数据到一个数组
- 检查在一列中的每个项目,以确保它是唯一的(即项目的COUNTIF = 1)
- 如果唯一,请将相应的行号添加到集合中
- 使用集合的大小和列数来调暗结果数组。
- 循环访问集合,将相应的行写入结果数组。
- 将结果数组写入工作表。
正如所写,结果放置在源数据的右侧,但也可以替换它,或放置在不同的工作表上。
Option Explicit
Sub RemoveDuplicatedRows()
Dim vSrc As Variant, vRes() As Variant
Dim rSrc As Range, rRes As Range
Dim colUniqueRows As Collection
Dim I As Long, J As Long
'assume data starts in A1 and represented by currentregion
Set rSrc = Range("a1").CurrentRegion
vSrc = rSrc
Set rRes = rSrc.Offset(0, UBound(vSrc, 2) + 2)
'get collection of non-duplicated rows
Set colUniqueRows = New Collection
For I = 1 To UBound(vSrc)
If WorksheetFunction.CountIf(rSrc.Columns(1), vSrc(I, 1)) = 1 Then _
colUniqueRows.Add I
Next I
'Make up results array
ReDim vRes(1 To colUniqueRows.Count, 1 To UBound(vSrc, 2))
For I = 1 To UBound(vRes, 1)
For J = 1 To UBound(vSrc, 2)
vRes(I, J) = vSrc(colUniqueRows(I), J)
Next J
Next I
rRes.EntireColumn.Clear
rRes.Resize(UBound(vRes)) = vRes
End Sub
相关问题
- 1. VBA Excel删除重复行
- 2. Excel VBA如何根据C列删除所有重复的行
- 3. 删除重复行(不要删除所有重复)
- 4. vba删除该行中所有使用的行和复选框?
- 5. 删除mysql中除重复行之外的所有行
- 6. 删除所有重复行记事本++
- 7. 删除所有重复值
- 8. 删除给定行的值重复VBA
- 9. 总和重复的行,然后删除所有重复
- 10. 删除行重复数据VBA
- 11. 删除重复项excel vba
- 12. vba删除新集中的重复项
- 13. 复杂的VBA删除多个页面的重复,然后删除空白行循环所有表
- 14. 删除重复的值的行的所有副本中的R
- 15. CSV删除与重复的值的所有行中的一列
- 16. 有效删除所有重复记录
- 17. PowerShell - 删除所有重复的条目
- 18. 删除MySQL中的所有重复的行5.7.9
- 19. VBA删除没有列值的重复行
- 20. SQLite如何删除除一个之外的所有重复行?
- 21. 使用C删除文件中的所有重复行C
- 22. 从一个重复的数据表中删除所有行
- 23. 删除MySQL中所有某些重复条目的第一行
- 24. 如何在所有字段重复时删除db2中的重复行?
- 25. 如何删除所有没有主键的重复行?
- 26. 删除所有非重复数组php
- 27. 删除所有非重复项(球拍)
- 28. Prolog删除所有重复函数
- 29. 删除所有重复列表成员
- 30. 删除重复行
梦幻般的消息。你尝试了什么? – ApplePie
试试我的[重复主外接](http://sdrv.ms/18pQI6C)。如果需要,可以跨页进行作业,处理区分大小写,空白区域和正则表达式匹配。 – brettdj
看到这个答案:http://stackoverflow.com/a/37358305/6201755 – ib11