2017-09-20 232 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