繁体   English   中英

Excel VBA-获取参数中的最新更改行

[英]Excel VBA - Get row of latest change in a parameter

我有一个看起来像这样的大数据集:

  Employee ID |Job| Function| Level|Date of change
     1        | x |   a     |  A1  | 01/05/2014   
     1        | y |   a     |  A1  | 02/04/2015  
     1        | y |   a     |  A2  | 25/08/2015   
     1        | z |   a     |  A3  | 27/12/2015   
     1        | z |   c     |  A3  | 01/03/2016  
     2        | t |   b     |  B1  | 12/05/2013  
     2        | v |   b     |  B1  | 13/04/2014   
     2        | w |   b     |  B3  | 12/01/2016   

每行都包含作业,功能或级别的更改。

我需要创建一个表,该表汇总每个员工的最新级别更改(因此,对于员工1,它将是第4行)。 到目前为止,我已经结合使用了条件格式和数据透视,但是我想知道是否可以在VBA中更快地完成此操作。

谢谢!

没有VBA

假设在E列中有真实日期,格式为dd/mm/yyyy ,在G1中输入Array Formula

=MAX(IF(A:A=1,E:E,""))

这给出了员工1的最新日期

必须使用Ctrl + Shift + Enter输入 数组公式 ,而不仅仅是Enter键。

然后在G2中输入:

=SUMPRODUCT(--(A1:A9=1)*(E1:E9=G1)*(ROW(1:9)))

这给出了您感兴趣的记录的行号

在此处输入图片说明

从那里可以使用INDEX()从该行获取任何信息。

注意:

如果需要,可以将G1G2中的公式合并为一个单元格。

编辑#1:

一组相同的公式应适用于员工ID和数字的文本值

在此处输入图片说明

不确定这是否是最佳解决方案,但是由于这是一次性的练习,因此我使用了这个技巧:

  1. VBA查找级别发生变化的所有行,并在适用的情况下在列“ F”中写“是”:

     Sub JLChange() Dim Data As Worksheet Dim i As Long Dim lastrow As Long Set Data = ThisWorkbook.Worksheets("Data") lastrow = Data.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To lastrow If Cells(i + 1, 4).Value <> Cells(i, 4).Value And_ Cells(i + 1,1).Value = Cells(i, 1).Value Then Cells(i + 1, 6).Value = "Yes" Else Cells(i + 1, 6).Value = "No" End If Next i End Sub 
  2. 对于“ F”列中的所有记录,我使用了加里的学生建议的公式来进行最后的更改。

或者,您可以将此更改数据库复制粘贴到新表中,按ID以及从最新到最早的更改日期排序,然后使用vlookup获取每个ID的第一个条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM