doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excelでランダムな日付を作る方法|平日だけ・重複なしもコピペ数式で一発【ダミーデータ作成】

スポンサーリンク

テスト用のダミーデータを用意したいとき、「ランダムな日付が大量に欲しい」という場面は意外とよくあります。売上サンプル、勤怠データ、予約表のテスト——リアルな日付が並んでいると資料の説得力が一気に増します。

とはいえ、手で日付を打ち込むとどうしても不自然に連番になりがちで、件数が多いと時間もかかります。この記事のコピペ数式を使えば、そんな作業が数分で片付きます。基本から「平日だけ」「重複なし」といった条件付きまで、順番に見ていきましょう。

Excelでランダムな日付を作る方法|平日だけ・重複なしもコピペ数式で一発【ダミーデータ作成】のサンプル ▲ Excel サンプル

基本:RANDBETWEEN関数でランダムな日付を作る

Excelの日付は、内部的には「1900年1月1日を1とした連番(シリアル値)」で管理されています。この仕組みを使えば、日付のランダム生成は驚くほど簡単です。開始日と終了日をシリアル値に変換し、その範囲でランダムな整数を返すだけです。

=RANDBETWEEN(DATE(2026,1,1), DATE(2026,12,31))

このままだと「46023」(=2026年のある日)のような数字が表示されるので、驚かなくて大丈夫です。セルの表示形式を「日付」に変えるだけで日付になります。

  • 対象セルを選択
  • Ctrl + 1 で「セルの書式設定」を開く
  • 「日付」を選ぶ(「短い日付」か「長い日付」で表記を選べます)→ OK

あとは数式を下方向にコピーすれば、必要な件数だけ一気に生成できます。

開始日・終了日をセル参照にすると便利

期間を頻繁に変えるなら、開始日と終了日をセルに入力しておくと管理が楽になります。

=RANDBETWEEN($B$1, $B$2)

B1に開始日、B2に終了日を入れておけば、数式を書き換えずに期間を調整できます。$で絶対参照にしておくのがポイントです。

応用①:平日(月〜金)のみをランダム生成する

勤怠データや営業日ベースのサンプルでは、「土日を除いた平日だけ」が欲しくなります。ここで役立つのが WORKDAY関数 です。基準日から指定した営業日数だけ進んだ日付を返し、土日を自動でスキップしてくれます。

=WORKDAY($B$1, RANDBETWEEN(0, 260))

これは「B1(開始日)から、0〜260営業日後のどこか」をランダムに返す数式です。260はおよそ1年間の営業日数なので、期間に合わせて調整してください。

なお、この数式は各セルが独立して乱数を返すため、平日でも同じ日付が重複することがあります。「平日かつ重複なし」を両立したい場合は、後述の重複なしの手法で候補を「平日だけ」に絞ってから抜き取ってください。

祝日も除外したい場合

WORKDAY関数は第3引数に「祝日リスト」を渡せます。祝日をどこかのセル範囲に入力しておき、こう書きます。

=WORKDAY($B$1, RANDBETWEEN(0, 260), $D$1:$D$20)

D列に祝日を並べておけば、土日+祝日を除いた「純粋な稼働日」だけがランダムに生成されます。

応用②:重複しないランダムな日付を作る

RANDBETWEENは各セルが独立して乱数を返すため、件数が多いと同じ日付が混ざります。「重複なし」を実現するには少し工夫が必要です。

方法A:連続する日付をシャッフルする

最も確実なのは、「候補の日付をすべて並べて、ランダムに並び替えて上から必要数を取る」方法です。原理的に重複が発生しません。

  1. A列に開始日から連続した日付を入力(オートフィルでOK)
  2. B列に =RAND() を入力
  3. B列(乱数)を基準にデータ全体を並べ替え
  4. 上からN件を採用

RAND() は0〜1のランダムな小数を返すので、これを並べ替えキーにすればシャッフルできます。

方法B:Microsoft 365ならSORTBYで一発

最新のExcel(Microsoft 365)なら、スピル機能で一気に片付きます。

=SORTBY(SEQUENCE(30,1,DATE(2026,1,1)), RANDARRAY(30))
  • SEQUENCE(30,1,開始日) … 開始日から連続30日分を生成
  • RANDARRAY(30) … 30個のランダム値
  • SORTBY … 乱数順に並び替え

ここで注意点があります。この数式は「連続する30日」をシャッフルしているだけで、たとえば「1年間からランダムに30件」を選んでいるわけではありません。広い期間から重複なしで抜き取りたいときは、SEQUENCE の日数を期間分まで広げ(例:1年なら SEQUENCE(365,1,開始日))、SORTBY で並び替えたうえで上からN件だけ採用してください。ここを勘違いすると期間を広げられず詰まりがちなので、必ず候補日数を先に広げるのがコツです。

知っておきたい注意点:再計算で値が変わる

RANDBETWEENやRAND、RANDARRAYは 揮発性関数 と呼ばれ、シートを編集するたびに値が再計算されて変わってしまいます。生成した日付を固定したいときは、「値のみ貼り付け」に変換しましょう。

  • 対象範囲をコピー(Ctrl + C)
  • 同じ場所で右クリック →「値の貼り付け」
  • または Ctrl + Alt + V → 「値」を選択

これで数式が消え、日付が固定されます。ダミーデータとして配布・保存する前には必ず実行しておきましょう。

まとめ:どれを使えばいい?

用途に応じて、次の判断基準で選べば迷いません。

  • 少量を手早く作りたい → RANDBETWEEN(開始日, 終了日) +日付の表示形式
  • 営業日ベースで作りたい → WORKDAY と組み合わせ(祝日リストも渡せる)
  • 重複NG・365あり → SORTBY + RANDARRAY(候補日数は期間分まで広げる)
  • 重複NG・365なし → A列に連続日付+RAND()で並べ替え
  • 仕上げ → 値貼り付けで固定して変動を防ぐ

用途に合わせて使い分ければ、リアルなテストデータがあっという間に用意できます。まずは基本の数式から、ぜひ試してみてください。


関連記事

あわせてチェック