【问题标题】:Allocate serial number in each change in a specific column在特定列中的每个更改中分配序列号
【发布时间】:2013-08-13 19:55:36
【问题描述】:

我正在寻找 Excel VBA 代码,因为我想根据 B 列中的更改将序列号分配给 A 列。例如,我需要在 A 列中将每个 X、Y 的答案设为 1、2、3 ,Z。

有人可以帮忙发布所需的 VBA 代码吗?

Column A     Coloum B
1             X
1             X
2             Y
2             Y
3             Z

【问题讨论】:

    标签: excel numbers allocation vba


    【解决方案1】:
    Sub Serial()
    
    For i = 1 To 10
    
     Cells(i, 2).Select
    
       If ActiveCell.Value = "x" Then
       Cells(i, 1) = 1
    
       ElseIf ActiveCell.Value = "y" Then
       Cells(i, 1) = 2
    
       ElseIf ActiveCell.Value = "z" Then
       Cells(i, 1) = 3
    
       End If
    
    Next i
    
    End Sub
    

    这是超级简单的版本,没有变量或任何类似的东西。

    【讨论】:

    • vengadasamy 的值是“x”、“y”和“z”是非常值得怀疑的,他/她可能无法输入所有可能的值。
    【解决方案2】:

    假设:

    • 您的数据使用第 1 行作为标题行,因此实际数据从第 2 行开始。
    • B 列中的值已经排序

    它需要是一个宏吗?这可以通过一个公式来完成。将数字 1 放在单元格 A2 中,然后将这个公式放在单元格 A3 中并复制下来:

    =A2+(B3<>B2)
    

    如果它必须是一个宏,那么这样的东西应该可以正常工作:

    Sub tgr()
    
        Dim rCell As Range
        Dim arrID() As Long
        Dim arrIndex As Long
        Dim lID As Long
        Dim strTemp As String
    
        With Range("B2", Cells(Rows.Count, "B").End(xlUp))
            ReDim arrID(1 To .Rows.Count)
            For Each rCell In .Cells
                If rCell.Text <> strTemp Then
                    strTemp = rCell.Text
                    lID = lID + 1
                End If
                arrIndex = arrIndex + 1
                arrID(arrIndex) = lID
            Next rCell
            .Offset(, -1).Value = Application.Transpose(arrID)
        End With
    
        Set rCell = Nothing
        Erase arrID
    
    End Sub
    

    【讨论】:

    • 虽然我确信在这种情况下这不是问题,但如果行数超过 65,573,使用 TRANSPOSE 会产生类型不匹配错误。这是 Excel 2007 和 2010 中功能的限制(下限适用于以前的版本)。通过使用ReDim arrID(1 to .Rows.Count, 1 to 1),然后将下面的元素引用更改为ArrID(arrIndex,1),可以避免对TRANSPOSE 的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2022-01-10
    • 2020-11-07
    • 2019-12-20
    • 2022-01-15
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多