Excelの関数は非常に便利な機能ですが、”乱数”や”日付”は、後から開く場合に値が変わってほしくないことがあります。
元のファイルをテンプレートで作成しておき、”乱数”や”日付”の関数が入っているセルを手動で”コピー”→”値のみ貼り付け”という方法もありますが、修正するのを忘れてしまうことがあります。
一番良い解決方法はやはりVBAと思います。
“乱数”や”日付”を計算させ、セルには値だけを入れるようにします。
例えば以下のような入力がある場合
VBEを起動(Alt+F11)させて下記のように記述します。
Sub Auto_Open()
Range(“W1”).Value = Application.RandBetween(100000, 999999)
Range(“R5”).Value = Year(Now() + (Month(Now()) + 1))
Range(“U5”).Value = Month(Now()) + 1
End Sub
・Auto_Open()はブックを開いたときに自動で実行するプロシージャです。(※自動でない方が良いかも)
・VBAで乱数は通常rand()を使いますが、最小値と最大値をパラメータのイメージしやすいワークシート関数を使用しました。
※VBA(マクロ)はデフォルトでは実行できませんので、利用する際はセキュリティの変更が必要です。
まず、VBA関係の”開発リボン”を表示
”ファイル”→”オプション”→”リボンユーザ設定”で”開発”にチェックを入れてください。
セキュリティの変更は
”開発”タブで”マクロのセキュリティ”をクリックし、”すべてのマクロを有効にする”を選択、
”VBA プロジェクト オブジェクト モデルへのアクセスを信頼する”にチェックを入れます。
※作成したファイルの形式は、マクロが扱えるテンプレート”Excelマクロ有効テンプレート(*.xltm)”です。
テンプレートから開いた新規ブックを保存する際は通常のExcelのブック形式で保存します。下記のようなメッセージが表示されますので”はい”を選択します。誤ってマクロが扱える形式で保存してしまいますと次に開くとき値が変わってしまいますので注意してください。
※余談ですが、ExcelやAccessで今日の日付をセルに入力するのは、”Ctrl+;(セミコロン)”でOKです。
乱数の部分も、日付のシリアル値を入れるのであれば、VBAを使用せず、上のショートカットの方がずっと楽です。