Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Buenas, en principio soy nuevo en el foro y por la recorrida que pegu hay mucha gente que sabe de esto, por lo que me animo a consultarles si es posible realizar la siguiente macro. Por empezar tengo una planilla en la cual se detallan los siguientes datos detallados en diferentes columnas en la Hoja1. Legajo - Empleado - Inicia - Tipo - NomTipo - Das - Finaliza - Concepto - Fecha de Carga Lo que necesito es que busque en la columna Das los valores >= a 15 y que me copie todas las filas completas donde se encuentren los valores que cumplan esa condicin a la Hoja2 a partir de la celda A2 hacia abajo. Espero haber sido explicito en la consulta. Gracias de antemano.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
cuatro05 Miembro Frecuente
A r r i b a
una primera aproximacion Sub encuentraycopia() Sheets("Hoja1").Activate With Range("1:1") Set d = .Find("Das", LookIn:=xlValues, LookAt:=xlWhole) If Not d Is Nothing Then d.Activate Else End End If End With ulren = Cells(1040000, ActiveCell.Column).End(xlUp).Row
For Each a In Range(Cells(1, ActiveCell.Column), Cells(ulren, ActiveCell.Column)) a.Activate If Val(a.Value) >= 15 Then a.EntireRow.Copy Destination:=Sheets("Hoja2").Range("a1048576").End(xlUp).Offset(1, 0) End If Next End Sub 'se ubica en la llamda "hoja" 1 del libro actual.. tambien se puede usar sheets(1) 'buscara solo en el renglon 1 suponiendo que aahi estan los titulos de las columnas 'busca la columna llamada "Das", con acento y sin espacios a los lados 'en caso de que si se encontro la columnma 'se ubica en la celda donde se encontro el titulo 'en caso de no encotrar el titulo 'termina 'determina el ultimo renglon con valores sobre la columna encontrada 'para cada celda de la columna encontrada con datos 'si el valor de la celda es mayor o igual a 15 se usa la funcion val por si en esa columna hay valores de texto 'copia todo el renglon a la hoja denominada "hoja2" 'siguiente celda del rango 'termina ela rutina una ves mas espero que te sea util y si alguien mas aporta otar solucion mas eficiente
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
A r r i b a
Sub Copiar() Dim Nmr On Error Resume Next Set Nmr = Application.InputBox("Valor a Copiar...", Type:=8) Application.ScreenUpdating = False Pnmr = Nmr.Value i = 1 Nmr.Select Sheets(4).Range("A2:K2000").ClearContents While ActiveCell.Value <> "" If ActiveCell.Value >= Pnmr Then Selection.EntireRow.Copy Destination:=Sheets(4).Range("A2").End(xlUp).Offset(i, 0) ActiveCell.Offset(1, 0).Activate i = i + 1 Else ActiveCell.Offset(1, 0).Activate End If Wend Application.ScreenUpdating = True End Sub
Salu2.xls
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Potter2K10 Miembro Frecuente
A r r i b a
A r r i b a
lo que pasa es que el inputbox esta seteado para que el valor lo tome de una celda por ejemplo si tiene el valor en a1=15 seleccionas A1 y le das aceptar. por si quieres que el valor que selecciones de una celda sea el >= si fuese 20 tendria que seleccionar en la columna dias el valor a copiar. Si no te funciona adjunta un archivo ejemplo con tu informacion y asi lo resolvemos.
Salu2.xls
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Potter2K10 Miembro Frecuente
A r r i b a
Ahora si funcion, pero como resultado me da todas las filas que contienen 31 das, no se por que. los que tienen entre 15 y 30, no copia las filas. Te adjunto un archivo ejemplo.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje. * Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
cuatro05 Miembro Frecuente
A r r i b a
Muchas gracias mipega62 Encontr mas interesante la manera en que lo plante Potter2K10. Por otra parte no estaba completo el tuyo (no quiere decir que no sirva, aprend mucho de lo que expusiste) y por eso opt por seguir con el de Potter. Repito mi gratitud a tu tiempo robado. Un abrazo grande des de Argentina.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
cuatro05 Miembro Frecuente
A r r i b a
Hola cuatro05, te adjunto el archivo con la macro modificada a ver si te parece de esta manera. el cambio creo que sera mas funcional si introduces el valor mayor que deseas copiar.
salu2.xls
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje. * Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Potter2K10 Miembro Frecuente
A r r i b a
Espectucular, no solo anda bien, sino que mejoraste la consulta. Te agradezco mucho, me salvaste horas de trabajo semanal. Un abrazo grande.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
cuatro05 Miembro Frecuente
A r r i b a
Copio la macro debajo por si a alguien le sirve lo que cre el Sr. Potter2k10. Super mi consulta a mas no poder.
Sub Copiar() Dim Nmr As Integer On Error Resume Next Dim Mensaje, Titulo Mensaje = " Introduzca un nmero " ' Establece el mensaje. Titulo = "Demostracin de InputBox" ' Establece el ttulo. Nmr = InputBox(Mensaje, Titulo) Application.ScreenUpdating = False Range("F2").Select 'Selecciona la celda donde empieza a buscar i=1 Sheets(2).Range("A2:K2000").ClearContents While ActiveCell.Value <> "" If ActiveCell.Value >= Nmr Then 'Condicin: si el valor de la celda es mayor o igual al valor introducido en el Inputbox Selection.EntireRow.Copy Destination:=Sheets(2).Range("A2").End(xlUp).Offset(i, 0) 'Copia la celda al destino especificado ActiveCell.Offset(1, 0).Activate i = i + 1 'Selecciona la prxima celda a pegar la fila siguiente Else ActiveCell.Offset(1, 0).Activate End If Wend Application.ScreenUpdating = True End Sub
A r r i b a
Hola, perdn la intromicin pero quise jugar yo tb. en alguna ocacin me ocurri el mismo problema, pero la cantidad de datos que deba copiar era muy grande. me result mas practico filtrando la tabla original. le hice la modificacin al cdigo de Potter, que lo encontr genial, pero ajustado a un filtro: Sub Copiar2() Dim Nmr As Integer On Error Resume Next Dim Mensaje, Titulo Mensaje = " Introduzca un nmero " ' Establece el mensaje. Titulo = "Demostracin de InputBox" ' Establece el ttulo. Nmr = InputBox(Mensaje, Titulo) Application.ScreenUpdating = False Range("F2").Select 'Selecciona la celda donde empieza a buscar Selection.AutoFilter ActiveSheet.Range("$A$1:$I$20").AutoFilter Field:=6, Criteria1:=">=" & Nmr, Operator:=xlAnd Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Hoja2").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Sheets("Hoja1").Select Range("A5").Select Application.CutCopyMode = False Selection.AutoFilter Application.ScreenUpdating = True End Sub
saludos, Jespnola
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
A r r i b a
Hola jspinola, me parece muy buen aporte el tuyo solo le hice una modificaion para hcer el rango dinamico asi se pueden agregar mas datos y siempre funciona el filtro sin tocar la macro.
CDIGO: SELECCIONAR TODO
Sub Copiar2() Dim Nmr As Integer On Error Resume Next Dim Mensaje, Titulo Mensaje = " Introduzca un nmero " ' Establece el mensaje. Titulo = "Demostracin de InputBox" ' Establece el ttulo. Nmr = InputBox(Mensaje, Titulo) Application.ScreenUpdating = False Range("F2").Select 'Selecciona la celda donde empieza a buscar Ufila = Sheets(1).Range("A" & Cells.Rows.Count).End(xlUp).Row ' cuentar la filas de la base Selection.AutoFilter ActiveSheet.Range("$A$1:$I" & Ufila).AutoFilter Field:=6, Criteria1:=">=" & Nmr, Operator:=xlAnd Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Hoja2").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Sheets("Hoja1").Select Range("A5").Select
A r r i b a
Hola Potter, estuve revisando, y al parecer no es necesario identificar el rango pues al momento de realizar el filtro, determina automaticamente el total de filas de la tabla. por otra parte, es necesario si, borrar la informacin de la hoja2 antes de copiar los datos filtrados. mira el cdigo a continuacin:.. Sub Copiar3() Dim Nmr As Integer On Error Resume Next Dim Mensaje, Titulo Mensaje = " Introduzca un nmero " ' Establece el mensaje. Titulo = "Demostracin de InputBox" ' Establece el ttulo. Nmr = InputBox(Mensaje, Titulo) Application.ScreenUpdating = False Sheets("hoja2").Select Cells.Select Selection.ClearContents Sheets("Hoja1").Select Range("F2").Select 'Selecciona la celda donde empieza a buscar Selection.AutoFilter Field:=6, Criteria1:=">=" & Nmr Range("A1").Select Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Hoja2").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Sheets("Hoja1").Select Range("A5").Select Application.CutCopyMode = False Selection.AutoFilter Application.ScreenUpdating = True End Sub
saludos, jespinola.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
jespinola Miembro Frecuente
A r r i b a
En efecto Jespinola tienes razon no me percate de eso a la hora de ver el codigo. Muy bueno.
Salu2.xls
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Potter2K10
Miembro Frecuente
A r r i b a
Hoy lo pruebo jespinola y opino. Muchas gracias por su tiempo y por compartir conocimientos, potter como siempre presente!. Saludos desde Arg.