[英]VBA Excel WorksheetFunction.Rank issue
我是VBA的新手,所以請放輕松。
我有一個長度為120000行的數字列表,我希望以12的增量進行排名-意味着前12個數字的排名應從1到12,接下來的12個數字的排名應從1到12,依此類推。
我知道如何使用Rank函數在Excel中一次執行一次增量操作,但是由於要花我很多時間才能手動執行,因此我決定嘗試編寫一個宏來為我執行此操作。
據我所知。
Sub Rank()
Range("H1").End(xlDown).Offset(1, 0).Select
ActiveCell = Application.WorksheetFunction.Rank(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 1), ActiveCell.Offset(12, 1))
Range("H200000").Select
Selection.End(xlUp).Select
Selection.Copy
Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(11, 0)).Select
ActiveSheet.Paste
End Sub
我已經進行了多次迭代,試圖找出我要去哪里,但我目前陷入困境。 我敢肯定有一個簡單的方法可以解決這個問題,但是我只是沒有幫助的技巧,因此任何幫助都將非常有必要。
這里有幾個問題:
ActiveCell是只讀屬性。 您可以使用.Activate而不是設置ActiveCell來移動它。
等級采用三個參數:一個單元格(或值)作為查找值,在其中查找等級的范圍以及一個設置升序或降序等級的值。 您已經通過了三個單元格。
最后一行代碼(這是唯一會影響電子表格的代碼)將H列中的最后一項向下復制12個單元格。 我認為這並不是您想要的效果...
以下假設您的數據從H2開始,並且將排名放在I列的每12個塊中。這是否是您想要的?
Sub Rank()
Dim i As Long
Dim j As Long
Application.ScreenUpdating = False
For i = 1 To 10000
For j = 1 To 12
Cells((i - 1) * 12 + (j + 1), 9).Value = WorksheetFunction.Rank(Cells((i - 1) * 12 + (j + 1), 8), Range(Cells((i - 1) * 12 + 2, 8), Cells((i - 1) * 12 + 13, 8)), 1)
Next j
Next i
Application.ScreenUpdating = True
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.