筛选具有ALMOST匹配列的行

时间:2017-04-11 18:33:23

标签: excel excel-vba excel-formula vba

我有几列的行。我想取出 C列中列中的文字

的行。

这是一个示例表。我希望将此数据减少到,因此只有第2行和第4行保留。需要注意的是,街道号码和地址2列中的街道名称之间有一个额外的空格,因此完全匹配不会起作用。

Example Sheet

对我来说,如果它是一个过滤器,或者用公式填充另一张表格中的单元格并不重要,但我还不知道宏(还)。无论哪种方式,任何帮助表示赞赏!这是一组超过300k行和大约70列。

4 个答案:

答案 0 :(得分:2)

下面给出了非vba方法:

公式为=IF(B2=SUBSTITUTE(C2," "," "),"","Remove")

enter image description here

然后按检查排序,过滤检查Not = Remove并将过滤的单元格复制到新标签。

答案 1 :(得分:0)

所以我要做的是转换B和C列,以便每个字符串中没有空格,如此

One is mssql with 1.500.000.000 entries
One is mysql with    70.000.000 entries

然后你可以比较两者的直接匹配。我相信你可以从那里拿走它,但如果没有,一种方法是再次循环并删除两列不相等的任何实例

For i = 2 to Worksheets("Sheet1").UsedRange.Rows.Count
    Cells(i,2) = Replace(Cells(i,2), " ", "")
    Cells(i,3) = Replace(Cells(i,3), " ", "")
Next i

当然,这假设您只需要查看循环中访问过的行(或者没有匹配)。

答案 2 :(得分:0)

您还可以执行条件格式和颜色,然后对颜色进行过滤并删除所选的。

答案 3 :(得分:0)

您可以尝试这样的事情......

Sub KeepMatchingData()
Dim lr As Long, lc As Long

With Application
    .Calculation = xlCalculationManual
    .EnableEvents = False
    .ScreenUpdating = False
End With
lr = ActiveSheet.UsedRange.Rows.Count
lc = ActiveSheet.UsedRange.Columns.Count + 1
Range(Cells(2, lc), Cells(lr, lc)).Formula = "=IF(TRIM(B2)=TRIM(C2),ROW(),NA())"
On Error Resume Next
Range(Cells(1, 1), Cells(lr, lc)).RemoveDuplicates Columns:=lc, Header:=xlYes
Range(Cells(2, lc), Cells(lr, lc)).SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
Range(Cells(2, lc), Cells(lr, lc)).Clear
With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
End With
End Sub