Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在特定列中的每次更改中分配序列号_Excel_Numbers_Allocation_Vba - Fatal编程技术网

Excel 在特定列中的每次更改中分配序列号

Excel 在特定列中的每次更改中分配序列号,excel,numbers,allocation,vba,Excel,Numbers,Allocation,Vba,我正在寻找Excel VBA代码,因为我想根据B列中的更改将序列号分配给A列。例如,我需要在A列中为每个X、Y、Z的答案为1、2、3 是否有人可以帮助发布所需的VBA代码 Column A Coloum B 1 X 1 X 2 Y 2 Y 3 Z 这是一个超级简单的版本,没有变量或类似的东西。假设: 您的数据使用第1行作为标题行,因此实际数据从第2行开始 列B中的值

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

是否有人可以帮助发布所需的VBA代码

Column A     Coloum B
1             X
1             X
2             Y
2             Y
3             Z
这是一个超级简单的版本,没有变量或类似的东西。

假设:

  • 您的数据使用第1行作为标题行,因此实际数据从第2行开始
  • 列B中的值已排序
它需要是宏吗?这可以通过一个公式来实现。将数字1放入单元格A2,然后将公式放入单元格A3,并复制:

=A2+(B3<>B2)
=A2+(B3B2)
如果必须是一个宏,那么类似这样的操作应该可以正常工作:

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
Sub-tgr()
变暗rCell As范围
Dim arrID()的长度与
长的指数
暗淡的盖子
将strTemp设置为字符串
带范围(“B2”,单元格(行数,“B”)。结束(xlUp))
ReDim arrID(1到.Rows.Count)
对于每个rCell In.单元格
如果是rCell.Text strTemp,则
strTemp=rCell.Text
盖子=盖子+1
如果结束
arrIndex=arrIndex+1
arrID(arridex)=盖子
下一个rCell
.Offset(,-1).Value=Application.Transpose(arrID)
以
Set rCell=无
清除棱边
端接头

Vengadasmy的值是否为“x”、“y”和“z”非常值得怀疑,他/她可能无法键入所有可能的值。虽然我确信在这种情况下这不是问题,但如果行数超过65573,使用
转置将产生类型不匹配错误。这是Excel 2007和2010中函数的一个限制(较低的限制适用于以前的版本)。使用
ReDim-arrID(1到.Rows.Count,1到1)
然后将下面的元素引用更改为
arrID(arridex,1)
可以避免
转置的需要。
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