簡體   English   中英

VBA Excel WorksheetFunction.Rank問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM