¿Es posible acceder al nivel de agrupación en una fórmula de Excel?

¿Es posible acceder al nivel de agrupación en una fórmula de Excel?

Tengo una hoja de Excel que se parece a esta:

ingrese la descripción de la imagen aquí

¿Es posible escribir una fórmula que acceda a los niveles de agrupación (los números marcados en rojo)?

El problema es que tenemos un software que exporta una BOM (Bill Of Materials) que describe, de arriba hacia abajo, los diferentes artículos contenidos en un producto mecánico.El número de agrupación es la única forma de saber en qué nivel se encuentra un determinado artículo.

Respuesta1

¿Por qué no probar el script VBA de macro?

Creo que esto ayudará: Hojas de trabajo ("Hoja1"). Filas (i). Nivel de contorno

Revise la hoja y escriba esta propiedad en las celdas.

Respuesta2

Tengo exactamente la misma situación en la que quiero obtener un uso adecuado del nivel de esquema que se generó desde mi aplicación. Luego, necesitas crear un script visual básico en Excel. Se puede acceder al editor vb-script a través del editor de macros. Un código típico que inserta una segunda columna adicional que contendrá el nivel y luego revisa un archivo y llena la columna con el nivel correcto puede verse así:

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

Esto también se puede ampliar con otras funciones. Seguí el nivel de esquema más alto en el bucle anterior, e hice tantas columnas adicionales como niveles había y luego hice algo de lógica en cada una de estas columnas para que se pudiera visualizar la estructura de niveles.

La inserción de columnas se veía así (esto incluía una configuración de formato condicional que hacía que las celdas que contenían una "X" fueran negras):

  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

Y finalmente, una secuencia de doble bucle que llenó todas las celdas de las columnas adicionales con una verificación de la columna Nivel y puso una "X" en la celda correcta. Este código se veía así:

  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

Veo que la buena sangría del código anterior se arruinó en la publicación final, pero si está familiarizado con algo de codificación, debería poder solucionarlo de una buena manera.

Respuesta3

Si es posible. La función GET.CELL()ayudará.
GETCELLes una función especial. De hecho, es una función de macro de Excel 4 y, por lo tanto, el archivo debe guardarse como archivo .xlsm cuando se usa. Más informaciónaquí

  1. Defina un rango con nombre (por ejemplo, OutlineLevel) en la celda superior de su hoja (por ejemplo, A1) con la siguiente fórmula:=GET.CELL(28,Sheet1!A1)
  2. en una columna vacía, consulte este rango con nombre ( =OutlineLevel) y copie la fórmula.

Obtendrá el nivel de jerarquía para la fila correspondiente.

Felicitaciones a la solución propuesta bastante antigua de GlennUK sobre elForo Mr.Excel

información relacionada