2017-09-20 20 views
0

VBAを使用してExcelで自動部品番号ジェネレータをプログラムしようとしています。部品番号は次の形式で表示されます: "XXXXX-XX"。最初の5桁はシリアライズされた数字で、後ろの2桁はリビジョンレベルを示します。Excel VBA - 部品番号を生成

新しい部品番号を引っ張ると、改訂レベルは常に "01"から始まります。例:「12345-01」。既存の番号は、「A2」から始まる列「A」にリストされています。 "A"列全体を見て、 "XXXXX-XX"形式を分割し、最初の5桁のみを見てください。次に、その列から最高値を決定し、その値に自動的に+1して次の部品番号を作成します。

私は次のように、この時の私の最初の試みがあるVBAを完全に新しいです: それは全体の「A」欄のみ最初の5桁を見えるように、私は範囲としてレンジ1を宣言:

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

正しく覚えていれば、LEFT関数は数値をテキスト形式で返します。それで、関数 "Val"を使ってテキストを数値形式に変換するのは正しいですか? MaxValueはIntegerとして宣言され、列 "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" 

- Excelが追加したとき> Ctrl + Shiftキーで式を入力+入力してください、あなたの周り} {正しいエントリを参照してくださいあなたの数式(これは常に配列数式に必要です)。

は(うまくいけば、私はドイツ語から英語への正しい式を...翻訳)

+0

ありがとう!私は正常に機能するように管理しましたが、式に追加したいことがもう1つあります。 (A:1からA:100まで)見える数式の固定範囲を定義する代わりに、部品番号が追加されるにつれてこの範囲を動的にしたいと考えています。数式にCOUNTA関数を追加して、セルに部品番号を持つセルの数を自動的に数えたいと思っていました。 = MAX(VALUE(LEFT(A1:$ A&(= COUNTA(A:A))))+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