【问题标题】:Delete rows in Excel if it doesn't match如果不匹配,则删除 Excel 中的行
【发布时间】:2015-02-09 20:32:11
【问题描述】:

不知道怎么做,我有一个 Excel 表格,可以导入 2 封电子邮件 - 但有时它只导入 1 封电子邮件,所以我希望删除这些行 -

1@email1
1@email1
2@email2
2@email2
3@email3 - 需要删除,因为它只有 1 个条目
4@email4
4@email4


它是从 CSV 导入的 - 如果它不匹配,我需要它删除该行,因为应该导入 2 个相同的电子邮件地址 - 所以

if A2=A1 it's good  
if A2 doesn't = A1 Delete row A1  
if A4=A3 it's good  
if A4 doesn't = A3 Delete row A3  
if A6=A5 it's good  
if A6 doesn't = A5 Delete row A5  

【问题讨论】:

  • 这太模糊了。您是要修改导入过程以使其不导入单个电子邮件,还是要创建将清除单个电子邮件的导入后功能?如果是前者,请发布您的代码。
  • 使用 COUNTIF() 添加一列,统计实例数,然后排序删除带 1 的行
  • 在 Linux 上,使用sort file.txt | uniq -d 打印出重复项是单行的
  • 所以我猜如果a2不=a1删除a1,如果a4不=a3删除a3,a6不=a5删除a5....

标签: vba excel


【解决方案1】:

如果我理解这个问题,在 VBA 中非常简单。您只是想删除后面没有相同电子邮件地址的行,对吗?

a = 1
Do
  b = a + 1
  If Cells(a, 1).Value <> Cells(b, 1).Value Then
    Rows(a).Delete
  Else
    a = a + 2
  End If
Loop Until a > Sheets(1).Rows.Count

我承认这不是最优雅、最通用的解决方案,但快速简单。

【讨论】:

  • 我试图投票 2 个答案,我猜我是在这样做的时候,因为我首先投票给你的,所以当我去投票另一个答案时它没有投票 - 所以吸取了教训......我只能投票1 :) 谢谢!
【解决方案2】:

是的,您可以使用Apache POI-HSSF 之类的方式以编程方式从 Excel 中的单元格中删除这些值,它允许您使用 Java 读取和修改 Excel 工作表。看看 Usermodel API 听起来像你在找什么。

你也可以看看JExcel Here

【讨论】:

    【解决方案3】:

    假设数据是 A 列

    Sub Deletes()
    Dim lastrow As Integer
    lastrow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    Range("a1").Select
    For i = 1 To lastrow
    If ActiveCell.Offset(1, 0).Value <> ActiveCell.Value Then
    ActiveCell.EntireRow.Delete    
    End If
    ActiveCell.Offset(2, 0).Select
    Next
    End Sub
    

    经过测试,工作正常。

    【讨论】:

    • 很高兴它完美运行。你为什么不投票呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2022-10-15
    • 1970-01-01
    相关资源
    最近更新 更多