リストから表に変換(Excel)

社員から色々と相談を受けます。

社員「この縦に並んだ日付を横に並べたいんだけど、どーしたらいい?」

今回はこんなExcelでした。

画像1

社員名に対し、縦に日付が並んでいます。1人最大5日間ありました。
最終的にはこんな風に、縦に社員名、その日付を横に並べたいとの事。

画像5

それではいってみましょう

色々なやり方があると思います。「関数を組み合わせてこんな風にやれば出来るんだ」と言う観点で見ていただきたいです。1つ1つの関数の詳しい説明は、他のサイトをご参照下さい(スミマセン)
私の場合は、まずはB列とC列の間に2列挿入して、関数を組み込みます。

画像3

①では2列挿入して列名を付けました。C列に「カウント」、D列に「氏名+カウント」です。

【②の解説】
②はC列「カウント」の式についてですが、「氏名」の数をカウントしています。ちなみに、前提として、並び替えをして氏名がかたまって並んでいるものとしています。並び順はどんな順でもOKです。
セルC2の式は「=IF(B2=B1,C1+1,1)」です。IF関数ですので、IF(ア=イ,ウ,エ)の形となり、ア=イならウ、それ以外はエと言う意味ですね。ここでは、セルB2とセルB1が同じならセルC1に1を足しなさい。それ以外は1にしなさい、となっています。(←ここがミソ)
つまり、式を書き込んでいるのがセルC2なので、隣のセルB2とその上のセルB1が同じ値かを確認しています。今回で言うと、セルB2は氏名「甲斐 比呂」、その上のセルB1は列名の「氏名」なので、B2=B1ではないので、IF(ア=イ,ウ,エ)のエの部分となり「1」となりますね。
そして、セルC2をC列全てにコピーすると、例えばセルC3では、「=IF(B3=B2,C2+1,1)」と言う式になります。同じように見ていくと、セルC3の隣のセルB3は「甲斐 比呂」、セルB2も「甲斐 比呂」なので、IF(ア=イ,ウ,エ)のウの部分となり、「=IF(B3=B2,C2+1,1)」の「C2+1」となり、セルC2は1でしたので、1+1=2ですね!このように同じ氏名の時は連番となり、次の氏名になるとまた1からスタートする形です。

【③の解説】
③は簡単です。列名にも「氏名+カウント」と書いている通り、セルD2の式は「=B2&C2」です。単純にセルB2とセルC2の文字列を&で繋いでいるだけです。それをD列全てにコピーしています。つまり、「氏名」と先ほど導いた1~5の数字がくっついて、「甲斐 比呂1」「甲斐 比呂2」「甲斐 比呂3」・・・と言う感じになりますね。

ここまでで下準備ができた感じです。
続けて、横に並び変える別シートを準備して、式を書き込みます。Sheet2を作成しました。

画像4

縦に氏名、横に最大5日間なので、1~5の数字を書きました。1~5は先ほど設定した「氏名+カウント」の「カウント」に使います。
ちなみに、縦の氏名は、Excelの「重複の削除」機能で簡単に作れます。(ご存じない方は「Excel」「重複の削除」でググってみて下さい)
そして、セルB2に式を書いていきます。セルB2に書いた式は、「=IFERROR(VLOOKUP($A2&B$1,Sheet1!$D:$E,2,FALSE),"")」です。長そうですがよく使う関数の組み合わせです。

【④の解説】
「=IFERROR(VLOOKUP($A2&B$1,Sheet1!$D:$E,2,FALSE),"")」は、2つの関数が合わさっているだけです。1つはIFERROR関数、もう1つはVLOOKUP関数です。まずはVLOOKUP関数からみていきますが、VLOOKUP関数は慣れていない方には少しとっつきにくい関数ですよね。。。簡潔な説明しか書いていませんので、詳しい理解はググってみて下さい(スミマセン)「VLOOKUP($A2&B$1,Sheet1!$D:$E,2,FALSE)」の部分をみていくと、「VLOOKUP(ア,イ,ウ,エ)」となっており、「アが、イの範囲内の左列でヒットしたら、左からウ列目の値をもってきなさい」と言う関数です。最後のエは、そのヒットが「部分一致」かどうかです。
まずは、アの部分の「$A2&B$1」は、セルA2「氏名」とセルB1「1」を&で繋いでるだけですね。「氏名1」となります。イの部分の「Sheet1!$D:$E」は、Sheet1のD列とE列なので、D列の「氏名+カウント」とE列の「日付」。ウは「2」だから2列目、エは「FALSE」だから完全一致。
そして、IFERROR関数は「IFERROR(カ,キ)」とした時に、カがエラーならキと言う式ですね。今回でいくと、IFERROR(VLOOKUP関数,””」となるので、VLOOKUP関数がエラーの時に空白にしなさいとなります。
つまり、「氏名1」がヒットしらたその隣の日付を持ってきなさい。ヒットしないなら空白にしなさい。と言う式が完成します。この式を表全体にコピーすると完成します。ちなみに、セルC2は「=IFERROR(VLOOKUP($A2&C$1,Sheet1!$D:$E,2,FALSE),"")」となり、アの部分は「$A2&C$1」なので、「氏名」&「2」となります。「氏名+カウント」を作っているのが分かりますね。

画像5

これで、各社員名に対して、横に日付が並びました。
いかがでしたでしょうか。もし、ご質問ございましたらコメント欄か下記のお問い合わせよりご連絡下さいませ。

この記事がどなたかの参考になれましたら幸いです。
また近々投稿したいと思います。
最後まで読んでいただき誠にありがとうございました。

この記事が気に入ったらサポートをしてみませんか?