2/22/2021

Excel。結合したセルの値をまとめた一覧表を作りたいけど、コピペじゃ大変なんです。【Merged cells】

Excel。結合したセルの値をまとめた一覧表を作りたいけど、コピペじゃ大変なんです。

<ROW関数・IFERROR+INDEX+SMALL関数>

セルの結合は設定するのが簡単なのですが、結合したセルの値を別のセルにコピーするとか、一覧表を作る場合、意外と大変というか、困ってしまうことがあります。


例えば、次の表のような処理をする場合で、説明していきます。


A列には、セル結合された担当者名が入力されています。

入力規則のリストなどで使うために、D列のように担当者一覧を作りたいとします。


今回は、4名なので、コピー&ペーストでも、どうにかなりますが、件数が多かったらコピー&ペーストでは大変です。


D2に「=A2」というセル参照を設定して、オートフィルで数式をコピーしても、できませんよね。


Excel VBAでマクロをつくってもいいのですが、マクロを作成すること自体も面倒です。


今回のような、結合セルの値から、一覧表をつくるには、ちょっとした関数を組み合わせれば、可能になります。

では、早速作っていきましょう。


C2に、次の数式を設定して、オートフィルで数式をコピーします。


=IF(A2<>"",ROW(A1),"")

このように、算出されます。


数式の説明をします。


縦方向にセルが結合されている場合、結合されている一番上のセルに値が設定されいます。

値が入っているか、どうかを判断したいので、IF関数を使います。


論理式は、「A2<>""」。

A2が空白ではなかったらと、問い合わせます。


真の場合は、「ROW(A1)」。

ROW関数で行番号をつかって、数値を算出させます。


義の場合は、空白 とします。

これによって、値があるセルの場所がわかりました。


続いて、D列にまとめる作業を行います。

D2に次の数式を設定します。

=IFERROR(INDEX($A$2:$A$10,SMALL($C$2:$C$10,ROW(A1))),"")


数式を説明していきます。

IFERROR関数を使うのは、このあと、オートフィルで数式をコピーすると、抽出データがないセルに、「#NUM!」というエラーが表示されるので、その防止のために使います。


INDEX関数をつかうことで、行番号と列番号が交差したデータを抽出することができます。


INDEX関数は、INDEX(参照,行番号,列番号)という引数をもっています。


参照は、担当者名を算出したいわけですから、$A$2:$A$10。

オートフィルで数式をコピーしますので、絶対参照を設定します。


行番号は、

SMALL($C$2:$C$10,ROW(A1))

SMALL関数は、その数値の順位の数値を算出します。


このために、先程のIF関数で算出したわけです。


SMALL関数は、SMALL(配列,順位)という引数をもっています。

配列は、IF関数で算出した範囲の、$C$2:$C$10

絶対参照も忘れずに設定します。


順位は、ROW(A1) A1を指定することで、「1」という数値を算出することができます。

オートフィルで数式をコピーすると、A2・A3とかわることで「2」「3」とスライドすることができます。


列番号は、今回複数列ではないので、省略します。


すると、このような結果になりました。


このように、セル結合した値でも一覧表を作ることができました。


最後に、C列の数値を表示してあると、カッコ悪いので、非表示にしますので、C2:C10を範囲選択して、セルの書式設定ダイアログボックスを表示します。


表示形式の「ユーザー定義」にして、種類に「;;;」(セミコロン×3)と設定します。


これで、文字を非表示することができました。


セルの結合は、見た目としては、便利なのですが、そのあとに、何かしたい場合は、うまくいかないことがありますので、見た目を重視する必要がない場合は、データベースとして表を作る方がいいかと思います。