根据前缀值生成顺序序列号

时间:2015-10-21 10:07:07

标签: excel vba

我们已经定义了前缀(例如ABC,GIJ,THK,JLK等等),并且想要在用户想要为这些前缀中的每一个生成一个数字时创建一个序号,如下所示:

ABC0000,ABC0001,ABC0002 ...... ABC9999对于GIJ0000,GIJ0001,GIJ0002 ...... GIJ9999也是如此。

下面给出了为上述逻辑编写的代码,但它没有达到要求:

Private Sub CommandButton1_Click()

With ComboBox1.Value

Dim a, b As String

Dim i, j, k, l, x, q, m, temp As Long

a = ComboBox1.Text

i = Application.WorksheetFunction.Match(a, Range("A1:A1000"), 0)

j = Cells(i, 2)

l = j * 1000

For q = 2 To 100

For m = 2 To 100

If Cells(q, m).Value < 0 Then

k = m

End If

Next

Next

x = l

If Cells(i, GC).Value = temp Then

click = click + 1

Else

click = 0

End If*

Cells(i, GC) = x + click

TextBox1.Text = x + click

temp = Cells(i, GC).Value

End With

GC = GC + 1

End Sub

2 个答案:

答案 0 :(得分:0)

VBA似乎没有必要。假设您在Row1中的ColumnA中的单独单元格中有前缀,请输入B1:

=A1&TEXT(COUNTIF(A$1:A1,A1)-1,"0000")  

并双击其填充手柄。

SO33256452 example

答案 1 :(得分:0)

从你的代码中,我假设你有一个名为ComboBox1的ComboBox,一个名为CommandButton1的CommandButton和一个名为TextBox1的TextBox,所有这些都在UserForm上,而ComboBox1则填充了前缀的可能值。

以下代码将所选前缀的下一个可用代码(1)放入TextBox。

Private Sub CommandButton1_Click()
        Dim a As String
        Dim i As Long, j As Long
        a = ComboBox1.Text
        i = Application.WorksheetFunction.Match(a & "9999", Range("A1:A1000"), 1)
        j = CLng(Mid$(Cells(i, 1).Value, Len(a) + 1)) + 1
        TextBox1.Text = a & Format(j, "0000")
End Sub

你的代码也做了很多不必要的事情。

(1)仅在数据被排序时。