2017-09-20 317 views
0

我试图在Excel中使用VBA编写自动零件编号生成器。部件号码格式如下:“XXXXX-XX”。前五位是序列号,后两位表示修订级别。Excel VBA - 生成零件编号

当一个新零件号被拉出时,修订级别总是从“01”开始。例如:“12345-01”。预先存在的号码从“A2”开始列在“A”列中。我希望宏查看整个“A”列并拆分“XXXXX-XX”格式,并只查看前5位数字。然后,它将确定该列中的最高值,并自动对该值+1,以创建我的下一个零件编号。

我,所以我在第一次尝试如下完全新的VBA: 我声明范围1的范围,所以它看起来在整个“A”柱,仅前5位:

Range1 = Microsoft.VisualBasic.Left("A2:A", 5) 

如果我没有记错,那么LEFT函数会以文本格式返回数字。那么使用函数“Val”将文本转换回数字格式是否正确? MaxValue被声明为一个整数以在列“A”中存储最大值。

MaxValue = Application.WorksheetFunction.Max(Val(Range1)) 

我似乎得到了第一行代码的运行时错误424,还是有更好的方法来做到这一点?任何帮助将不胜感激!

在此先感谢。干杯,

+2

'Microsoft.VisualBasic.Left'看起来像VB.NET语法 - 你可以用'Left',或者更好的,'左$' – ThunderFrame

回答

0

你不需要vba的问题,正常的Excel公式会做(如果你喜欢这个,你可以在vba中使用相同的概念)。

假设你的零件号码在A1:A100。然后在单元格中,你需要新的产品编号输入以下公式:

=MAX(VAL(LEFT(A1:A100,5))) + 1 & "-01" 

- >确保使用CTRL + SHIFT输入公式+ Enter,您可以看到正确的条目时,Excel将{}各地你的公式(这是Array-Formulas总是需要的)。

(希望我翻译的公式从德语到英语正确...)

+0

谢谢!我设法让它在正常的excel中工作,但是,我还想在公式中添加一件事。我不想为公式定义一个固定的范围(从A:1到A:100),而是希望在添加零件编号时使该范围变为动态。我希望在公式中添加一个COUNTA函数,因此它会自动计算有多少个单元中有零件号。 = MAX(VALUE(LEFT(A1:$ A&(= COUNTA(A:A)),5)))+1&“-01” 我使用这种语法出错。有没有更好的方法来做到这一点 谢谢! –

+0

'= MAX(VAL(LEFT(A:A,5)))+ 1&“-01”' – Jochen

+0

它有效吗?请标记为答案:) – Jochen

0

输入:

enter image description here

在单元格B2,尝试下面的公式,并按CTRL + SHIFT +输入。它会给你所需的确切零件号码。

="12345-"&TEXT(VALUE(MAX(VALUE(MID(A2:A5,SEARCH("-",A2:A5)+1,LEN(A2:A5)-SEARCH("-",A2:A5)))))+1,"00") 

希望这是你在找什么。

OP: enter image description here