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()从该行获取任何信息。
注意:
如果需要, G1和G2中的公式可以组合成一个单元。
编辑#1:
同一套公式应该与员工ID以及数字的文本值一起工作:
不知道这是最好的解决scheme,但是因为这是一次性的练习,所以我使用了这个技巧:
-
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
-
对于“F”栏中的所有logging,我使用加里学生提出的公式来得到最后的改变。
或者,您可以将此数据库中的更改复制粘贴到新表中,按IDsorting,按date从最新到最旧更改,然后使用vlookup获取每个ID的第一个条目。