如何基于列值组在Excel中生成自动编号

时间:2016-08-18 20:49:56

标签: excel excel-vba vba

我无能为力。任何帮助都会很棒。 我有两列名称和修订版,基于这两列,我必须生成自动编号。如果Name有3个版本,那么应该只有一个Number。 以下是供参考的示例。

Name         Revision   Auto Number
18FC1C4AA110    1          1001
0386FCC1A155    1          1002
CA648070ADA7    1          1003
CA648070ADA7    2          1003
8B488B4A988F    1          1004
CE128EDA6B84    1          1005
3CF6F8CE501A    4          1006
3CF6F8CE501A    3          1006
3CF6F8CE501A    2          1006
3CF6F8CE501A    1          1006
A0EEF6FADEF3    1          1007
BAC53A2342DE    1          1008
AC95502EA3CD    2          1009
AC95502EA3CD    1          1009
7DCB09E99F54    2          10010

感谢。

2 个答案:

答案 0 :(得分:0)

enter image description here

Sub FixAutoNubmer()
    Dim dict As Object
    Dim num As Double, x As Long
    num = 100000000000#
    Columns("C").NumberFormat = "000000000000"

    Set dict = CreateObject("Scripting.Dictionary")

    For x = 2 To Range("A" & Rows.Count).End(xlUp).Row

        If dict.Exists(Cells(x, "A")) Then
            Cells(x, "C") = dict(Cells(x, "A"))
        Else
            dict(Cells(x, "A")) = num
            Cells(x, "C") = num
            num = num + 1
        End If
    Next
End Sub

答案 1 :(得分:0)

简短的回答是,如果必须是数字而不是文本,那么excel似乎不可能。

答案越长,Excel中的数字最多只能有15个数字 名称似乎是十六进制的,因此12个十六进制字符到十进制将是
16^12 ~ 2.81474977e14为15位, 999999999999999/(16^12)为〜3.5527136788,这意味着理论上它只有 3 的空间修订。
我能想到的唯一选择是将数字存储为文本。 Hex2Dec Excel函数最多只能将10个十六进制字符转换为小数,因此可以在名称的某些部分使用:

= B2 & Hex2Dec( Left(A2,6) ) & Hex2Dec( Mid(A2,7,6) )

另一种选择可能是将十六进制字符串转换为VBA十进制类型:

Function HexToDecimal(hexadecimal As String) As String
    HexToDecimal = CDec("&H" & hexadecimal)
End Function

和样品使用:

= HexToDecimal( B2 & A2 )

<强>更新

我可能误解了你的问题。如果自动编号仅基于名称,则:

= Hex2Dec( Left(A2, 10) ) * 256 + Hex2Dec( Right(A2, 2) )