Como dividir tabla excel en varias hojas por cada valor de filtro

Tengo una lista del modo:

Articulo centro almacén precio coste (5 columnas) e infinitas filas.

Mi pregunta es como podría crear en el mismo libro excel una pestaña que se llame "CENTRO" y en esa pestaña la información de las filas por cada valor diferente en la columna centro.

Ejemplo:

Articulo centro almacén precio coste

1                   X01X                    1             1           1

1                    X02X                     1        2321       1 

nuevas hojas X01X con la info

1                   X01X                    1             1           1

Otra nueva hoja llamada  X02X  con la info

1                    X02X                     1        2321       1 

Y así con infinitas filas.

1 respuesta

Respuesta
1

No especificas si los centros son valores únicos o están duplicados asumiendo que son valores únicos la amcro que ocupas es esta, también supongo que tus datos empiezan en la celda a1, de no ser así solo cambia este valor.

Sub crear_hojas()
Set centros = Range("a1").CurrentRegion.Columns(2)
With centros
    filas = .Rows.Count
    columnas = .CurrentRegion.Columns.Count
    For i = 2 To filas
        centro = .Cells(i)
        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = centro
        centros.Cells(i, 0).Resize(1, columnas).Copy: Range("a2").Resize(1, columnas).PasteSpecial
        .CurrentRegion.Rows(1).Copy: Range("a1").Resize(1, columnas).PasteSpecial xlPasteValues
       Next i
End With
Set centros = Nothing
End Sub

Hay más de 50 centros diferentes. Y en algunas ocasiones el centro tiene 1 línea o 20 líneas ... es decir cada centro x01x puede tener 1 registro y el x25x podría tener 30 líneas... la pestaña que crea se llamaría como el centro? Hubo una extensión que me funcionó (aunque no me separa los libros) , pero mucho mejor con la macro, te lo agradezco intensamente. Me ahorras mucho tiempo al mes. GRACIAS 

La macro esta diseñada para crear hojas de acuerdo a lo que tengas en la columna centros un centro sera una hoja que tendrá el nombre de ese centro, si tienes 50 centros creara cincuenta hojas con el nombre de cada centro y copiara la fila a la hoja que corresponda ojo, si mencionas que un centro puede tener más de 1 línea entonces la macro te va mostrar un error que la hoja ya existe y detendrá la macro.

Claro ese es justo el problema, que cada centro tiene varias líneas normalmente. 

Articulo          centro       almacén precio coste

1                   X01X                    1             1           1

1                    X02X                     1        221       1 

1                    X02X                     1        21       1 

1                    X02X                     1        232       1 

1                   X03X                    1             44          1

Aún estando ordenadas, ¿No habría manera de extraer cada centro X02X (con todas las líneas que tenga) a una pestaña con el nombre del centro? He probado varias macros y nada... Muchas gracias Saludos

Esta macro crea una hoja por cada centro que tengas, cuenta todos los registros que ese centro tenga y los copia a su respectiva hoja, crea una tabla temporal que se borra una vez que termina de copiar los datos, esto para evitar que la macro muestre error por que la hoja con el nombre del centro ya existe, igual que la macro anterior no importa cuantos registros tenga 1 0 1 millon o si quitas o agregas filas igual la macro trabaja con lo que este en la hoja.

Sub separar_en_hojas()
Set centros = Range("a1").CurrentRegion
With centros
    filas = .Rows.Count
    col = .Columns.Count
    .Sort key1:=Range(.Columns(2).Address), order1:=xlAscending, Header:=xlYes
    Set centros2 = .Columns(col + 3).Resize(filas, 3)
End With
With centros2
    centros.Columns(2).Copy: .Columns(1).PasteSpecial
    .RemoveDuplicates Columns:=1
    Set centros2 = .CurrentRegion
    filas = .Rows.Count - 1
    rango = centros.Columns(2).Address
    buscar = .Cells(2, 1).Address(0, 0)
    .Cells(2, 2).Resize(filas, 1).Formula = "=countif(" & rango & "," & buscar & ")"
    .Cells(2, 3).Resize(filas, 1).Formula = "=match(" & buscar & "," & rango & ",0)"
    For i = 2 To filas + 1
        centro = Trim(.Cells(i, 1))
        veces = .Cells(i, 2)
        indice = .Cells(i, 3)
        Set datos = centros.Rows(indice).Resize(veces, col)
        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = centro
        datos.Copy: Range("a2").Resize(veces, col).PasteSpecial
        centros.Rows(1).Copy: Range("a1").Resize(1, col).PasteSpecial xlPasteValues
    Next i
    centros2.CurrentRegion.Clear
    Set datos = Nothing: Set centros = Nothing: Set centros2 = Nothing
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas