¿Macro o fórmula?

Hola quisiera ver si me puedes ayudar con esto, bueno tengo el siguiente caso, columna B
B
Ético (b1)
. Antimicóticos sistemic (b2)
.. ORAL (B3)
... Farmacéutica (b4)
... FLUCONAZOL (B5)
... FLUCONAZOL 150 MG (B6)
... FLUCONAZOL 200 MG (B7)
... MARFAN (B8)
... Ibuprofeno (b9)
... IBUPROFENO 400 MG (B10)
Aquí los puntos simbolizan los espacios los puse para que me entiendas, desde B1 (0 espacios) baja como una escalera hasta B6 (5 espacios), quisiera una macro o alguna fórmula que me inserte columnas antes de la Columna B y lo ordene así, tomando en cuenta los espacios porque eso significa un orden que siguen.
A B C D E F
Ético antico. SIS. Oral farmac. FLUCONA. FLUCON. 150MG
Ético antico. SIS. Oral farmac. FLUCONA. FLUCON. 200MG
ETICO         ANTICO. SIS.  ORAL      MARFAN         IBUPROFENO       IBUPROF. 400MG
y asi sucesivamente es que tengo de esos como 5000 y entenderas que es bastante trabajoso copiar y pegar, gracias de antemano espero me puedas ayudar.

2 respuestas

Respuesta
1
Prueba este código y me cuentas. Para ello tienes que tener una hoja llamada "Arbol" donde se hace el despliegue y el carácter inicial es ".". Puedes cambiar ambos en el código según lo que tengas.
Sub DespliegaArbol()
Dim f As Integer
Dim c As Integer
Dim i As Integer
Dim maxi As Integer
Dim h As Worksheet
maxi = Range("B1").End(xlDown).Row 'numero de filas que tenemos
Set h = Worksheets("Arbol") 'hoja donde montaremos el arbol
For f = 1 To maxi
    c = NumColumna(Cells(f, 2).Value)
    'tengo que copiar la fila anterior hasta la columna c y luego el dato
'la fila me vale la misma
    For i = 1 To c
        h.Cells(f, i).Value = h.Cells(f - 1, i).Value
    Next i
    h.Cells(f, c + 1).Value = Cells(f, 2)
Next f
End Sub
Function NumColumna(s As String) As Integer
Dim c As String * 1
Dim x As Integer
c = "." 'poner el espacio o el caracter que corresponda
x = 0
While InStr(s, c) = 1
    s = Right(s, Len(s) - 1)
    x = x + 1
Wend
NumColumna = x
End Function
El código hace un despliegue por fila, que no es exactamente lo que tu quieres. Si quieres eliminar filas para que salga exactamente lo que indicas en tu ejemplo hay que saber cual es el criterio. Aparentemente borrando de mi resultado todas las filas que tienen la columna cinco vacía sale lo tuyo pero no sé si es válido para toda tu tabla.
Respuesta
La columna es texto, así que lo más simple es realizar copiado especial, luego te posicionas en la celda a pegar y realizas un pegado especial, valores/transponer
Hazlo una sola vez, utilizando el grabador de macros ( con la opción "usar referencias relativas") y listo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas