はじめに
以前、以下の記事を公開しました。
今回は、データを作成するにあたってランダムに数値を、その数値に併せて文字列のデータを生成する方法をご紹介します。
SQLでデータベースに投入する(いつもながら膨大な)検証データを作成中に、
「条件によって"数値"と"文字列"のデータを該当カラムに割り当てたいなあ、量が多いから直打ちの値のコピペじゃまかなえないや」
と思い、私なりに試行錯誤しながら実現させました。
使用するExcel関数
まず背景ですが、私は該当の複数カラムにてデータを紐づける必要があったので、今回ご紹介する構文になりました。
- 業務形態によって部署コード、部署名が異なる
- 同じ業務形態の中でも複数部署が存在するため、適当に割り当てる必要がある
gyomu_cd | gyomu_name | busyo_cd | busyo_name |
---|---|---|---|
1 | 本社 | 1 | 営業部 |
1 | 本社 | 2 | 管理部 |
1 | 本社 | 3 | 採用部 |
2 | 現場 | 4 | 開発部 |
3 | 海外 | 5 | 海外事業部 |
"業務形態 = 1"の中に複数の部署があるので、「"業務形態 = 1"ならこの部署!」にできないんですよね。
こちらを実現させるのに、私は以下のExcel関数を使用しデータを作成しました。
- IF関数
- IFS関数
- RAND関数
■ 適切かつランダムに"数値"を割り当てる
D列に以下を入力
=IF(B3=1,IFS(RAND()*3<1,"1",RAND()*3<2,"2",RAND()*3<3,"3"),IF(B3=2,4,5))
"業務形態 = 1"のときは、RAND関数を使用して"1", "2", "3"を生成し、"業務形態 = 2"のときは1つ目のIF文のfalse、"業務形態 = 3"のときは2つ目のIF文のfalseのところに入れました。
■ 数値に対応した"文字列"を割り当てる
E列に以下を入力
=IFS(D3=1,"営業部", D3=2,"管理部", D3=3,"採用部", D3=4,"開発部", D3=5,"海外事業部")
または、
=IF(D3=1,"営業部",(IF(D3=2,"管理部",(IF(D3=3,"採用部",(IF(D3=4,"開発部",IF(D3=5,"海外事業部"))))))))
今回、部署が5つでIF文にすると可読性が低くなってしまうので、IFS関数を使用しました。
部署コードが関数のままだと、RAND関数を使用している影響で部署コードが"1", "2", "3"のとき"#N/Aエラー"となり部署名が正しく反映されないので、値貼り付け後部署コードのマークをクリックし、"数値に変換する"で部署名を取得します。
※RAND関数については、『【SQL】膨大なINSERT文をとにかく楽して生成したい』にて説明したので、割愛させていただきます。
▼ IFS関数
=IFS(論理式1, true1, 論理式2, true2, 論理式3, true3)
"論理式1"が真なら"true1"の値、論理式1が偽で"論理式2"が真なら"true2"の値を返します。
IF関数を入れ子にするのと同等ですが、IFS関数は複数条件を順に指定することができます。
▼ IF関数
=IF(論理式, true, false)
こちらはみなさん使用することが多いかと思います。
条件が1つや2つの場合は、IF関数でもシンプルにまとまります。
最後に
今回は、ランダムに数値と文字列のデータを作成する方法をご紹介いたしました。
もっと良い方法があるかもしれないですが、効率化をつきつめて自分で実現できたときってすごく気持ちいいですよね。
最後までお読みいただき、ありがとうございました