![Excel-如何从多行(>2)中查找常见文本值?](https://linux22.com/image/1496884/Excel-%E5%A6%82%E4%BD%95%E4%BB%8E%E5%A4%9A%E8%A1%8C%EF%BC%88%3E2%EF%BC%89%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%B8%B8%E8%A7%81%E6%96%87%E6%9C%AC%E5%80%BC%EF%BC%9F.png)
这本质上是此处提出的问题的变体: Excel-如何从多个(>2)列中查找常见文本值?
但是,在这种情况下,我需要搜索多行数据,而不是多列数据。因此,每行可能有最多 17 列非重复数据,我想在行之间找到一个或多个匹配项。以下是数据可能的样子的一个小示例(它是从多个来源收集的站点可能坐标的列表,目的是精确定位一个唯一的位置):
源 坐标1 坐标2 坐标3 坐标4 坐标5 坐标6 源1 (4,0) (5,0) 来源2 (3,0) (4,0) (5,0) (3,1) (4,1) (5,1) 来源3 (4,0) (5,1) (5,0) 来源4 (3,0) (4,0) (5,0) (3,1) (3,2) 来源5 (2,3) (3,2) (4,1) (4,2) (5,0)
在引用的帖子中,用户 XOR-LX 提供了一种非常有用的列式比较方法。事实上,如果我转置上述数据,他的方法可以正常工作,返回 (5,0) 作为第一个输出单元格中的唯一位置,但我无法修改它以用于行式,因为我的数据是按行排列的。到目前为止,我尝试以以下方式修改它,但没有成功:
- 范围1 =
$B$2:$G$6
- 阿里1=
ROW(Range1)-MIN(ROW(Range1))
- 阿里2 =
COLUMN(INDEX(Range1,1,))-MIN(COLUMN(INDEX(Range1,1,)))+1
- 阿里3=
MMULT(0+COUNTIF(OFFSET(INDEX(Range1,1,),Arry1,,,),INDEX(Range1,1,))>0),COLUMN(INDIRECT(ROWS(Range1)&":1"))^0)
最终输入为:
=IFERROR(INDEX(INDEX(Range1,1,),SMALL(IF(FREQUENCY(IF(INDEX(Range1,1,)<>"",IF(Arry3=ROWS(Range1),MATCH(INDEX(Range1,1,),INDEX(Range1,1,),0))),Arry2),Arry2),COLUMNS(A:$A))),"")
使用上述修改,我根本没有得到任何输出(也没有错误消息),只有一个空白单元格。我本质上只是试图通过将 ROW 换成 COLUMN 等来“反转”他的方法,但我怀疑解决方案可能稍微复杂一些,尤其是考虑到我对 excel 矩阵函数的弱点。
任何帮助是极大的赞赏。
答案1
您可以在工作表模块中尝试此代码,它不是很强大,可能会重复颜色,但它可能会完成工作。如果不行,请在此处回复。只需更改范围组件(当前为 B1 到 G100)即可。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range, c As Range
Dim MyCI As Long
If Intersect(Target, Range("$B$1:$G$100")) Is Nothing Then Exit Sub
For Each cell In Range("$B$1:$G$100")
cell.Interior.ColorIndex = 0
Next cell
For Each cell In Range("$B$1:$G$100")
If WorksheetFunction.CountIf(Range("$B$1:$G$100"), cell.Value) > 1 Then
If cell.Interior.ColorIndex = -4142 Then
MyCI = Int((56 - 1 + 1) * Rnd + 1)
For Each c In Range("$B$1:$G$100")
If c.Value = cell.Value Then c.Interior.ColorIndex = MyCI
Next c
End If
End If
Next cell
End Sub