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.

1 respuesta

Respuesta
2
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas