我有一个看起来像这样的数据集:
Person A, Value 1, Value 2, Value 3, Value 4
Person B, Value 1, Value 2, Value 3, Value 4
现在,我想将这个数据集的整个行与整个标准集进行比较,以显示与我查看的单行相比,具有最匹配值的行。
例如。我有一个新条目PersonC。我希望能够(在分析选项卡中)显示与数据集中的那个人具有最共同值的其他人。
答案 0 :(得分:1)
您可以尝试:
Option Explicit
Sub test()
Dim LastRow As Long, i As Long, Total As Long, j As Long
Dim arr As Variant
With ThisWorkbook.Worksheets("Sheet1")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
arr = .Range("A2:E" & LastRow)
For i = LBound(arr) To UBound(arr)
For j = LBound(arr) To UBound(arr)
If arr(i, 1) <> arr(j, 1) Then
'Check Value 1
If arr(i, 2) = arr(j, 2) Then
Total = Total + 1
End If
'Check Value 2
If arr(i, 3) = arr(j, 3) Then
Total = Total + 1
End If
'Check Value 3
If arr(i, 4) = arr(j, 4) Then
Total = Total + 1
End If
'Check Value 4
If arr(i, 5) = arr(j, 5) Then
Total = Total + 1
End If
If .Range("G" & i + 1).Value = "" Then
.Range("G" & i + 1).Value = arr(j, 1)
.Range("H" & i + 1).Value = Total / 4
ElseIf Total / 4 > .Range("H" & i + 1).Value Then
.Range("G" & i + 1).Value = arr(j, 1)
.Range("H" & i + 1).Value = Total / 4
End If
Total = 0
End If
Next j
Next i
End With
End Sub
结果:
答案 1 :(得分:1)
我不知道您的数据是如何存储的,但是我制作了一个样本来模拟您所说的数据外观。我希望您能适应您的需求。
我做到了:
左数据集将是您的带有值的数据,右数据集将是您的分析。我用来得到的公式是:
=IF(J$1=$I2;"x";COUNTIF(INDIRECT("B" & MATCH(J$1;$A:$A;0) &":E"& MATCH(J$1;$A:$A;0));INDEX($B:$B;MATCH($I2;$A:$A;0)))+COUNTIF(INDIRECT("B" & MATCH(J$1;$A:$A;0) &":E"& MATCH(J$1;$A:$A;0));INDEX($C:$C;MATCH($I2;$A:$A;0)))+COUNTIF(INDIRECT("B" & MATCH(J$1;$A:$A;0) &":E"& MATCH(J$1;$A:$A;0));INDEX($D:$D;MATCH($I2;$A:$A;0)))+COUNTIF(INDIRECT("B" & MATCH(J$1;$A:$A;0) &":E"& MATCH(J$1;$A:$A;0));INDEX($E:$E;MATCH($I2;$A:$A;0))))
它可能看起来很复杂,但是比看起来容易。此公式由以下几部分组成:
INDEX($B:$B;MATCH($I2;$A:$A;0)))
将返回同一行但B列中人员的条件。INDIRECT("B" & MATCH(J$1;$A:$A;0) &":E"& MATCH(J$1;$A:$A;0));
将返回您与之匹配的人的左侧数据集中的值(标题数据)在右侧数据集中的值范围。COUNTIF(INDIRECT("B" & MATCH(J$1;$A:$A;0) &":E"& MATCH(J$1;$A:$A;0));INDEX($B:$B;MATCH($I2;$A:$A;0)))
。IF
仅用于显示X
。此方法的优点是,左数据集上的值不必在同一列中即可正确计数。如果您查看图像,即使值不按顺序排列,Person 1和PErson 2也可以完美匹配,因为公式始终在整个范围内计数。
如果您要下载并正确检查公式,我已经将示例上载到了Gdrive(可能是因为我的excel是西班牙语,所以我键入时出现翻译错误)。
https://drive.google.com/open?id=1kPAARG8yAkXok7HxYkYswDiCAT37mmEz
使用VBA,您可能会执行一个宏,该宏仅显示匹配度更高的人员的行号,但请确保您检查所有数据,因为可能一个人与2个或更多人员匹配,并且所有人都匹配获得最大值。通过这种设计,您会看到这是因为两个单元格都将变为绿色。
希望您可以使其适应您的需求。