Crear hojas excel dependiendo de los datos contenidos en otra

Quisiera que me dijeras cómo se podría crear una macro o función para de una hoja excel en la que en una columna hay datos que se repiten, que me creara tantas hojas excel como datos repetidos encuentre.

Es Decir: si en la columna A1----- 1      A2 -------2      A3 ------- 2      A4 ------- 8      A5 ------ 1 tienen estos valores, cuando la macro lea los valores contenidos en las celdas, tendrá que crearme 3 hojas diferentes:

A1 y A5 tienen el mismo valor ---- 1

A2 y A3 tienen valor 2

A4 tiene valor 8

2 respuestas

Respuesta
1

Te anexo el código para que empiece a leer los datos desde la celda A1

Sub CrearHojas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Columns("A").Copy
    Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
    For i = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
        If h2.Cells(i, "A") <> "" Then
            Set h3 = Sheets.Add
            h3.Name = h2.Cells(i, "A")
        End If
    Next
    Application.DisplayAlerts = False
    h2.Delete
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

Creo que no me has llegado a entender. Lo que quiero es poder leer los datos de las celdas de una determinada columna que tengan el mismo valor (para eso tendrían que estar clasificadas por ese valor) y crear un fichero excel (p.e datos1.xls) con esos datos. Luego seguiría leyendo el siguiente valor duplicado y se crearía otro fichero (datos2.xls) y así sucesivamente. Al final tendríamos tantos ficheros .xls como valores distintos hubiésemos leido de las celdas.

Un saludo

La macro está así por esto que comentaste: "tendrá que crearme 3 hojas diferentes"

¿Entonces quieres un nuevo libro?

¿Quieres pasar los datos al nuevo libro?

Y cuáles datos pasarías, ¿toda la fila?

Saludos. Dante Amor

Imagínate que tengo un libro con los datos en las colum. A(nombre) B(direccion) y C(edad). La edad es el dato que más se repetirá. Pues mi intención es crear tantos libros diferentes como edades haya y cada libro contendría los mismos datos (nombre, dicreccion y edad). Cuando se haya creado el primer libro, volveríamos al libro principal y buscaríamos todos los registros con la siguiente edad y crearíamos otro libro y así sucesivamente. No sé si me he explicado bien. Un saludo

Ayúdame a ayudarte, si pudieras poner ejemplos con datos reales, dime bien las columnas y si tienes encabezados y si quieres que el encabezado se copie al otro libro, en fin, dime exactamente cómo tienes los datos y cómo los quieres.

Si puedes poner una imagen del origen y el destino me ayudarías mucho.

Como ejemplo: tendría un libro en el que en la colum, A están los nombres y en la B las edades. Con respecto a la imagen de ejemplo quisiera tener 4 libros diferentes con los datos de aquellos que tienen como edad 34( 3 registros); otro como edad 35 ( 3 registros) otro los que tienen 42 (2 registros), otro con edad de 50 (3 registros). 

Espero te haya quedado más claro. Un saludo y gracias.

Te anexo la macro, la información te quedaría así:


Sub CrearLibros()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ruta = ThisWorkbook.Path
    '
    Set h1 = ActiveSheet
    h1.Cells.Copy
    Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
    ActiveSheet.Paste
    Application.CutCopyMode = False
    'ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
    '
    u = h2.Range("B" & Rows.Count).End(xlUp).Row
    With h2.Sort
     .SortFields.Clear: .SortFields.Add Key:=h2.Range("B2:B" & u)
     .SetRange h1.Range("A1:B" & u): .Header = xlYes: .Apply
    End With
    '
    ant = h2.Cells(2, "B")
    Set l3 = Workbooks.Add
    Set h3 = l3.ActiveSheet
    h2.Rows(2).Copy h3.[A1]
    j = 2
    u = h2.Range("B" & Rows.Count).End(xlUp).Row
    '
    For i = 3 To u + 1
        If ant <> h2.Cells(i, "B") Then
            l3.SaveAs ruta & "\" & ant
            l3.Close
            If u < i Then Exit For
            Set l3 = Workbooks.Add
            Set h3 = l3.ActiveSheet
            j = 1
        End If
        h2.Rows(i).Copy h3.Range("A" & j)
        j = j + 1
        ant = h2.Cells(i, "B")
    Next
    h2.Delete
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

¡Gracias!  eso era exactamente lo que quería.

Muchas gracias.

Hola Dante, aquí estoy de nuevo. En la consulta que te hice y que me resolvistes estupendamente, quisiera añadir una cosa: si en la hoja de la imagen, además del nombre y de la edad tuviera en la columna C un hipervínculo a una imagen (en este caso de los empleados) del modo =HIPERVINCULO(I19 & ".tif"; "Abrir imagen") cómo sería la función para copiar la imagen correspondiente a cada empleado?. Me explico, ya teníamos los libros con los que tenían edad 34, 35, 42 y 50. Se podría tener una carpeta por cada edad en la que tuviésemos el libro de los que tienen esa edad y la imagen de cada uno de ellos?

Podrías crear una pregunta para cada petición, en el tema de excel. Si lo deseas puedes poner al final del título de la pregunta, que va dirigida a Dante Amor, en el texto de la pregunta describe lo que necesitas.

Saludos. Dante Amor

Respuesta
1

Disculpa por demorar en resoponder:

Entra a este enlace, ejecutas la macro "Crear_Hojas_Unicas"

http://www.mediafire.com/view/8sw3usvut7yaf6p/Crea_hojas_unicas.xlsm 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas