2015-07-11 67 views
-2

的前10%我有一個Excel電子表格2013,除其他事項外,顯示了在不同地區的資產收入。VBA - 每個區域

我正在寫一個宏,如果收入是在該地區的前10%,而不是最近審查,將在明年的收入空單元格中輸入一個日期。這就是我發現困難的地方。

我可以寫一行代碼返回收入的前10%,但無法弄清楚如何返回一個區的前10%。

作爲一個功能,我可以達到預期的效果如下: {=LARGE(IF(I13:I1000=800,IF(AO13:AO1000<>DATE(2015,3,12),AI13:AI1000,""),""), 17)}

對於我的宏,我寫了將代碼:

1)接受輸入該地區進行審查和

2)確定的審覈日期時的最後審查進行(種,同樣的問題,我需要找到在某一地區資產最大)

3)如何計算很多資產需要進行審查(前10%和底部的百分之二十)

這是我到目前爲止的代碼:我掙扎弄清楚如何定義與範圍

Sub ScheduleNextReview() 
'Determine which district will be reviewed 
    Dim Dist As String 
    Dim NextDate As Date 

    Dist = InputBox(Prompt:="Enter district for review:", Title:="Dist:", Default:="000") 
    NextDate = InputBox(Prompt:="Date of Review", Title:="Enter Date for next review:", Default:="mm/dd/yyyy") 

'Find date of Last Review 
    Dim rng As Range 
    Dim LastReview As Date 
    Set rng = ActiveSheet.Range("AL13:AL1000") 
    LastReview = Application.WorksheetFunction.Max(rng) 'need to figure out how to get the max value for those in Dist 

'Count number of wells in district and find top ten percent and bottom twenty percent 
    Dim DistTtl As Double 
    Dim TopTenth As Integer 
    Dim BottomTwent As Integer 

    DistTtl = WorksheetFunction.CountIf(Range("I13:I10000"), Dist) 
    TopTenth = WorksheetFunction.Round(DistTtl/10, 0) 
    BottomTwent = WorksheetFunction.Round(DistTtl/5, 0) 

MsgBox "There are " & TopTenth & " assets in the top ten percent, and " & BottomTwent & " assets in the bottom twenty percent of " & Dist & " for review on " & NextDate & "." 
End Sub 

IF聲明或獲取與上面粘貼的函數相同的工作表函數。

請讓我知道如果有什麼需要進一步澄清 謝謝!

+1

是的,你需要創建它:所以添加一些代碼到這個問題,如手冊中關於使用stackoverflow指示。 –

+2

你應該包括你已經嘗試過('代碼')以提高你獲得答案的機會 - [這裏有一些提示] – 0m3r

+0

感謝您的反饋。我編輯了我的問題,包括我完成的工作。如果有些事情不清楚或不合常規,我很抱歉;我幾個星期前就開始使用VBA /宏,因爲我公司裏沒有其他人可以做到這一點,Excel允許我儘可能多地記錄宏並教導自己(即我正在進行我的頭)。 – elt2jdavis

回答

0

最好的工作,我身邊能想出是使用像一個函數: {=PERCENTILE.INC(IF(I13:I999=100,AI13:AI999,""), 0.9)}

我沒有這個功能對於每個區,然後創作了一系列elseif的語句來獲得所選擇的小區90個百分點:

  Dim Dist90 As Double 
      Dim Dist As Integer 

     If Dist = 100 Then 
      Dist90 = Cells(2, 48) 
     ElseIf Dist = 200 Then Dist90 = Cells(3, 48) 
     ElseIf Dist = 300 Then Dist90 = Cells(4, 48) 
     ElseIf Dist = 400 Then Dist90 = Cells(5, 48) 
     ElseIf Dist = 500 Then Dist90 = Cells(6, 48) 
     ElseIf Dist = 600 Then Dist90 = Cells(7, 48) 
     ElseIf Dist = 700 Then Dist90 = Cells(8, 48) 
     ElseIf Dist = 800 Then Dist90 = Cells(9, 48) 
     End If