如何在列中查找值并获取该行另一列的值并在Excel中格式化该行?

所以我的问题是,

我有4列(A,B,C,D),我需要找出列C中的值是否存在列A中,如果我需要查找列D中的值(在我的初始值的行)并检查它是否与列B中的值相同(在我find匹配的行上),然后对列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") 

但是我得到错误的结果或者我的公式出了问题。

根据我刚开始的例子, A是E,B是J,C是P,D是R. A是E,B是J,C是P,D是R.

你想要这样的东西吗?

 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 

示例数据

  | ABCD -------------- 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) 

find在我的情况下工作的公式(即使列有重复仍然给出正确的结果)

 =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不让我使用,来分隔参数和build议; 。 也许这是因为我的Windows的语言设置,所以如果你最终使用这个公式,请记住这一点。

这被标记为VBA,但你也提到了“其他工具”。

你也可以使用索引和匹配这样做(如果数据从第2行开始): –

 =INDEX($B$2:$B$7,MATCH($C2,$A$2:$A$7,0))=$D2 

然后把它放在条件格式化中 新规则| 使用公式

在这里输入图像说明

如果在列A中可能有重复的值,其中任何一个值都可能与列D中的原始值匹配,那么您将需要一个像这样的数组公式:

 =MATCH($D2,IF($A$2:$A$7=$C2,$B$2:$B$7),0) 

在这里输入图像说明