2017-11-11 137 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

相關問題