したがって、次のようなExcelスプレッドシートに大量のデータがあります。
Level Hierarchy Name
0 1 Sam
1 1.1 Bill
2 1.1.1 George
3 1.1.1.1 Fred
4 1.1.1.1.1 Richard
4 1.1.1.1.2 Steve
4 1.1.1.1.3 Max
4 1.1.1.1.4 Sven
3 1.1.1.2 Mike
4 1.1.1.2.1 John
4 1.1.1.2.2 Isaac
4 1.1.1.2.3 Zack
2 1.1.2 James
3 1.1.2.1 Henry
4 1.1.2.1.1 Greg
.
.
.
Richard、Steve、Max、SvenがFredの下にグループ化されるように、ワークシートにグループを自動的に作成したいと思います。ジョン、アイザック、ザックはマイクの下にいます。等...;そして、彼らはすべてサムの下にロールアップします。
Excel auto-outline 機能を使用しようとしましたが、「アウトラインを作成できません」というメッセージが表示されます。誰かがこの作業を行う方法を教えたり、これを行う別の方法を提案したりできますか?
データは別のシステムからのものですが、Excelにインポートする前にデータを変換できます。
レベルが有限の場合は、次のようにします。データを更新する必要がある場合は、単純なピボット更新であるという利点があります(つまり、一度設定するだけです)。
階層の各レベルでの上司を表す新しい列(number = max level)を作成します(メモは、階層フィールドでソートされていると想定しています)
D3の数式と上下にコピー:=IF($B3=D$2,$A3,IF($B3<D$2,"",D2))
自動アウトライングループ化機能を使用するには、(合計)Subtotal()関数を使用して集計行を挿入する必要があります。 Excelは、これをグループ化のブレークポイントとして認識します。詳細については、Microsoftの記事 ワークシートのアウトライン(グループ)データ を参照してください。
このテーブルをPower Pivotに読み込み、階層をレベルにフラット化します。DAX関数を使用します。パスアイテム
http://www.powerpivotblog.nl/powerpivot-denali-parent-child-using-dax/
Power Pivotを使用できない場合は、ソースシステムで階層を同様の方法でレベル列にフラット化します。
プレゼンテーションはピボットテーブルに表示され、ノードを展開できます。これにより、数式をいじる必要なく、新しいデータが入力されると自動的に調整されます。
最大の注意点は、レベルの最大数を修正する必要があることです。
階層列の番号で行を自動グループ化するVBAコード
For i = 3 To RowLength
On Error Resume Next
levelNo = Len(Cells(i, WBSColNo)) - Len(Replace(Cells(i, WBSColNo), ".", "")) + 1
Rows(i).OutlineLevel = levelNo
Next
心から
階層列に基づいてリンクされたマクログループ(自動アウトライン)の行の下。レベル番号(完全なストップでフォーマットされた[階層列])を選択し、マクロを実行するだけです。範囲とテーブルで機能します。合計、カウントなどの行は追加されません。