所以我的问题是,
我有4列(A,B,C,D),我需要找出列C中是否存在C列中的值,如果是,我需要查找D列中的值(在我的初始值)值'行)并检查它是否与B列中的值相同(在我找到匹配的行上),然后对C列中的每个值执行此操作。
我从未在Visual Basic中编写代码,并且几乎没有Excel经验。我认为代码应该是这样的:(当然在VB中)
for(int i=0;i<numOfRecordsInC;i++){
for(int m=0;m<numOfRecordsInA;m++){
if(C[i]==A[m] && D[i]==B[m]){//ith,mth element of the columns
//Highlight mth row
//or just print "1" to any column on mth row if that's easier
}
}
}
如何在Excel中的VBA中编写类似的内容,还是可以使用Excel中的其他工具执行此操作?重复条件的条件格式化没有用,因为没有保证列不会在其内部具有重复值。
好的,经过一些研究,我得出了这样的公式:
=IF(COUNTIF(E$5:E$1605;P5);IF(VLOOKUP(P5;E$5:J$1605;2;0)=R5;"Matched";"Not Matched");"Not Found")
但我得错了结果或者我的公式有问题。
答案 0 :(得分:1)
你想要这样的东西吗?
Sub highlightCells()
With Worksheets("sheet1")
'calculate last row for colA & colB
lastRowLeft = WorksheetFunction.Max( _
.Cells(.Rows.Count, "A").End(xlUp).Row, _
.Cells(.Rows.Count, "B").End(xlUp).Row)
'calculate last row for colC & colD
lastRowRight = WorksheetFunction.Max( _
.Cells(.Rows.Count, "C").End(xlUp).Row, _
.Cells(.Rows.Count, "D").End(xlUp).Row)
'match
For i = 1 To lastRowRight
For m = 1 To lastRowLeft
If .Cells(i, "C").Value = .Cells(m, "A").Value _
And .Cells(i, "D").Value = .Cells(m, "B").Value Then
'do sth
Debug.Print "(m,i)=(" & m & "," & i & ")"
End If
Next
Next
End With
End Sub
示例数据
| A B C D
--------------
1| 1 A
2| 5 2 B
3| 2 B 3 C
4| 4 D
5| 5 E
6| 4 D
示例结果
(m,i)=(3,2)
(m,i)=(6,4)
答案 1 :(得分:1)
这被标记为VBA,但你也提到了“其他工具”。
你也可以使用索引和匹配这样做(如果数据从第2行开始): -
=INDEX($B$2:$B$7,MATCH($C2,$A$2:$A$7,0))=$D2
然后将其置于条件格式|中新规则|使用公式
如果A列中可能有重复值,其中任何一个都可以在B列和D列中的原始值之间匹配,那么您需要一个像这样的数组公式: -
=MATCH($D2,IF($A$2:$A$7=$C2,$B$2:$B$7),0)
答案 2 :(得分:1)
找到适用于我的情况的公式(即使列有重复项,仍能提供正确的结果)
=IF(COUNTIF(E$5:E$1605;P5);IF(COUNTIFS(E$5:E$1605;P5;J$5:J$1605;R5);"Matched";"Not Matched");"Not Found")
Excel不允许我使用,
分隔参数并建议;
。也许是因为我的Windows的语言设置,所以如果你最终使用这个公式,请记住这一点。