VBA:如何对一列数字进行筛选

假设有三列 A B C,其实B列有重复项,删除的时候也要删除扩展列。最好能用什么函数,尽量用简单的代码

Dim i, j, k As Integer
k = 1 'k赋初值
i = InputBox("please input the item num:") '给出总行数信息
For j = 1 To i '循环判断
If Sheets("sheet1").Cells(j, 5).Text = 1 Then '如果第5列的值等于1
Sheets("sheet1").Select
Range(Cells(j, 1), Cells(j, 5)).Select '选中表1中前五列数据
Selection.Copy '复制
Sheets("Sheet2").Select '选中表2
Range(Cells(k, 1), Cells(k, 5)).Select '选中表2的前5列
ActiveSheet.Paste Link:=True '粘贴链接
k = k + 1 '表2行号增加
End If
Next
Application.CutCopyMode = False '退出复制粘贴模式 这句和下面的语句为辅助语句可删
Cells(1, 1).Select需输入总行数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-08

楼主请看看,是否能满足你的需求,加了批注,尽量做到代码的通用和简化。

Sub 筛选并删除重复值()
With Sheets("不符合规范小区占比")
    .UsedRange.AutoFilter Field:=2, Criteria1:=40737 
    'Field:=2 意味着在B列进行筛选;Criteria1:=2 是指定筛选对象为数值40737
    .Range(Cells(2, 1), Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).SpecialCells(xlCellTypeVisible).Delete '将筛选出的重复值删除
    .UsedRange.AutoFilter '解除筛选状态
End With
End Sub

第2个回答  2014-01-08
vba是vba,函数是函数。
请你上个截图,这样表述不清楚,不知道你想要什么结果。追问

是的,当有重复项时,删除重复项的那一行,而且删除所有重复项后,剩下的排列是连续的(就是说像B2.B3 B4,不要出现B2 B5 B7).
请上代码!

追答

整行删除,那么下面的行就自然整体上移,我不明白你说的连续不连续是什么意思。代码昨天已经写好。如下:

Sub deleteRow()
Dim LastRow As Long, RngA As Range
Dim i As Long
LastRow = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To LastRow
    '判断第B列有无重复数据
    If WorksheetFunction.CountIf(Range("B1:B" & i), Cells(i, 2).Value) > 1 Then
        If RngA Is Nothing Then
            Set RngA = Rows(i)
        Else
            Set RngA = Union(RngA, Rows(i))
        End If
    End If
Next i
If Not RngA Is Nothing Then
    RngA.Select
    If MsgBox("B列重复数据已全部选中,是否要删除?", vbYesNo) = vbYes Then
        RngA.Delete
    End If
    Set RngA = Nothing
End If
End Sub

本回答被提问者采纳
相似回答