Copiar sólo una celda en concreto de datos filtrad
Me gustaría poder copiar sólo una celda visible de datos filtrados en una macro, consigo copiar todos los datos visibles pero no consigo seleccionar una celda en concreto. Si me podéis ayudar os lo agradecería.
Como no explicas qué celda debe seleccionar imaginaré que el criterio a buscar lo colocarás en una variable 'midato' Entonces luego de filtrar, podes agregar estas instrucciones (ajustá la celda) 'se selecciona una celda del rango para obtener la región Unacelda = "B4" 'se recorre la región obtenida buscando el dato que será igual al valor del ComboBox For Each celdita In Range(Unacelda).CurrentRegion.SpecialCells(xlCellTypeVisible) If celdita.Value = midato Then 'si lo encuentra se selecciona esa celda y finaliza la búsqueda celdita.Select Exit Sub End If 'se repite la búsqueda en las otras celdas Next celdita Nota: en mi manual 400MacrosPlus encontrarás 1 cap completo con ejemplos de rutinas para filtros. Sdos. No olvides finalizar si el tema quedó resuelto
Hola Elsa, muchas gracias por contestar. Lo que necesito es lo siguiente, filtro una serie de datos por nombre mediante un combobox. Cuando tengo esos datos filtrados por nombre, quiero seleccionar un único dato de la región filtrada, uno de la columna E, por ejemplo. Cuando lo seleccione, pues quiero pegarlo a otra hoja. Lo que hago ahora es seleccionar esa columna y una única celda pero claro no me copia la celda visible sino una oculta. No sé si me he explicado mejor ahora. Un saludo y gracias
'...quiero seleccionar un único dato de la región filtrada...' Entonces, ¿cómo sabrá la macro qué dato querés seleccionar? Por eso utilicé la variable 'midato' que la tenés que asignar al inicio. Por ej, puede ser el valor de un textbox, o qui´zas lo tengas en alguna celda... midato = Textbox1.value midato = Range("H1") Y luego el bucle (For each) que recorre 'solo las celdas visibles' hasta encontrar ese valor Deberás reemplazar la instrucción: celdita. Select por la de copiado, por ej: Celdita. Copy Espero que esté aclarado ahora, sino lo seguimos intentando Sdos Elsa
He probado lo que me has dicho, pero no es exactamente lo que quiero. A ver, si me explico ahora mejor, primero hago un filtro por nombre de curso y entonces me sale toda la gente que ha participado en ese curso, lo primero que hago es copiar todos lo nombres de los participantes, después de copiarlos, lo que quiero es copiar las horas total del curso que están cuatro columnas más a la derecha que los nombres de los participantes. Como he filtrado por curso, las horas total son las mismas para cada participante, así que solo necesitaría copiar una de las celdas para saber cuáles son las horas totales del curso en cuestión. Como tengo activa ya la columna de los nombres, había intentado decir que se moviese dos posiciones a la derecha a partir de la celda activa y copiar la nueva celda activa; pero lo que me hace es copiarme efectivamente un dato de la columna de horas total pero no de la región visible. Te pongo parte de mi código para ver si me puedes entender mejor. Selection.AutoFilter Field:=7, Criteria1:=ComboBox1.Text 'filtramos por coursename Selection.AutoFilter Field:=8, Criteria1:=CDate(ComboBox2.Text) 'filtramos por fecha celdaIni = ActiveCell.Offset(1, 4).Address 'Seleccionamos el rango a copiar ActiveCell.End(xlDown).Select ActiveCell.Offset(0, 4).Select celdaFin = ActiveCell.Address Range(celdaIni, celdaFin).Select 'copiar nombres participantes Selection.Copy Sheets("Signatures").Select 'la copiamos en la ficha signatures Range("B15").Select 'seleccionamos la primera celda a copiar datos ActiveCell.PasteSpecial Paste:=xlValues 'pegamos solo los valores Sheets("TrainingRecords").Select celdaHoras = ActiveCell(xlVisible).Offset(1, 4).Select 'A partir de aquí no me funciona Selection.Copy Sheets("Signatures").Select Range("C9").Select ActiveCell.PasteSpecial Paste:=xlValues Muchas gracias por tu tiempo. Un saludo
Lo mejor es que coloques algunas líneas para que te muestre cuál es la celda activa al momento de volver y seleccionarla, con un Msgbox activecell. Address antes de la línea de celdaHoras. Ej: si al inicio de la rutina estoy en C1, la variable 'celdaini' de tu macro devuelve G2 y cuando volvés a la hoja esa sigue siendo al celda activa. Entonces: celdaHoras = ActiveCell.Offset(0,4) 'te devolverá lo que está en la misma fila, 4 col a derecha. Para mi ejemplo te devuelve lo que está en K2 Sdos. Comentame si lo resolviste Elsa
Cuando hago eso, me devuelve la celda activa pero no corresponde con ninguna visible, así que estoy con el mismo problema, me copia una celda oculta en vez de las que están visibles. No sé cómo hacerlo. :S
Mandame el libro al correo que encontrarás en mi sitio. No olvides recordarme tu alias y motivo de consulta
Si no te interesa continuar con el tema finaliza la consulta por favor para que se libere mi bandeja de pendientes. Sdos Elsa