EXCELのYouTube始めました!

EXCEL初心者に向けたYouTubeチャンネルを開始しました(^^)/
ぜひチャンネル登録よろしくお願いします!

効率よくエクセルを学ぶ!
スポンサーリンク

【Excel】エクセルで重複を抽出し横に並べる方法【同じ文字を横に並べる:縦持ちと横持ちの変換】

Excelのスキルアップ

エクセルはデータ解析・管理を行うツールとして非常に機能が高く、上手く使いこなせると業務を大幅に効率化できるため、その扱いに慣れておくといいです。

ただ機能が充実しているあまり初心者にとっては処理方法がよくわからないことも多いといえます。

例えばエクセルで重複を抽出し横に並べる方法(縦持ちと横持ちの変換:同じ文字を横に並べる)を理解していますか。

ここではエクセルで重複を抽出し横に並べる(横持ちと縦持ちの変換)方法について解説していきます。

スポンサーリンク

エクセルで重複を抽出し横に並べる方法【同じ文字を横に並べる:横持ちと縦持ちの変換】

 下記の表(左)は路線毎に駅名を縦に並べたリストですが、右の表のように路線が重複しないよう抽出し、路線毎に駅名を横方向に並べる方法について説明します。

 

① A、B、C列に計算式を入力していきます。

 

・A2セルは数字の「1」を入力。

・A3セルに下記の式を入力して、下方向にA29セルまでコピーします。

「=IF(COUNTIF($D$2:D3,D3)=1,MAX($A$2:A2)+1,INDEX($A$2:A2,MATCH(D3,$D$2:D2,0),1))」

COUNTIF関数で、D列の2行目セルから現在の行までの間で同じ路線がいくつあるかカウントし、現在の行の路線が1個目(初回の出現)の場合はA列の最大値+1を返します。

現在の行の路線が2個目(2回目)以上の場合は、D列の2行目から現在の行の一つ前の行までの間での位置を探し、同じ行にあるA列の値を返します。

以上の式により、路線の重複を抽出し、路線毎に固有な番号を与えています。

 

・B2セルに下記の式を入力して、下方向にB29セルまでコピーします。

「=COUNTIF($D$2:D2,D2)」

上記の説明と重複しますが、D列の2行目から現在の行までの間で同じ路線がいくつあるかをカウントしています。同じ路線の駅名に路線の中での連番を付与しています。

 

・C2セルに下記の式を入力し、下方向にC29セルまでコピーします。

「=A2&B2」

路線の固有番号(重複なし)と路線内での駅名の連番を&で結合することで、「路線+駅名」に対してユニーク(固有)な番号を付与しています。

これで重複を抽出し横に並べる(同じ文字を横に並べる)第1ステップは終了です。

 

② 続いてH列に路線、I~M列に路線毎の駅名を抽出する為、G〜M列に計算式を入力していきます。

・G2セルに式「=A2」または数字の「1」を入力します。

・G3セルに下記の式を入力して、下方向にG12セルまでコピーします。

「=G2+1」

 

・H2セルに下記の式を入力し、下方向にH12セルまでコピーします。

「=IF(ISNA(VLOOKUP(G2,$A$2:$D$29,4,0)),””,VLOOKUP(G2,$A$2:$D$29,4,0))」

G列と一致する値をA列の2~29行から探し、一致するA列と同じ行のD列の値(路線)を取得します(一致する値がみつからない場合は空白を返します)。

 

・I2セルに下記の式を入力し、下方向に12行目まで、右方向にM列までコピーします。

「=IF(ISNA(VLOOKUP($G2&COLUMN()-8,$C$2:$E$29,3,0)),””,VLOOKUP($G2&COLUMN()-8,$C$2:$E$29,3,0))」

「COLUMN()-8」でI~M列に対応した「1~5」の値が得られるので、G列の値と結合することで「路線+駅名」の固有の番号が生成されます。この値と一致する値をC列の2~29行から探し、一致するC列と同じ行のE列の値(駅名)を取得します(一致する値がみつからない場合は空白を返します)。

 

