2017-11-11 187 views
1

我一直盯着这个这么久,老实说我不知道​​该怎么做。假设我有Sheet1,其中A列中的员工ID和2016年1月的B列中的工资,以及Sheet2上2016年12月的A列和B列中的员工ID和薪资。如何编写for循环,找到基于雇主ID的最大薪资差异?我需要使用某种形式的Vlookup,因为它们不完全匹配。VBA - 根据Excel中两个不同工作表中的值查找最大百分比变化?

目前,这是我有:

Sub Max_Percent_Change() 
Dim Salary 

For Each Cell In Worksheets("Sheet1").Range("A2:A1000") 
     Salary = Application.WorksheetFunction.VLookup(Cell, _ 
       Worksheets("Sheet2").Range("A2:B1000"), 2, False) 

回答

0

如果数据如图片所示的设置,请让这个尝试...

更改表名称,如果需要在代码。

Sub FindSalaryPercentageChange() 
Dim wsJan As Worksheet, wsDec As Worksheet 
Dim x, y, z() 
Dim i As Long 
Dim janSalary As Double, decSalary As Double 
Dim pChng As Double 
Dim r 
Application.ScreenUpdating = False 
Set wsJan = Sheets("January16") 
Set wsDec = Sheets("December16") 
x = wsJan.Range("A1").CurrentRegion.Value 
y = wsDec.Range("A1").CurrentRegion.Value 
ReDim z(1 To UBound(x, 1) - 1) 
wsDec.Columns("C").Clear 
For i = 2 To UBound(y, 1) 
    r = Application.Match(y(i, 1), Application.Index(x, , 1), 0) 
    If Not IsError(r) Then 
     janSalary = x(r, 2) 
     decSalary = y(i, 2) 
     pChng = (decSalary - janSalary)/janSalary 
     z(i - 1) = pChng 
    End If 
Next i 
wsDec.Range("C1").Value = "%Change" 
wsDec.Range("C2").Resize(UBound(z)).Value = Application.Transpose(z) 
wsDec.Columns(3).NumberFormat = "0.00%" 
Application.ScreenUpdating = True 
End Sub 

January16数据:

enter image description here

12月16日数据:

enter image description here

+0

太谢谢你了!但有没有办法做到这一点,以便它不修改当前的电子表格?也就是说,所有的计算都是在VBA本身完成的? –

+0

我不明白当你说所有的计算都是在VBA本身完成时,你是什么意思?变量Array z保存Jan和Dec工资之间的所有百分比变化,您可以对该数组执行任何操作,无论将其写回到表单中,还是在代码中对其执行操作。 – sktneer

相关问题