Select 所有单元格彼此相等的所有行

Select all rows where all cells equal one another

我有一个很大的 table,它只显示一种类型的信息:特定研究地点是否存在某种植物。我在第一列中列出了 500 多个物种,并在列名称中列出了 30 个站点。 table 填充了简单的 "Y" 或 "N" 以显示存在。示例:

Scientific Name         Old Wives Beach    Dadi      Orote N Airstrip
Abelmoschus moschatus   N                  N         N
Abrus precatorius       Y                  N         Y
Abutilon indicum        N                  N         N

然而,物种列表包含一些在任何地点都没有出现的物种,呈现一整行 "N"s,如上例中的第 1 行和第 3 行。我需要删除这些行以使 table 更易于管理。

有没有什么方法可以不用很长的 IF AND 语句来实现?

受 pnuts 评论的启发,在新的专栏中,使用 a COUNTIF() 公式。例如,=COUNTIF(B2:AE2,"Y"),假设 row/column headers 在第 1 行和 A 列中,并且数据在 B2:AE501+.

范围内

如果您然后 select 整个范围,包括 headers 和新的公式列并添加过滤器,那么您可以 select 只有 Y 的计数是0. 一旦只显示 0,就可以 select 整行并删除它们(使用 Right-Click,删除)而不影响 non-zero 行。

此时,如果您不再需要计数列,您可以关闭过滤器并删除该列,但如果您发现计数出于其他原因派上用场,我也不会感到惊讶。

或者,您可以只使用过滤器隐藏 0 行而不是删除它们,这样就不会完全删除数据,但它不再妨碍您。

下面的代码是执行此操作的一种方法,假设数据中没有间隙。动画 gif 逐步演示其工作原理。理解后,您应该删除 .select 语句。

Sub deleteIfAllN()
Dim plantR As Range, cell As Range, allN As Boolean
Set plantR = Range("A2")
While plantR <> ""
  plantR.Select
  Set r = plantR.Offset(0, 1)
  allN = True
  Do
    r.Select
    If r <> "N" Then
      allN = False
      Exit Do
    End If
    Set r = r.Offset(0, 1)
  Loop Until r = ""
    Set plantR = plantR.Offset(1, 0)
    Rows(plantR.row - 1).Select
    If allN Then Rows(plantR.row - 1).Delete
Wend
End Sub

您可以使用 Advanced Filter

如下设置您的数据和标准区域

对于您发布的示例,公式为:

=COUNTIF($B8:$D8,"N")<>3

对于30列,只需修改范围和计数即可。

之前

之后

我选择原地过滤

请注意,Copy to another location 还有一个选项可以将过滤器的结果放在另一个位置。