【アプリ版】サポートOS変更のお知らせ

具体的な内容になりますがエクセル関数につてご教授ください。
B列(名前)とC列(仕様)を、E列(名前)とF列~I列(仕様1,2,3,4)を1行で紐付ける。
画像参照ください。

「エクセル関数について教えてください。」の質問画像
gooドクター

A 回答 (6件)

せっかく Excelを使っているのに手段を数式だけに限定するのはもった


いない話だと思います。

クエリなら「名前でグループ化」→「グループの仕様列を Text.Combine
で結合」→「結合した文字列で列の分割」→読み込む

でおしまいです。

let
S1 = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
S2 = Table.Group(S1, {"名前"}, {{"グループ", each _, type table}}),
S3 = Table.AddColumn(S2, "仕様",
each Text.Combine([グループ][仕様], ",")),
S4 = Table.SplitColumn(S3, "仕様",
Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv),
{"仕様.1", "仕様.2", "仕様.3", "仕様.4"}),
S5 = Table.RemoveColumns(S4,{"グループ"})
in
S5
    • good
    • 1

既に、何人もの方が回答しておられますが、最も低レベルな案も参加させてください。


作業列を使いますので、作業列が使えない場合、この回答は無視してください。
考え方はNo.1さんと同じかも知れませんが、ピボットテーブルと関数を組合わせる方法です。
元の表の右側の列の見出し行に「列見出し」と入力し、その次の行のセル
(添付画像ではD2)に以下の数式を記述し、下方向へコピーします。

="仕様"&COUNTIF($B$2:B2,B2)

すると添付画像①の左側のような表ができます。
この表を基に「A1からD11」をテーブル範囲としてピボットテーブルを作成します。(配置する場所は既存ワークシートとし「L1」を選択しています。)
列に「列見出し」、行に「名前」、値に「No」をそれぞれドラッグ&ドロップし、総合計は表示しない形式にすれば添付画像①の右側のような表が出来上がります。
こまで来るとほぼイメージがつかめると思いますが、表の中の数値は元の表のNoなので、これを「AAA」などに読み替えてやれば、ご質問者の希望の表が出来るというわけです。
任意の位置にピポットテーブルの読替済みの表(以下「読替表」といいます)を表示するため、読替表の左上隅の位置としたいセル(添付画像①ではE2)に、以下の数式を記述し、読替表の左上隅とします。

=IF(L2="","",L2)

これを右方向、下方向へコピーします。
これで、列見出し、行見出しが完成します。
表の中身を表示するため、読替表の左上隅の右斜め下のセル(添付画像①ではF3)に

=IF(M3="","",INDEX($C$2:$C$11,M3))

という数式を記述し、表の中身のセル全てにコピーします。
これで完成です。

ピボットテーブルを作る過程で完成形がイメージし易いこと、データ数が増えて行数が増えても、同じ手順でピボットを作成することで対応できること、読替表はピボットテーブルと連動しているので、ピボットテーブルのソート機能やフィルタ機能がそのまま連動する点(添付画像②参照)がこの方法のメリットで、一方、純粋に横一列並びの表が欲しい方にとっては「面倒でうざい」、「作業列も必要となる」がデメリットかと思います。
「エクセル関数について教えてください。」の回答画像5
    • good
    • 1

Unique関数やFilter関数が使える環境なら、


F1~I1の仕様1~仕様4の代わりに、数値1,2,3,4を入力しておいて、
E2のセルに、
=UNIQUE(B2:B11)
F2のセルに、
=IFERROR(INDEX(FILTER($B$2:$C$11,$B$2:$B$11=$E2,""),F$1,2),"")
F2 を右方および下方にオートフィル
でできあがり
    • good
    • 0
この回答へのお礼

Unique関数が使用出来る環境になりましたらご使用させて頂きます。

お礼日時:2021/04/25 15:19

[No.2]訂正、


ステップ1の最初の「⇒」の直後に作業(リボンメニューのショート
カット)「Alt+MC⇒」を挿入m(_._)m
    • good
    • 0

1.範囲 B1:C100 を選択⇒“上端行”だけにチェック入れ⇒[OK]


2."仕様"G/標準
 ̄ ̄に書式設定した F列以右の1行目の左端から数値 !、2、3、… を
 ̄ ̄入力
3.次式を入力したセル F2 を右方および下方にズズーッとオート
 ̄ ̄フィル
 ̄ ̄=IFERROR(INDEX(仕様,SMALL(IF(名前=$E2,ROW(名前)),F$1)-1),"")
 ̄ ̄【お断わり】上式は必ず配列(CSE)数式として入力のこと
オ・シ・マ・イ
「エクセル関数について教えてください。」の回答画像2
    • good
    • 0
この回答へのお礼

回答有り難う御座います。参考にします。

お礼日時:2021/04/25 15:19

こんばんは



Unique関数やFilter関数が使える環境なら、比較的簡単に求められると思います。

私の環境では使用できないので、以下は、ローテクな方法での一例です。
ご参考までに。

E2セルに、
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW(A$2:A$100)/(COUNTIF(OFFSET(B$2,,,ROW(A$1:A$99)),B$2:B$100)=1),ROW(A1))),"")
を入れて、下方にフィルコピー。

F2セルに、
=IFERROR(INDEX($C:$C,AGGREGATE(15,6,ROW(A$2:A$100)/($B$2:$B$100=$E2)/($E2<>""),COLUMN(A1))),"")
を入力して、下方、右方にフィルコピー。
    • good
    • 1
この回答へのお礼

Unique関数が使用出来ない為、教えていただいた方法で対応出来ました。
有り難うございました。

お礼日時:2021/04/25 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング