Jump to content
curanilahue

ADAPTAR ESTA MACRO PARA VARIOS NUMEROS

Recommended Posts

Estimados amigos:

He encontrado en la red esta macro que he, tratado de adaptar a mis necesidades; pero me sirve para una sola cantidad y no me acepta palabras (kinder, PreKinder), tampoco el signo 1º, 2º, 3º etc.

Que se podría hacer para mejorarla?

Hasta ahora mi solución es la que presento en el Libro 1

Macro:

Sub copiar()
'Por.DAM
    'nombres de hojas
    Set h1 = Sheets("General")
    Set h2 = Sheets("1º")
    'columna para verificar si tiene un 1
    col = "A"
    'última fila con datos de la hoja2
    u = h2.UsedRange.Rows(h2.UsedRange.Rows.Count).Row + 1
    For i = 1 To h1.Range(col & Rows.Count).End(xlUp).Row
        If h1.Cells(i, col) = 1 Then
            'Pasar datos a la hoja2,
            'del lado izquierdo pon la columna destino
            'del lado derecho pon la columna origen
            'Por ejemplo si la hoja2 la columna B recibe la columna D
            h2.Range("A" & u) = h1.Range("A" & i)
            'Por ejemplo si la hoja2 la columna A recibe la columna E
            h2.Range("B" & u) = h1.Range("B" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("C" & u) = h1.Range("C" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("D" & u) = h1.Range("D" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("E" & u) = h1.Range("E" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("F" & u) = h1.Range("F" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("G" & u) = h1.Range("G" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("H" & u) = h1.Range("H" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("I" & u) = h1.Range("I" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("J" & u) = h1.Range("J" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("K" & u) = h1.Range("K" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("L" & u) = h1.Range("K" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("M" & u) = h1.Range("M" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("N" & u) = h1.Range("N" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("O" & u) = h1.Range("O" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("P" & u) = h1.Range("P" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("Q" & u) = h1.Range("Q" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("R" & u) = h1.Range("R" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("S" & u) = h1.Range("S" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("T" & u) = h1.Range("T" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("U" & u) = h1.Range("U" & i)
            u = u + 1
        End If
    Next
End Sub

 

Libro1.xlsm

Share this post


Link to post
Share on other sites

@curanilahue , no entiendo tu problema nu lo que intentas hacer. En wl libro que has subido no hay nada relativo a kinder o prekinder y lo de 1º y 2º no se a qué te refieres con que no funciona.

¿Porqué no dejamos as macros encontradas vete tú a saber dónde y explicas claramente qué necesitas para poder hacer algo nuevo?

Share this post


Link to post
Share on other sites

Seré más especifico:

Quiero que junto a la matrícula, los cursos se vayan formando automáticamente, uno por hoja. En el ejemplo solo puse cuatro.                           
                                             
Las matriculas de la escuela quedan en la hoja General.                                    
Lo que busco es una distribución de cursos, automáticamente, mediante una selección en la columna F                    
Cuando en esta columna el dato diga PreKinder, debiera también copiarse en la hoja que diga PreKinder.                    
cuando la columna diga 1º debiera también trasladarse, automaticamente a la hoja de 1º año y así sucesivamente.                
                                                
con la macro que está arriba, algo de eso se logra, solo que no reconoce las letras, como en PreKinder y Kinder y tampoco el signo, con rojo (en la planilla de ejemplo), colocado al lado de del numeral , 1º, 2º

Ahora si ustedes dicen que no debiera considerarse la macro que les envío. Bienvenido su aporte.

Agradecido.

Pasar datos de una fila completa segun caracteristica.xlsm

Share this post


Link to post
Share on other sites

Agradezco el interés ya he encontrado la solución y es modificar la linea:

If h1.Cells(i, col) = 1 Then

por

If h1.Cells(i, col) = "Kinder" Then, en caso de palabras

y en caso de números ordinales:

If h1.Cells(i, col) = "1º" Then

en definitiva la solución está en las comillas

Agradecido.

Edited by curanilahue

Share this post


Link to post
Share on other sites

Si, 

Hace 54 minutos , curanilahue dijo:

Si, es una solución que ya habíamos esbozado; pero nos quedan las palabras: PreKinder y Kinder que no podemos obviarlas.

 

 

 

Ese no es el problema, el problema es que 1º de la hoja no es igual a 1º de la pestaña de la hoja.

Solo lo puedes manejar con in if y decirle que selecciones la hoja por su número Hoja1, Hoja2....., no por su nombre 1º,2º... etc.

 

Share this post


Link to post
Share on other sites

    nFila = 2
    Do While Hoja1.Cells(nFila, 6) <> Empty
        If Cells(nFila, 6) = "1º" Then
            Hoja2.Select
        ElseIf Cells(nFila, 6) = "1º" Then
            Hoja3.Select
        ElseIf Cells(nFila, 6) = "2º" Then
            Hoja4.Select
        ElseIf Cells(nFila, 6) = "3º" Then
            Hoja5.Select
        ElseIf Cells(nFila, 6) = "4º" Then
            Hoja6.Select
        ElseIf Cells(nFila, 6) = "5º" Then
            Hoja7.Select
        ElseIf Cells(nFila, 6) = "6º" Then
            Hoja8.Select
        ElseIf Cells(nFila, 6) = "7º" Then
            Hoja9.Select
        ElseIf Cells(nFila, 6) = "8º" Then
            Hoja10.Select
        ElseIf Cells(nFila, 6) = "PreKinder" Then
            Hoja11.Select
        ElseIf Cells(nFila, 6) = "Kinder" Then
            Hoja12.Select
        End If
        nFila = nFila + 1
    Loop
 

Share this post


Link to post
Share on other sites

Me parece interesante tu propuesta; pero, entendiendo que no soy erudito en el tema macros ¿Está completa o le debo agregar algo?

Pero si me parece llamativo que una sola macro llame los antecedentes de todas las hojas, ya que con la que tengo, son 10 las que debo hacer y si bien funcionan, es un proceso más largo y en la actualidad no es el tiempo lo que sobra (salvo para ustedes que se lo dan en ayudarnos des interesadamente)

Agradecido de tu apoyo.

Share this post


Link to post
Share on other sites

Solo hay confusión en el nombre de la hoja y en como se muestran los grados 1º, 2º, .... entonces solo le quitamos ese simbolo "º" en los datos de la hoja general. Y ya después comparamos con las hojas que llamamos con el IF.

YA TE DEJO A TI ESO DE COPIAR EL RANGO CORRESPONDIENTE Y PEGARLO..

 

 

nFila = 2
    Do While Hoja1.Cells(nFila, 6) <> Empty

        If Trim(Hoja1.Cells(nFila, 6)) = "Kinder" or Trim(Hoja1.Cells(nFila, 6)) = "PreKinder" Then

            cTexto = Trim(Hoja1.Cells(nFila, 6))

        Else

            cTexto = Mid(Trim(Hoja1.Cells(nFila, 6)),1,1)

        End If


        If cTexto = "1" Then
            Hoja2.Select
        ElseIf cTexto = "1" Then
            Hoja3.Select
        ElseIf cTexto = "2" Then
            Hoja4.Select
        ElseIf cTexto = "3" Then
            Hoja5.Select
        ElseIf cTexto = "4" Then
            Hoja6.Select
        ElseIf cTexto = "5" Then
            Hoja7.Select
        ElseIf cTexto = "6" Then
            Hoja8.Select
        ElseIf cTexto = "7" Then
            Hoja9.Select
        ElseIf cTexto = "8" Then
            Hoja10.Select
        ElseIf cTexto = "PreKinder" Then
            Hoja11.Select
        ElseIf cTexto = "Kinder" Then
            Hoja12.Select
        End If
        nFila = nFila + 1
    Loop

Sin título.png

Share this post


Link to post
Share on other sites

CORRECCION: TENIA DUPLICADO LA HOJA "1". SOLO FIJATE SI COINCIDEN CON LAS HOJAS DE TU ARCHIVO, LAS QUE PONGO EN NEGRITA., EN TU ARCHIVO PUEDE SER DIFERENTE.

 

nFila = 2
    Do While Hoja1.Cells(nFila, 6) <> Empty

        If Trim(Hoja1.Cells(nFila, 6)) = "Kinder" or Trim(Hoja1.Cells(nFila, 6)) = "PreKinder" Then

            cTexto = Trim(Hoja1.Cells(nFila, 6))

        Else

            cTexto = Mid(Trim(Hoja1.Cells(nFila, 6)),1,1)

        End If


        If cTexto = "1" Then
            Hoja2.Select
        ElseIf cTexto = "2" Then
            Hoja3.Select
        ElseIf cTexto = "3" Then
            Hoja8.Select
        ElseIf cTexto = "4" Then
            Hoja9.Select
        ElseIf cTexto = "5" Then
            Hoja10.Select
        ElseIf cTexto = "6" Then
            Hoja11.Select
        ElseIf cTexto = "7" Then
            Hoja12.Select
        ElseIf cTexto = "8" Then
            Hoja13.Select
        ElseIf cTexto = "PreKinder" Then
            Hoja4.Select
        ElseIf cTexto = "Kinder" Then
            Hoja5.Select
        End If
        nFila = nFila + 1
    Loop

Sin título.png

Edited by Leopoldo Blancas

Share this post


Link to post
Share on other sites

Sería mucho pedir si usted pudiera enviarme la el documento donde probó la macro???

Lamentablemente, tengo una conciencia contructivista y actúo y aprendo mejor con ejemplos. (Bueno y algo de la edad también)

Efectivamente ese signo "º" es una complicación ya que, en otras pruebas que he realizado, cambio de PC y no funciona porque no es igual.

Dedicaré la tarde al ejercicio.

Un abrazo

Share this post


Link to post
Share on other sites

¡Hola, a todos!

Dejo una versión diferente del problema.  La macro que te propongo, genera las hojas de forma automática de acuerdo con el curso.  Si la hoja existe previamente, la elimina y la vuelve a generar con la información correspondiente.

Haz clic en la Caja Azul.  ¡Bendiciones!

Pasar datos de una fila completa segun caracteristica.xlsm

Share this post


Link to post
Share on other sites

Estimados amigos Leopoldo y johnmpl:

Me colocan en una situación complicada, respecto a cual idea poner en ejecución; pero ambas son el reflejo del interés que ustedes tienen por ayudar.

A Leopoldo, muchos abrazos ya que me acompañó más tiempo, quedo complacido y está de acuerdo a lo que necesito.

Tengo otras ideas respecto de la misma planilla; pero, probaré yo primero y si no me resulta pediré socorro.

Un tremendo abrazo y doy por cerrado el tema.

Edited by curanilahue

Share this post


Link to post
Share on other sites

Antes que cierren el tema, solo voy a contarles una desgracia. Hace unos días practique una variación de la planilla... y dividí la matricula en "MatrBasica", la que correspondía a Educación Básica y "MatParvularia" la que correspondía a ese nivel.

Entiendo que puedo colocar la misma macro dos veces, cambiando los nombres en cuestión? Algo probé con buenos resultados. Espero poder contarle el final.

Un abrazo.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy