【问题标题】:do not copy (ignore) when cell contains specific text当单元格包含特定文本时不要复制(忽略)
【发布时间】:2020-01-20 04:02:38
【问题描述】:

我有以下情况。我在 Sheet1 上有一个项目列表,我想将项目复制到 Sheet2 并排除特定项目。 假设我在 Sheet1 上有以下项目列表:

我想将“梨”单元格留在 Sheet2 上。 它应该完全离开梨(忽略)。

应该是这样的

我尝试了以下方法,但没有返回所需的结果。

=IF(Sheet1!B2="pear", "", "not pear")

我使用的公式仅替代(留空),如下所示:

有什么想法吗?谢谢

【问题讨论】:

  • 你最好使用 VBA。
  • 您是尝试以编程方式执行此操作,还是一次性操作? Formatting the data as a table, filtering out "pear",然后复制粘贴剩下的表会很快。
  • 要通过公式来做到这一点,可以通过数组公式来完成。表的大小和运行此方法的频率可以决定您是否应该走这条路。如果是一次,那么肯定是最好的范围内的快速过滤器以过滤掉梨,如果它需要自动化,那么 VBA 是您的最佳选择。正如@Luuklag 和Itsnotme 上面提到的
  • @Luuklag、Itsnotme 和 JvdV 这不是一次性操作。感谢您的指点,我想我需要深入研究 VBA 和/或数组公式
  • 可以留空格吗? =IF(Sheet1!B2="pear","",B2) 或者你需要那个没有空格的吗?

标签: excel vba excel-formula filtering


【解决方案1】:

只是为了让您了解我将如何尝试以代码方式解决此问题,您可以在下面使用AdvancedFilter 和以下示例数据查看我的建议:

使用以下数据准备第二张工作表:

以下代码将利用AdvancedFilter,这是处理大型数据集过滤的更快方法之一(还有其他技术,例如AutoFilter):

Sub Transfer()

'Dim your variables
Dim rng1 As Range, rng2 As Range
Dim lr1 As Long, lr2 As Long

'Set ranges to work with
lr1 = Blad1.Cells(Blad1.Rows.Count, "A").End(xlUp).Row '*1
lr2 = Blad2.Cells(4, "A").End(xlDown).Row
Set rng1 = Blad1.Range("A1:B" & lr1)
Set rng2 = Blad2.Range("A1:B2")

'Prepare CopyToRange range for new dataset
Blad2.Range("A4:B" & lr2).Clear '*2

'Filter data towards sheet2
rng1.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rng2, CopyToRange:=Blad2.Range("A4")

End Sub

*1在代码中我使用了工作表的实际CodeName,因为使用直接引用最好让代码指向正确的位置。您可以在项目资源管理器中找到这些名称(见下文),因此请在代码中相应地更改这些名称。

*2使用AdvancedFilter,我们可以决定将过滤后的范围复制到指定位置,在这种情况下,我选择将它放在我们的CriteriaRange下面,因此它是始终清楚表格是在什么条件下从 sheet1 的主要数据中提取出来的。

输出如下:

您现在可以更改CriteriaRange,例如<>apple 并重新运行代码。输出将是

【讨论】:

  • @Tom,这完全取决于您的数据大小。如果通过公式为您工作没有太多延迟,那就去吧。如果您觉得数组公式的数量过多会拖慢您的项目,那么请使用 vba。
【解决方案2】:

如果您不想使用 VBA,除非必要,您可以使用下面的 Excel 公式。

=IFERROR(INDEX($A$2:$A$10,SMALL(IF(NOT($A$2:$A$10="Pear"),ROW($A$2:$A$10)-ROW(INDEX($A$2:$A$10,1,1))+1),ROWS($C$1:$C1))),"")

结果如下图

如果您想排除任何其他单词,可以将公式中的静态“梨”替换为单元格值。

【讨论】:

  • Vikash Sing 谢谢,这很好用 :) 只是一个小问题;是否可以添加除“Pear”之外的更多参数。我正在尝试“猕猴桃”,但 excel 通知我在一个函数中有很多参数......
  • @ Vikash Singh 我尝试了类似 {"Pear","kiwi"} 的东西,但它不起作用
  • 对于像 {"Pear","Kiwi"} 这样的多个项目,因为等式将 A 列中的列表与一个项目(即 Pear)匹配,并在 Pear 所在的地方返回一组真假发现,截至目前excel不提供多个匹配数组。由于您的问题没有指定您想要多个我没有完成的项目,如果可以的话,会查看并更新。
  • 有人知道如何在 Vikash Singh 的解决方案中使用更多项目吗?
  • 您可以使用替代品($A$2:$A$10,"kiwi","pear")="pear"。完整的公式为=IFERROR(INDEX($A$2:$A$10,SMALL(IF(NOT(SUBSTITUTE($A$2:$A$10,"Kiwi","Pear")="Pear"),ROW($A$2:$A$10)-ROW(INDEX($A$2:$A$10,1,1))+1),ROWS($C$1:$C1))),"")
猜你喜欢
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多