![見出し画像](https://assets.st-note.com/production/uploads/images/101758754/rectangle_large_type_2_5477da9c851617f3727cad4a2de3dfbc.png?width=1200)
エクセルごはん第5回(ランダムなアルファベットの文字列を作ろう)
こんにちは。
エクセルごはんです。
第5回目になります。
今回もExcel問題を通して、楽しく脳トレしていきましょう。
このnoteは、もしも会社に入社するのにExcelの試験が必要だったら、もしも学校に入学するのにExcelの試験科目があったら、そんな状況を想定して、Excel問題を出題し、読者の皆様のExcel力をゴリゴリ鍛えていこうと思っています。
問題
今回の問題は、ランダムな文字列を作ろうというものです。問題では12文字を想定しています。セルB3に、12文字分のランダムな文字列を作ってみてください。文字は全てアルファベットにしてください。
![](https://assets.st-note.com/img/1680330362082-rPu2GlzQ8c.png)
完成形のイメージは例えば次になります。
![](https://assets.st-note.com/img/1680330371049-K1CNYaxW5l.png)
ランダムなということは乱数を取得する関数の出番になりそうですね。
またアルファベットのAからZまでの文字を表示するには、専用の関数が必要そうです。
そして1文字ではなく、複数文字をランダムに作るには、少し仕掛けが必要そうです。
関数と配列数式を使って解いてみてください。
どうですか?出来ましたか?
問題を今一度おさらいしておきましょう。
![](https://assets.st-note.com/img/1680330413057-py2WHkVod5.png)
12文字のランダムなアルファベットの文字列を作ります。
ランダムなので同じアルファベットが登場するかもしれないし、しないかもしれません。また、同じアルファベットが続くこともあるかもしれません。
どうやって複数文字を作るのでしょうか。
解説
ここからは解説に入ります。
セルB3に、
=CONCAT(CHAR(RANDBETWEEN(IF($A$1:$A$12=$A$1:$A$12,65),90)))
と入力して、CtrlとShiftとEnterキーを押し、配列数式にします。
これで、12文字のランダムなアルファベットの文字列が出来上がりました。
どういう仕組みになっているのか詳しく見ていきましょう。
まず、1文字のランダムなアルファベットを表示することを考えてみましょう。
アルファベットのAは数値コードで65です。アルファベットのZは数値コードで90です。文字の数値コードはCODE関数を使って調べることができます。
適当なセルに、
=CODE("A")
と入力すると65を返します。
適当なセルに、
=CODE("Z")
と入力すると90を返します。
他のアルファベットはどうなっているかですが、この65から90の間に収まっています。
試しに、適当なセルに、
=CONCAT(CHAR(ROW(A65:A90)))
と入力し、CtrlとShiftとEnterキーを押して配列数式にすると、全てのアルファベットが表示されます。
このことからCHAR関数に数値コード65から90を入れてあげれば良いことが分かったので、1文字のランダムなアルファベットを得るためには、
=CHAR(RANDBETWEEN(65,90))
とすれば良いわけです。
さて、では複数のランダムなアルファベット文字を表示するにはどうすれば良いのか。
少し仕掛けが必要になります。
=CONCAT(CHAR(RANDBETWEEN(IF($A$1:$A$12=$A$1:$A$12,65),90)))
とRANDBETWEEN関数の内にIF関数があり、その式に意味はあるのですが、式の中身に意味はありません。
IF($A$1:$A$12=$A$1:$A$12,65)
として、A1からA12の値がA1からA12の値になるなら65を返すという式ですが、絶対なるに決まっていますよね。ここは12回分RANDBETWEEN関数を処理したいので入れている、意味はあるけど意味のない式です。
要は12回分処理できれば良いので、他の、絶対、IF関数の条件が真になる式を入れても大丈夫です。
さて、RANDBETWEEN関数を処理するのに、次の式ではダメなのですが、解答とどう違うか分かりますか?
=CONCAT(IF($A$1:$A$12=$A$1:$A$12,CHAR(RANDBETWEEN(65,90))))
これだとランダムな同じアルファベットが12文字分表示されてしまいます。
RANDBETWEEN関数の外でIF関数を使っても再計算されないわけです。
なので、RANDBETWEEN関数の内でIF関数を使う必要があったのです。これが必要な仕掛けというわけです。
まとめると、
=CONCAT(CHAR(RANDBETWEEN(IF($A$1:$A$12=$A$1:$A$12,65),90)))
として、RANDBETWEEN関数で12回分、65から90までのランダムな値を取得し、それをCHAR関数に入れて文字とし、CONCAT関数で連結して文字列にしています。
おつかれさまでした。
今回の問題の解答ですが、実は別解があるのですが、そちらは次回の類似問題で取り上げます。他の方法が気になる方は、是非、次回の記事も読んでみてください。
次回も配列数式を使った問題になります。
配列数式を使ったさまざまな問題に触れて、配列数式を遊びつくしましょう。
それでは、また次回をお楽しみに。