我无能为力。任何帮助都会很棒。 我有两列名称和修订版,基于这两列,我必须生成自动编号。如果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
感谢。
答案 0 :(得分:0)
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) )