学校の大きなプロジェクトのために、部品番号ジェネレーターを作成しようとしています。 関数を使用し=RANDBETWEEN(0,999999)
て部品番号の一部を生成する機能が必要です。 問題は の更新です=RANDBETWEEN(0,999999)
。 セルを参照すると、すべての部品番号が同じ乱数になります。 古い乱数をそのまま保存しながら、 を=RANDBETWEEN(0,999999)
更新して次の部品の新しい番号を生成する機能を維持する関数が必要です。 これを実現する方法を 2 日間探していました。 どなたか助けていただければ幸いです。 私は VBA の経験がないので、これを関数として保持して、チームのすべてのユーザーが使用できるようにしたいと思います。
答え1
答えではありません。
RAND()、RANDBETWEEN() および同様の関数は、ワークシートの再計算ごとに新しい数値を生成することに注意してください。
F9 または SHIFT+CTRL+F9 (LibreOffice の場合) を押すと再計算が開始され、問題が見えるようになります。
生成された番号が一意であるという保証もありません。
以下は、特定のセルを先頭にゼロが付いた 6 桁の乱数に設定する、手動またはキーボードで開始されるマクロの開始点となる可能性のある関数です。
未テスト (Excel が利用できないため、少なくとも 1 つまたは 2 つのエラーがある可能性があります)
関数 rndNum(セル) rndNum=WorksheetFunction.RANDBETWEEN(0,999999) セル<>""の場合 Range(セル).Value="'" & WorksheetFunction.TEXT(rndNum,"000000") 終了の場合 終了関数
答え2
EVAL
名前付きマネージャーで名前付き関数を作成できます。
=LAMBDA(x,EVALUATE(x))
これで、次の方法でワークシート内でこれを呼び出すことができます。
=EVAL("RANDBETWEEN(0,999999)")
これにより、そのセルにその数式を再適用した場合にのみ変更される乱数が作成されます。
これにより、保存時にワークブックが xlsm になることに注意してください。そうしないと、名前付き関数が失われます (乱数はそのまま残ります)。