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

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

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 

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

我需要创build一个表格,将每个员工的最新变化放在一起(对于员工1,这将是第4行)。 到目前为止,我已经使用了条件格式和枢轴的组合,但我想知道是否有办法在VBA中更快地执行此操作。

谢谢!

没有VBA

这假定列E中有真正的date,格式为dd/mm/yyyy ,在G1中input数组公式

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

这给了员工1的最新date

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

然后在G2中input:

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

这给出了你感兴趣的logging的行号

在这里输入图像说明

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

注意:

如果需要, G1G2中的公式可以组合成一个单元。

编辑#1:

同一套公式应该与员工ID以及数字的文本值一起工作:

在这里输入图像说明

不知道这是最好的解决scheme,但是因为这是一次性的练习,所以我使用了这个技巧:

  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”栏中的所有logging,我使用加里学生提出的公式来得到最后的改变。

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