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

时间:2015-10-17 07:07:40

标签: excel vba excel-vba

所以我的问题是,

我有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")

但我得错了结果或者我的公式有问题。

根据我在开头给出的例子; A是E,B是J,C是P,D是R. A is E, B is J, C is P, D is R

3 个答案:

答案 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

然后将其置于条件格式|中新规则|使用公式

enter image description here

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

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

enter image description here

答案 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的语言设置,所以如果你最终使用这个公式,请记住这一点。