単一の参照番号に関連付けられた複数の年齢の人々を抽出して表示したいと考えています。
以下に、シートの設定の一部を示します。シートには約 2500 行あります。
App ref,Relationship,Age,Date of Birth,Gender,Marital Status
1,A1,34,12-Apr-85,F,SINGLE
1,A1,34,12-Apr-85,F,SINGLE
1,PT,30,12-Oct-89,M,SINGLE
830,A1,63,10-Nov-56,F,MARRIED
830,SN,32,11-Nov-87,M,SINGLE
830,HU,65,24-Sep-54,M,MARRIED
846,A1,75,11-Aug-44,M,MARRIED
846,A2,72,16-Nov-47,F,MARRIED
それぞれについてApp Ref
、関連するすべての年齢を抽出します。
| App ref | Age 1 | Age 2 | Age 3 |
|---------|-------|-------|-------|
| 1 | 34 | 34 | 30 |
| 830 | 63 | 32 | 65 |
| 846 | 75 | 72 | - |
答え1
- 列Aを、ターゲットデータが始まる未使用の列にコピーし、データ、重複の削除を使用して、一意の列のセットを生成します。アプリ参照数字。下のサンプル画像では、列 H を使用しています。
この数式を、一意のセルのすぐ右の行1のセルに入力します。アプリ参照数字をクリックして右にドラッグします。私のサンプルでは、I1 から始めました。
=TEXT(COLUMN(A:A), "\A\g\e 0")
この式を1歳右下にドラッグします。私のサンプルでは、I2 から始めました。
=IFERROR(INDEX($C:$C, AGGREGATE(15, 7, ROW($C$2:INDEX($C:$C, MATCH(1E+99, $C:$C)))/($A$2:INDEX($A:$A, MATCH(1E+99, $C:$C))=$H2), COLUMN(A:A))), "")
もし、アプリ参照列が昇順に並べ替えられている場合は、参照行を制限することで計算を減らすことができます。
=IFERROR(INDEX($C:$C, AGGREGATE(15, 7, ROW(INDEX($A:$A, MATCH($H2, $A:$A, 0)):INDEX($A:$A, MATCH($H2, $A:$A))), COLUMN(A:A))), "")
答え2
これは簡単にできますPower Query
Excel 2010 以降で Microsoft から提供される無料アドイン。Excel Get & Transform
2016 以降に含まれています。
カスタム列の数式を入力することを除いて、すべて GUI から実行でき、元のデータが変更された場合は、クエリを簡単に更新できます。
- 元の表のセルを選択
Data--> Get & Transform --> from Table/Range
- グループ化
App ref
操作 == すべての行
- カスタム列の追加(列
Age
をList
- 式
=Table.Column([Merged],"Age")
- 式
comma
この新しいカスタム列の二重矢印を右クリックし、区切り文字として使用して値を抽出することを選択します。comma
を区切り文字として使用して列を分割します。- 新しい列の名前を
Age n
などに変更します - 閉じて結果を読み込む
Mコード
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"App ref", Int64.Type}, {"Relationship", type text}, {"Age", Int64.Type}, {"Date of Birth", type datetime}, {"Gender", type text}, {"Marital Status", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"App ref"}, {{"Merged", each _, type table [App ref=number, Relationship=text, Age=number, Date of Birth=datetime, Gender=text, Marital Status=text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.Column([Merged],"Age")),
#"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Custom", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Custom.1", "Custom.2", "Custom.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Custom.1", Int64.Type}, {"Custom.2", Int64.Type}, {"Custom.3", Int64.Type}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"Custom.1", "Age 1"}, {"Custom.2", "Age 2"}, {"Custom.3", "Age 3"}})
in
#"Renamed Columns"