森川です。paizaではマーケティングを担当しております。
エンジニアでも非エンジニアでも、今や社会人の基本スキルのひとつといえるExcel。とはいえ、「Excelのことなら何でも聞いて!」というレベルの方は少数かと思います。「Excelではほぼ四則演算くらいしかやっていない……」という方も多いのではないでしょうか。
Excelは使いこなせれば非常に便利なツールです。ちょっとしたアプリレベルのことであれば、Excel内で完結させることも可能です。しかも日頃からExcelに触れている人なら、わざわざアプリを自作するよりもスキルの習得時間も圧倒的に短いです。「しっかりとプログラミングスキルが必要とされるほど業務では使わないが、簡単な処理は自分で解決したい、自動化したい」という方はExcelのスキルを上げるのが有効です。
プログラミング問題をExcelで解いてスキルアップ
Excelのスキルアップにおすすめなのが、Excelを駆使してプログラミング問題を解くこと。頭の体操のように問題を解きながらスキルアップできます。
というわけでこの記事では、プログラミング問題に挑戦する形で、Excelを使いこなす技をご紹介していきます。一問ずつ、模範解答も合わせてご紹介していきますので、ご自身のExcelスキルを判定しつつ、スキルアップのヒントにしていただければと思います。
ルール
「Excelでプログラミング問題を解くってどういうこと?」と思った方もいると思いますがルールは簡単で、守ることは1つだけ。
入力値を入れるセルと答えを出すセルを決め、入力値欄に数値を入れたときに、答え欄に、演算結果が出るようにする。
たったこれだけ。その他は自由です!答えに至るまでの式やメモ書き、セルの操作など、なんでもしてOK。
関数をたくさん知っているかに加えて、それらを組み合わせて答えを導き出すためには頭の柔軟性も試されます。
なお、「自分はプログラミングで挑戦するぞー!」という方は、Pythonで解き方を解説している記事がありますのでこちらを読んでみてください!
paiza.hatenablog.com
問1:場合分け
ではさっそくExcelで問題を解いてみましょう!
今回は、話題の新作ゲーム「エンジニア騎士とクエリの魔女」のコード問題を実際にExcelを使って解いてみました。
Excelで解答する場合の難易度:★☆☆☆☆
プログラミング難易度:Dランク相当
↓↓解答例はスクロールすると見られます↓↓
Excel解答例
緑色のセルは入力値の欄、オレンジ色のセルには解答が表示されるように式を入れています。
式にはIF関数を2つ使いました。
入力値が0以下の場合のIF文、さらに0以下ではなかったときで1以上の場合のIF文を入れています。
問2:繰り返し
続いて第2問!
Excel難易度:★★☆☆☆
プログラミング難易度:Dランク相当
↓↓解答例はスクロールすると見られます↓↓
Excel解答例
緑色のセルは入力値の欄、オレンジ色のセルは解答が表示されるように式を入れています。
文字列を指定した回数だけ繰り返すREPT関数を使いました。
繰り返したい文字列(今回はhello)を式に直接入力するときには「””」マークで囲ってくださいね。
問3:集計
続いて第3問!
Excel難易度:★★★☆☆
プログラミング難易度:Cランク相当
※問題文が長くなってきて、画像内の文字が小さくなってしまって読みづらいかもしれません。その場合は実際にゲームをプレイしてご確認ください。
その日のコーヒーの値段と注文されたサイズが与えられるので、その日の合計売上を出力する問題です。詳しい条件などはサイト上の問題文を読んでみてください。
↓↓解答例はスクロールすると見られます↓↓
Excel解答例
こちらも緑色のセルは入力値の欄、オレンジ色のセルは解答が表示されるように式を入れています。
「その日の売上の合計を出力せよ」とのことなので、それぞれのサイズの値段を入力する欄(D2〜D4セル)と注文されたサイズの入力欄を作りました(G列の緑色セル部分)。
また、問題文より、「SSサイズはSサイズの半分の値段」、「LLサイズはLサイズの2倍の値段」とのことなので、SS・LLそれぞれの値段欄を設け、SS(D5セル)は÷2、LL(D6セル)は×2となるよう式を入れています。
次に、注文されたサイズの隣(H列)に値段を算出する式を入れます。
XLOOKUP関数(もしくはVLOOKUP関数でもOK)を使って値段をC〜D列から参照します。
H列すべてがその日の売上なので、最後にSUM関数を使ってH列をすべて足し上げれば答えが出ます!(K列)
問4:総合問題
そして最終問題はこちら!
Excel難易度:★★★★☆
プログラミング難易度:Bランク相当
※問題文が読みづらい場合は実際のゲーム画面上でご確認ください。
↓↓解答例はスクロールすると見られます↓↓
Excel解答例
まず、これまでのように入力欄(緑色セル)を作り、数値を入力します。
今回は、子どもの人数・一番左端の子が持っている飴の数・全員が答えた飴の数 の値が与えられます。
次に、子どもたちがそれぞれ何個持っているかについて、式を入力して算出します。
左端の子は入力値が与えられているため、それを参照しましょう(G2のセルに「=B3」と入力)。
左から2番目の子は、その子が答えた数(E3セル)から左端が持っている数(G2セル)を引くと算出できるため、そのような式を入れています(=E3-G2)。
では左から3番目の子はいくつ持っているでしょうか?
左から2番目の子が答えた数(E3セル)は、実際に左端の子が持っている数(G2セル)+2番目の子が持っている数(H3セル)+3番目の子が持っている数 で成り立っているため、E3-G2-G3をすれば算出できます。SUM関数を使ってE3-SUM(G2:G3)でも構いません。
また、この式は左から4番目以降の子にも使えるのでH1001セルあたりまでコピペしておけば完璧です。(人数は最大1000人と問題文の条件に書いてあるので。)
なお、入力例1では5人しかいない設定なのに、6人目〜1000人目の子供が持っている数も表示されていますが、ここはいったん無視しておきましょう。
さて、ここまでで一人ひとりが持っている数が判明しました(G列)。
最後に「それぞれの子供が持っている飴の数を半角スペース区切りで出力せよ」と問題文の「期待する出力」に書いてあるため、ここからもう一工夫が必要です。
【子供がいる人数分のみ、半角スペースを入れて出力する】という点に気をつけて進めていきます。
まず、持っている数(G列)の横に連番を振っておきます。
連番はROW関数を使い、J2セルには「1」、J3セルには「2」・・・と表示させるようにしました。
次に、M列に下書き用の欄を用意します。
先ほど、入力例1では5人しかいない設定なのに、6人目以降も何らかの数値が入っていると書きましたが、解答で出力したいのは5人目までです。
なので、M列には、こんなIF関数を入れます。
もし人数(B2セル)が5人目までならG列の持っている数はそのまま出力し、5人を超えるようなら何も出力しない、という式を入れます。=IF($B$2>=$J2, G2,””) でできます。
次に、2人目以降の場合も、もし人数(B2セル)が5人目までなら、半角スペース+G列の持っている数を出力し、5人を超えるようなら何も出力しないように式を入れます。=IF($B$2>=$J3, “ “&G3,””)
このように式を入れると、5人を超えた部分には何も表示されずに済みました。
最後に、(これは自分でもあまり美しくないやり方だなと思うのですが)M列の上から一つずつ「&」でつないで結合させれば完了です!
エンジニア騎士とクエリの魔女公開中です!
ここで、問題を引用したゲームについてご紹介させてください。
paizaは先日「エンジニア騎士とクエリの魔女」を公開しました。
異世界に勇者パーティーとして召喚された新人ITエンジニアの男女。
目覚めるとそこは、剣(コード)と魔法(SQL)が支配する世界だった。
騎士と魔法使いの冒険が、今始まる――
Python、PHP、JavaScript、C言語、Javaなど28言語で遊べるプログラミングゲームです。SQLを使って解く問題も公開中なので、学習したい方にもおすすめです。
あなたのプログラミング&SQLのスキルを解き放って異世界に平和をもたらしてください!!
終わりに
みなさんは何問解けましたか?
「解答例よりシンプルに書けた!」という方はぜひコメント欄やTwitterで教えてください!
「簡単だった」「難しすぎた」などのご感想もぜひぜひお聞かせください。
すでにExcelの関数を使いこなせる人は、マクロを使ってさらに高度な処理を組み立てることに挑戦するのもいいでしょう。
さらに、Excelのスキルアップをきっかけにプログラミングでも問題を解いてみたいと思った方は、どうやったらExcelでの挙動をプログラミングに落とし込めるかを考えながら、ぜひプログラミング問題に挑戦してみてください。
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら