簡體   English   中英

Excel宏可對已排序的列中的相同單元格進行遞增編號,並在單元格內容更改時將計數重置為1

[英]Excel macro to incrementally number identical cells in a sorted column, resetting count to 1 when cell content changes

這是上一個問題的后續內容( 如果單元格包含值n,那么如何創建由n個單元格組成的列,每個單元格包含值n(然后對另一個單元格重復)? )。 我有一列數字,由x值x的行,然后y值y的行組成,依此類推; 舉一個簡單的例子:

2
2





2
2
3
3
3
(等-實際列表超過2500行,並且包含2到200之間的值。)

我需要的是一個宏,它將對每次出現的數字進行遞增編號,每當值更改時將計數重置為1。 因此,上面的列表將生成一列,如下所示:-

2-1
2-2
5-1
5-2
5-3
5-4
5-5
2-1
2-2
3-1
3-2
3-3
..等等。

我猜想這樣的事實,即列是x值的x行,y值y的行(等等)並不重要,但是我提到它是在有用的情況下。 我正在使用Excel 2000(對VBA幾乎一無所知)。 任何幫助都非常歡迎。

如果可以使用公式,則可以使用以下公式:

=if(A2=A1,B1+1,1)

假定第一個數字(2)在單元格A1中,請將其放在單元格B2中。 您只需要在單元格B1中放入1 ,然后在公式底部填寫即可。

如果您需要較早的宏來滿足此要求,則可以使用此版本,該版本在每個重復項旁邊都包含事件ID。

Public Sub Test()

    PopulateColumn Range("A1"), Range("B1")

End Sub


Public Sub PopulateColumn(ByVal rngSourceStart As Range, ByVal rngTargetStart As Range)

    Dim rngSource As Range
    Dim rngTarget As Range

    Set rngSource = rngSourceStart
    Set rngTarget = rngTargetStart

    Dim iValue As Integer
    Dim i As Integer

    While rngSource.Value <> ""
        iValue = rngSource.Value
        For i = 1 To rngSource.Value
            rngTarget.Value = iValue
            rngTarget.Offset(0, 1).Value = i
            Set rngTarget = rngTarget.Offset(1, 0)
        Next
        Set rngSource = rngSource.Offset(1, 0)
    Wend

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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