Ist es möglich, in einer Excel-Formel auf die Gruppierungsebene zuzugreifen?

Ist es möglich, in einer Excel-Formel auf die Gruppierungsebene zuzugreifen?

Ich habe eine Excel-Tabelle, die ungefähr so ​​aussieht:

Bildbeschreibung hier eingeben

Ist es möglich, eine Formel zu schreiben, die auf die Gruppierungsebenen (die rot markierten Zahlen) zugreift?

Das Problem besteht darin, dass wir über eine Software verfügen, die eine Stückliste (BOM, Bill Of Materials) exportiert, die in einer Top-down-Manier die verschiedenen in einem mechanischen Produkt enthaltenen Artikel beschreibt.Nur anhand der Gruppierungsnummer lässt sich erkennen, auf welcher Ebene sich ein bestimmter Artikel befindet..

Antwort1

warum probieren Sie nicht ein VBA-Skript oder Makro aus?

Ich denke, das wird helfen: Worksheets("Sheet1").Rows(i).OutlineLevel

Gehen Sie das Blatt durch und schreiben Sie diese Eigenschaft in die Zellen.

Antwort2

Ich habe genau die gleiche Situation, in der ich eine korrekte Verwendung der Gliederungsebene erreichen möchte, die von meiner Anwendung ausgegeben wurde. Dann müssen Sie ein Visual Basic-Skript in Excel erstellen. Der VB-Skripteditor ist über den Makroeditor erreichbar. Ein typischer Code, der eine zusätzliche zweite Spalte einfügt, die die Ebene enthält, und dann eine Datei durchsucht und die Spalte mit der richtigen Ebene füllt, kann folgendermaßen aussehen:

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

Dies kann dann auch mit anderen Funktionen erweitert werden. Ich habe in der obigen Schleife die höchste Gliederungsebene im Auge behalten und so viele zusätzliche Spalten erstellt, wie es Ebenen gab, und dann in jede dieser Spalten eine Logik eingefügt, damit die Ebenenstruktur visualisiert werden konnte.

Das Einfügen der Spalten sah folgendermaßen aus (dazu gehörte auch eine Einstellung für die bedingte Formatierung, die Zellen mit einem „X“ schwarz machte):

  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

Und schließlich eine doppelte Schleifensequenz, die alle Zellen in den zusätzlichen Spalten mit einem Check gegen die Level-Spalte füllte und ein "X" in die richtige Zelle setzte. Dieser Code sah folgendermaßen aus:

  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

Ich sehe, dass die schöne Einrückung des obigen Codes im endgültigen Beitrag zerstört ist, aber wenn Sie sich mit Code auskennen, sollten Sie das gut hinbekommen.

Antwort3

Ja, das ist möglich. Die Funktion GET.CELL()hilft dabei.
GETCELList eine spezielle Funktion. Tatsächlich eine Excel 4-Makrofunktion und daher muss die Datei bei Verwendung als .xlsm-Datei gespeichert werden. Weitere InfosHier

  1. Definieren Sie einen benannten Bereich (z. B. OutlineLevel) in der obersten Zelle Ihres Blattes (z. B. A1) mit der folgenden Formel:=GET.CELL(28,Sheet1!A1)
  2. Beziehen Sie sich in einer leeren Spalte auf diesen benannten Bereich ( =OutlineLevel) und kopieren Sie die Formel nach unten.

Sie erhalten die Hierarchieebene für die entsprechende Zeile.

Ein Lob geht an den recht alten Lösungsvorschlag von GlennUK auf derMr.Excel Forum

verwandte Informationen