答え1
マクロのVBAスクリプトを試してみませんか?
これが役に立つと思います: Worksheets("Sheet1").Rows(i).OutlineLevel
シートを調べて、このプロパティをセルに書き込みます。
答え2
私もまったく同じ状況に陥っており、アプリケーションから出力されたアウトライン レベルを適切に使用したいと考えています。その場合、Excel で Visual Basic スクリプトを作成する必要があります。VB スクリプト エディターには、マクロ エディターからアクセスできます。レベルを含む 2 番目の列を追加して挿入し、ファイルを調べて列に正しいレベルを入力する一般的なコードは次のようになります。
Sub GetOutlineLevel()
' Initiate where to start. With a header row, typical start is row 2
RowCount = 2
' Insert a new column B, write "Level" as the title in row 1,
' and define the width of the column
Columns("B:B").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(1, 2).Value = "Level"
Columns("B:B").Select
Selection.ColumnWidth = 5
' Go to the first row you want to analyze
Cells(RowCount, 1).Activate
' Make a loop to go through all lines that contains data.
' This assumes that there is a continuous row of lines that all have data in the
' first column
Do
' Fill the cell in column 2 at the current row with the outline level
Cells(RowCount, 2).Value = ActiveCell.Rows.OutlineLevel
' Go to the next row
RowCount = RowCount + 1
Cells(RowCount, 1).Activate
' Continue and stop at the first empty row
Loop Until ActiveCell.Value = ""
End Sub
これを他の機能で拡張することもできます。上記のループで最高レベルのアウトラインを追跡し、レベルと同じ数だけ追加の列を作成し、各列にロジックを作成して、レベル構造を視覚化できるようにしました。
列の挿入は次のようになります (「X」を含むセルを黒にする条件付き書式設定が含まれています)。
ColumnsInserted = 0
Do
Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(1, 3).Value = "L" & MaxLevel - ColumnsInserted
Columns("C:C").Select
Selection.ColumnWidth = 4
Columns("C:C").Select
Selection.FormatConditions.Add Type:=xlTextString, String:="X", _
TextOperator:=xlContains
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
ColumnsInserted = ColumnsInserted + 1
Loop Until ColumnsInserted = MaxLevel
そして最後に、レベル列をチェックして追加列のすべてのセルを入力し、正しいセルに「X」を入れる二重ループ シーケンスです。このコードは次のようになります。
FIns = 1
Do
RowCount = 2
Do
Cells(RowCount, 2 + FIns).Select
ActiveCell.FormulaR1C1 = "=IF(RC[-" & FIns & "]=" & FIns & ",""X"","""")"
RowCount = RowCount + 1
Loop Until Cells(RowCount, 1).Value = ""
FormulaInsert = FormulaInsert + 1
Loop Until FormulaInsert > MaxLevel
上記のコードのインデントが最終投稿では台無しになっているのがわかりますが、ある程度のコーディングに慣れている人であれば、うまく整理できるはずです。
答え3
はい、可能です。この関数GET.CELL()
が役立ちます。
GETCELL
これは特別な関数です。Excel 4 のマクロ関数であるため、使用時にはファイルを .xlsm ファイルとして保存する必要があります。詳細情報ここ
OutlineLevel
次の数式を使用して、シートの一番上のセル (例: A1) に名前付き範囲 (例: ) を定義します。=GET.CELL(28,Sheet1!A1)
- 空の列でこの名前付き範囲 (
=OutlineLevel
) を参照して、数式をコピーします。
対応する行の階層レベルが取得されます。
GlennUKが提案したかなり古い解決策に敬意を表します。Mr.Excel フォーラム