【INDEX関数】横に並んだデータを縦に並べ替える方法

関数教室
新任
新任

名簿を作りたくて先輩から元データをもらったのですが、名前が横に並んでいてマジ使いづらいです…。

人事のプロ
人事のプロ

それはセンスないわね。
人に紐づくデータなら、名前は縦に並んでいるべきよね
それじゃVLOOKUPでデータを追加したり、抜け漏れの確認もできない。

新任
新任

やっぱ縦一列に並べないと色々と不便なので、地道にコピペ作業しようと思います…。

人事のプロ
人事のプロ

いやいや、そんな大量のデータ、人力でやったらミスが起きるし、そもそも時間の無駄!
こういう時はINDEX関数で自動的に整列させましょう

新任
新任

INDEXって、聞いたことはあるんですけど、何度説明を聞いてもよく分からないんですよね(笑)

人事のプロ
人事のプロ

この関数は、説明文を読んでも使用イメージ沸かないランキングNo.1だから。
具体的にどういう問題を解決できるのか知ることで理解も深まると思うので、見ていきましょう!

この記事を読んだら
  • INDEX関数を活用して、横方向に並んでいるデータを縦に並べ替えることができる
    • 人力によるセルのコピペ作業がなくなる
    • 本来やりたかった業務に時間を割けるようになる

INDEX関数の概要

皆さんは、INDEXという関数をご存知でしょうか?

