识别列

时间:2016-07-29 21:08:07

标签: excel

我有一个电子表格,其中包含许多列,我希望识别所有列中常见的所有行。无论是通过突出显示还是创建另一个列,我都没有偏好。同样,公式或宏也同样可以接受。

举个例子,

--------------------------------------
| List 1 | List 2 | List 3 | List 4  |
--------------------------------------
| Bill   | Carlos | Adam   |  Adam   |
| Carlos | Dan    | Bill   |  Carlos |
| Frank  | Frank  | Carlos |  Frank  |
|        | Gerard | Frank  |  Liam   |
|        |        | Jim    |         |
--------------------------------------

在上面的示例中,我想确定Carlos和Frank在所有列中都很常见。

请注意,所有列都已排序且唯一。

我目前通过macro整理了这些项目,这些项目跨列对齐。我从这一点开始假设使用conditional formatting突出显示所有空白行很容易但是无法完成此操作。也许我会以错误的方式去做它。

宏代码:

Option Explicit

Sub LineEmUp()
'Author:    Jerry Beaucaire
'Date:      7/5/2010
'Summary:   Line up a random number of columns so all matching
'           items are on the same rows
Dim LC  As Long
Dim Col As Long
Dim LR  As Long
Application.ScreenUpdating = False

'Spot last column of data
    LC = Cells(1, Columns.Count).End(xlToLeft).Column

'Add new key column  to collect unique values
    Cells(1, LC + 1) = "Key"
    For Col = 1 To LC
        Range(Cells(2, Col), Cells(Rows.Count, Col)).SpecialCells(xlConstants).Copy _
           Cells(Rows.Count, LC + 1).End(xlUp).Offset(1)
    Next Col

    Columns(LC + 1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Cells(1, LC + 2), Unique:=True
    Columns(LC + 2).Sort Key1:=Cells(2, LC + 2), Order1:=xlAscending, Header:=xlYes

'Fill in new table headers w/formatting
    Range("A1", Cells(1, LC)).Copy Cells(1, LC + 3)

'Fill in new table values
    LR = Cells(Rows.Count, LC + 2).End(xlUp).Row
    With Range(Cells(2, LC + 3), Cells(LR, LC + 2 + LC))
        .FormulaR1C1 = "=IF(ISNUMBER(MATCH(RC" & LC + 2 & ",C[-" & LC + 2 _
                        & "],0)), RC" & LC + 2 & ", """")"
        .Value = .Value
    End With

'Cleanup/Erase old values
    Range("A1", Cells(1, LC + 2)).EntireColumn.Delete xlShiftToLeft
    Columns.Autofit
    Application.ScreenUpdating = True
End Sub

3 个答案:

答案 0 :(得分:2)

您可以使用数组公式(输入时使用Ctrl + Shift + Enter)

enter image description here

我在这里使用了C列,但是您选择从哪个列中提取值并不重要。

如图所示,条件格式也可以使用:使用基于公式的规则

=COUNTIF($A$2:$D$6,A2)=COLUMNS($A$2:$D$6)

要应用,请选择整个数据集(不包括标题)并确保A2是Activecell。

答案 1 :(得分:0)

如果你想检查list1中list1是否为任何一个,你需要在它的每一面放置*通配符,如下所示:

=If(Iserror(Match("*"&B1&"*",A:A,0)),"False","True")

答案 2 :(得分:0)

使用整个文件的名称作为其内容构建一个字符串数组。然后遍历每个名​​称的数组,并计算它发生的次数。因为名称只能在每列中出现一次,所以您可以在数组中使用它们的出现来衡量它是否包含在所有列中。

如果名称的出现次数与文件中的列数相同,则表示它包含在所有列中。

希望这能让你开始!