このようにして路線毎の駅名を横並びで抽出する(重複を抽出し横に並べる)ことができました。

データ数が増えても、参照範囲を調整して式をコピーしていけば同じ文字を横に並べることが可能です。

ちなみに今回の重複を抽出し横に並べる(同じ文字を横に並べる)方法にて使用した関数の書式、使い方の基本は以下の通りとなります。

・IF関数:IF(条件、条件を満たす場合の処理、条件を満たさなかった場合の処理)
→条件を満たす場合と、満たさない場合で処理を変える時に使用します。

・COUNTIF関数:COUNTIF(範囲、検索条件)
範囲の中で検索条件と一致するセルの数をカウントします。

・INDEX関数:INDEX(範囲、行位置、列位置)
→範囲の中で上からN行目(行位置)、左へN列目(列位置)の位置にあるセルの値を取得します。

・MATCH関数:MATCH(検索値、範囲、照合の型)
範囲の中で検索値の位置(上から数えて何番目か)を取得します。

・COLUMN()関数
現在のセルの列番号を取得します。

・VLOOKUP関数:VLOOKUP(検索値、範囲、列番号、[検索の型])
→検索値と範囲の左端列の値を比較し、一致する行のN列(列番号)右に位置するセルの値を取得します(検索の型は通常「0」(完全一致)を指定することが多い)。

・ISNA関数:ISNA(式)
→式の計算結果が#N/Aの場合にTRUEを、それ以外の場合はFALSEを返します。

・数式で利用する「&」演算子
→文字列を結合します。「1+1」=2(数値)ですが、「1&1」は文字列の11(文字列)になります。

・範囲を「$A$1:A1」等の指定する
→関数の中で、範囲に「$A$1:A1」等の指定をすると、範囲の開始位置(A1セル)を固定し、終了位置を現在のセル位置に応じて相対的に変化させることができます。

 

エクセルにて縦のデータを横に並べる方法【数式にて横にコピー】

Office365(Microsoft 365)から導入された関数を利用すると、より簡単に縦のデータを横に並べる(重複を抽出し横に並べる)ことができます(現状ではOffice365以外のエクセルではサポートされていません)。

*Office365は、ソフトのライセンスを購入する販売形式(買取型)ではなく、月額使用料を支払うスタイルで提供されており(サブスクリプション型)、常に最新の状態のエクセルを使用することができます。

Office365固有の関数を使って縦のデータを横に並べる方法について説明していきます。

・D2セルに下記の式を入力します。

「=UNIQUE(A2:A29)」

指定した範囲から重複しない値を取り出す関数ですが、D2セルに式を入力するだけで、D3~D12セルに自動的に結果が反映されます。

 

・E2セルに下記の式を入力します。

「=TRANSPOSE(FILTER($B$2:$B$29,$A$2:$A$29=D2))」

FILTER関数で指定した範囲(駅名:B2~B29)から条件(A列の路線とD列の路線が一致する)を満たす行の値を取り出し、TRANSPOSE関数で横並びに変換しています。

 

・E2セルの式を下方向にE12セルまでコピーします。

路線毎の駅名を横並びで抽出する(重複を抽出し横に並べる)ことができました。

 

 

縦のデータを横に並べる(同じ文字を横に並べる)にあたり使用した関数は下記の通りとなります。

・UNIQUE関数:UNIQUE(配列) 配列から重複しない値を抽出
・TRANSPOSE関数:TRANSPOSE(配列) 行列を入れ替える
・FILTER関数:FILTER(配列,フィルター条件) 配列から条件に合うデータを抽出

 

まとめ エクセルにて縦のデータを横に並べる(同じ文字を横に並べる)方法

ここでは、エクセルにて重複を抽出し横に並べる(同じ文字を横に並べる)方法について確認しました。

同じ文字を横に並べる(縦のデータを横に並べる)には通常のエクセルにて上のよう複数の関数を組み合わせて使うか、Office365にて処理するといいです。

エクセルでのさまざまな処理に慣れ、日々の業務を効率化させていきましょう。

コメント

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