聞いたことはあっても「なんかMATCH関数と一緒に使う、アレだよね…。」という感じではないでしょうか。(【INDEX/MATCH関数】並びが変わっても項目名で検索してデータ抽出する方法

概要は以下の通りですが、読んでもよく分からないと思うので、先に事例をご覧下さい。

INDEX関数
  • 参照範囲の中で「●行目の▲列目」と住所を特定して、その位置にあるセルの値(文字列や数値)を抽出する

=index(参照範囲,行番号,列番号)

基礎的な活用事例

まずは簡単な事例で見ていきましょう。

以下のデータを、縦に「インデックス」と並べてみます

1行目のA-C列に「インデ」、2行目のA-C列に「ックス」と入力されているシート

手順①:参照範囲を指定する(基礎編)

=index(参照範囲,行番号,列番号)

まずはINDEX関数参照範囲を指定します。

ここでは値が入力されている範囲、A1:C2を指定し、A1→B1→C1→A2→B2→C2の順番で縦に並ぶようにします。

1行目のA-C列に「インデ」、2行目のA-C列に「ックス」と入力されているシート

INDEX関数は、参照範囲の中で「●行目の▲列目」と指定するので、「イ」なら「1 , 1」、「ン」なら「1 , 2」、「ス」なら「2 , 3」になります。

新任
新任

え、これ手で入力するんですか?!

人事のプロ
人事のプロ

それじゃ関数のメリットがないでしょ。

規則性があるわけだから、行番号・列番号が機械的に入力されるように工夫するのよ。

ここから下準備を行うので、まだINDEX関数は入力しません。

手順②:行の連番を作る(基礎編)

=index(参照範囲,行番号,列番号)

C7セルから縦に「インデックス」と並べる場合は、A7セルから以下のように行の連番を作ります。

キャプチャの色を見れば分かりやすいかと思いますが、イ(1行目)ン(1行目)デ(1行目)ッ(2行目)ク(2行目)ス(2行目)、と対応しています。

行の連番を入力

以下のように、行の変わり目では開始行のセルに+1して、数式を下にコピーすれば良いので、行数が多くても問題ありません。

行の連番を入力

手順③:列の連番を作る(基礎編)

=index(参照範囲,行番号,列番号)

列の連番は、隣のB7セルから以下のように作ります。

イ(1列目)ン(2列目)デ(3列目)ッ(1列目)ク(2列目)ス(3列目)、と対応しています。

列の連番を入力

列の連番は少し分かりづらいのですが、「行が変わったら繰り返す」と覚えましょう。

以下のように、行の変わり目では開始行をイコールで参照して、数式を下にコピーします。

列の連番を入力

手順④:INDEX関数を入力する(基礎編)

=index(参照範囲,行番号,列番号)

下準備が整ったので、C7セルからINDEX関数を入力すると、以下のようになります。

「イ」なら「1 , 1」、「ン」なら「1 , 2」、「ス」なら「2 , 3」という住所を、セル参照で指定している状態です。

INDEX関数を入力

この発想があれば、もし横に展開されているデータベースに直面しても、難なく対処できるはずなので、是非ご活用下さい。

新任
新任

そうそう、まさにこれをやりたかったのですが、検索しても「そうじゃないんだよ!」っていうものばかりで…助かりました!

人事のプロ
人事のプロ

調べると転置貼付TRANSPOSE関数がヒットするけど、行と列がまるっと入れ替わるだけなので複数行には対応できないのよね。

INDEX関数にはこういう使い道もあるのだと覚えておいて!

実践的な活用事例

実践で活用できるように、もう1つ事例を紹介します。

以下のデータベースから、名前とチーム名をそれぞれ抜き出して、縦に並べてみます

B列にチーム名、C列から3列ずつメンバーの情報があり、4人目のN列で折り返し、という形式であることが分かります。

完成形は、高橋みなみ→篠田麻里子→  …  →山内鈴蘭 という順番で並ぶイメージです。

AKB48メンバーのデータベース

手順①:参照範囲を指定する(実践編)

=index(参照範囲,行番号,列番号)

INDEX関数参照範囲は、B4:N10を指定します。

3行目の項目名を含めない理由は、参照範囲の1行目とINDEXで縦に並べた時の1行目(高橋みなみ)が揃っていた方が分かりやすいためです。

AKB48メンバーのデータベース

但し、MATCH関数と組み合わせて項目名で検索する場合は、「その範囲内で何番目」という定義がINDEX関数とMATCH関数でずれていると正しく抽出できないため、参照範囲に項目名も含めるようにします。(詳しくはこちら

手順②:行の連番を作る(実践編)

=index(参照範囲,行番号,列番号)

下の空いているスペース、B13セルから以下のように行の連番を作ります。

抽出したい「名前」項目は、1行あたり4つ並んでいるので、まず縦に1を4つ入力します。(「チーム名」項目については後述)

行の変わり目では開始行のセルに+1して、数式を下にコピーします。

すると、4行ずつ連番を作ることができます。

行の連番を入力

手順③:列の連番を作る(実践編)

=index(参照範囲,行番号,列番号)

列の連番は、隣のC13セルから以下のように作ります。

抽出したい「名前」項目は、各行の3,6,9,12列目にあるので、縦に3,6,9,12と順番に入力します。(「チーム名」項目については後述)

行の変わり目では開始行をイコールで参照して、数式を下にコピーします。

列の連番を入力

手順④:INDEX関数を入力する(実践編)

=index(参照範囲,行番号,列番号)

D13セルからINDEX関数を入力し、行の連番・列の連番を参照すると、以下のようになります。

B4:N10という範囲の中で、1行目の3列目は高橋みなみ、3行目の6列目は大島優子、といった指示を順番に出しているイメージです。

INDEX関数を入力

メンバーの名前を縦に並べることはできましたが、それぞれのチーム名を隣に持ってくるにはどうすれば良いでしょうか。

答えは簡単で、名前を抽出するために入力したD13セルの数式の列番号を1に固定するだけでOKです。

なぜなら、データベースには1行あたり4人のメンバーがいて、それぞれにB列(1列目)のチーム名を割り振れば良いからです。

具体的には、1行目の1列目を4人分→2行目の1列目を4人分→… というのを繰り返すことで、名前とチーム名を対応させることができます。

INDEX関数を入力

以下が完成形です。

データベースの空欄も抽出されているので、名前を空欄以外でフィルタします。

名前とチーム名が縦に整列

以上、横方向に並んでいるデータを縦に並べ替える方法について解説しました。

INDEX関数を活用するのは意外だったかもしれませんが、これならデータベースの大きさに関わらず数分で対応することができます。

また、このようにデータを縦に並べた後、他のデータと突き合わせて一致確認する場合は、こちらの記事を参考にして下さい。

タイトルとURLをコピーしました