MS Excel 找出一行中的差异,找出变化在哪一列,然后打印出列标题

MS Excel 找出一行中的差异,找出变化在哪一列,然后打印出列标题

首先,您好,感谢您花时间阅读本文。我已经考虑解决这个问题一段时间了,现在决定是时候了。问题如下:

假设我们有如下的预约表:

下列

每个标题都指向一种预约类型,例如牙科、心理、理疗等,在我的例子中,最多可以扩展到 30 列。我如何才能有效地找出这样的表格中哪个数字发生了变化?我的实际数据集包含 10k+ 行,总共约 55 行(但只需要在其中 30 列中拾取更改,所有列都彼此相邻。)

一开始,我想用 SUM 把字段中的所有值加起来,看看是否有变化,但还有 30 列需要查看,并手动找出发生变化的位置。那么,我可以使用什么公式或公式组合来找出一行字段中的差异,然后找出差异属于哪一列,并在新列中打印出列标题?

PS 有重复。

答案1

如果我理解正确的话:

比较具有相同 ID 的行,并找出日期较晚的行与日期较早的行不同的列。

最简单的方法是使用 Power Query。

这是 Power Query 中高级编辑器的代码。如果您不确定如何使用它,请继续阅读。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

    //make the table tall instead of wide
    Unpivot = Table.UnpivotOtherColumns( Source , {"ID","ApptDate"} , "ApptType" , "Value"),

    //join the table with itself on ID and date < other date
    Crossjoin = Table.AddColumn(
                    Unpivot,
                    "crossjoin",
                    (outer) => Table.SelectRows(
                                    Table.PrefixColumns(Unpivot,"New"),
                                    (inner) =>  outer[ID] = inner[New.ID] and 
                                                outer[ApptType] = inner[New.ApptType] and 
                                                outer[ApptDate] < inner[New.ApptDate] and 
                                                outer[Value] <> inner[New.Value]
                                )
                ),

    //get only those rows where the value has changed
    Changes = Table.SelectRows( Crossjoin , each not Table.IsEmpty([crossjoin])),

    //expand the crossjoin column
    Expand = Table.ExpandTableColumn( Changes , "crossjoin" , {"New.ApptDate","New.Value"})
in
    Expand
  1. 如果尚未转换,请将数据转换为表格。将光标放在范围内的任意位置,然后按 Ctrl+T。
  2. 使用日期>获取数据>从其他来源>空白查询:

在此处输入图片描述

Power Query 编辑器将打开。

  1. 在主页选项卡上,单击“高级编辑器”。它将如下所示:

在此处输入图片描述

  1. 删除那里的代码并将其替换为上面的代码

  2. 单击高级编辑器上的完成

  3. 使用主页>关闭并加载

结果如下:

在此处输入图片描述

对于每个值差异,都会有一行,其中 B 列中的日期与 E 列中的日期、C 列中的约会类型和 A 列中的 ID 进行了比较。

相关内容