【问题标题】:Excel : compare several columns (about 10) values and only highlight the first one that's differentExcel:比较几列(大约 10 个)值,只突出显示不同的第一个
【发布时间】:2016-04-18 07:53:58
【问题描述】:

我是编码新手,我必须处理一个大约有 40,000 行和 50 列的 Excel 文档。我删除了大约 35 个列,这些列的规范对我来说并不重要。

在前 14 列中有定义不同产品的值。这些定义可以是作为产品功率或序列号规范的数字,也可以是作为产品名称或产地规范的字母。 我已经使用个性化过滤器对我的所有列进行了排序,首先根据第 1 列排序,然后按照第 2 列排序,依此类推... 第 15 列中的日期表示产品首次发布的日期。

我想要做的是比较每行中的所有前 14 列,并且只得到最先启动的那一列。由于我删除了 35 列,所以很多产品是相同的(它们在其他列中的规格不同)。 如果列中的值不匹配,我尝试记录宏或使用第 16 列中的公式返回一个值,但它总是与第一个值(第一行)进行比较,我似乎没有得到任何结果。

有人介意给我一些关于如何到达那里的提示吗?

非常感谢您的帮助(如果有任何英文错误,请见谅)

【问题讨论】:

  • 如果我理解正确,决定什么产品属于同一“类别”的条件是前 14 列中的匹配值。然后我会建议一个宏,它将通过 14 列的每个可能组合逐步过滤列表,按日期排序(升序),然后选择最上面的日期。但是你将不得不编写这样的宏。没有办法记录它。但是,录制可以帮助您进行基本操作
  • 是的,就是这样,如果前 14 个类别的值相同,那么我比较日期并只选择最古老的一个。好的,我将通过记录一个示例来尝试一个宏,并首先尝试 filterig,然后选择最古老的日期。谢谢
  • 我使用 IF(AND(...)) 混合了 VBA 和公式,并根据列是否匹配来呈现 1 或 0 的值。我认为它现在可以工作了 :)
  • 完美,不客气。您可以发布问题的答案,以便对有类似问题的人有用。

标签: vba compare match return-value formulas


【解决方案1】:

最后我找到了一个解决方案(因为我必须在几个 excel 文件中重复这个): 为过滤录制一个宏,如下所示:

ActiveWorkbook.Worksheets("Sheet2").ListObjects("Tableau1").Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("Sheet2").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range( _
        "Tableau1[Car]") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet2").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range("Tableau1[Model]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet2").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range("Tableau1[Motor]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet2").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range("Tableau1[Carburant]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet2").ListObjects("Tableau1").Sort.SortFields. _
        Add Key:=Range( _
        "Tableau1[Techno]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

...等等!

然后我创建了一个新列,以便根据所有行是否与IF(AND(C2=C3;D2=D3; ... ; O2=03);1;0) 的公式相同,它会说 1 或 0,最后我在最后一列中输入了一个公式,说明如果有 0在左侧,应考虑该行的日期,否则将出现日期 1/01/1900。然后通过过滤这一行并去掉 1900 年的日期,我得到了我想要的。

我希望它很清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2012-04-18
    • 2016-05-14
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多