última celda libre de una matriz

23/08/2009 - 10:53 por José Rafael | Informe spam
Buenos días:
Tengo una matriz dentro del código que copio mas abajo, B20:B35 para poner
la fecha que contiene la celda P1 (de la misma hoja) en la primera celda
libre, por ejemplo la B26 y por otro lado otra matriz C20:I35 para "pegar"
en la fila que corresponda por ser la primera fila libre, por ejemplo, la
C26:I26, (se trata de una sola celda de formato combinada)..., el contenido
de la celda P5 que contiene diversos textos concatenados que forman el todo
de un informe.
Como quiera que en las citadas matrices existen fórmulas del tipo BuscarV en
todas las celdas..., no sé como llegar a la primera celda libre donde no
haya un tinforme ya pasado, sino únicamente la fórmula citada. Este es el
primer problema.
Otro problema es que cuando copiaba la celda P5 para trasladarla a la celda
combinada C26:I26 me sale un mensaje de error de que no se puede pegar
porque las celdas de copiado y pegado no tienen el mismo formato como para
pegar "solo valores".
Sin embargo al copiar el contenido de P5 en P19 ya como texto, si copio esta
última celda y lo intento pegar en la celda combinada C26, el pegado normal
lo admite y como vereis en el codigo que grabé puedo a posteriori "pegar" el
formato de la celda anterior...
El código adjunto es el grabado por el sistema al crear la macro y no me
aclaro en la situación de las celdas ni en la forma de pegar necesito
ayuda, claro.
Espero haberme explicado suficientemente, aunque es un tema complicado de
entender...Haced lo que podáis y gracias.
José Rafael



Sub grabarresultadodelavisita()
'
' grabarresultadodelavisita Macro
' Macro grabada el 22/08/2009 por hes040
'
Dim fechainforme As Range
Dim textoinforme As Range

Sheets("Crear informes").Select
'ActiveCell.Address '(como alternativa a encontra la primera celda
libre, quería "situarme" primero en la celda libre y registrarla ... ???)
Range("B26").Select
'ActiveCell.FormulaR1C1 = fechainforme '(quería pasa el range de la
celda donde me habia situado.. no funciona)

Range("P1").Select
Selection.Copy
'Range("&fechainforme&").Select '(queria utilizar el range de la celda
donde me habia situado a través de la variable..??)
Range("B26").Select '(primera celda libre de la matriz de fecha B20:B35,
aunque contiene una formula tipo BuscarV)
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("P5").Select '(esta celda contiene una formula muy larga de
CONCATENAR, que recibe la información correspondiente)
Selection.Copy
Range("P19").Select (Aqui dejo el resultado de la celda P5, pero ya como
texto)
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Range("C26:I26").Select '(esta es la primera celda combinada libre de
texto, aunque con una fórmula BuscarV, destino del contenido de P19)
ActiveSheet.Paste (pega el texto de P19 de forma "normal")
Range("C25:I25").Select '(copio para pegar el formato en C26 y he
conseguido mi objetivo)
Application.CutCopyMode = False
Selection.Copy
Range("C26").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/08/2009 - 22:42 | Informe spam
hola, José Rafael !

1) hay algunas inconsistencias en esta consulta (p.e.) dices:

Tengo una matriz dentro del codigo... B20:B35 para poner la fecha que contiene la celda P1
... en la primera celda libre por ejemplo la B26



y en el codigo que expones, tienes una "mezcla" de instrucciones que (supongo) SI funcionan
con otras del tipo "como quisieras" que funcionaran (pero se entiende que NO) p.e.
Range("C26:I26").Select '(esta es la primera celda combinada libre de texto, aunque con una formula BuscarV, destino del contenido de P19)



OJO: si contiene una formula buscarv... como puede ser al mismo tiempo considerada como una "celda libre" ?????

2) de forma similar, y hablando de celdas "combinadas", cuando dices:

y por otro lado otra matriz C20:I35 para "pegar" en la fila que corresponda por ser la primera fila libre
por ejemplo, la C26:I26, (se trata de una sola celda de formato combinada)..., el contenido de la celda P5
que contiene diversos textos concatenados que forman el todo de un informe.
Como quiera que en las citadas matrices existen formulas del tipo BuscarV en todas las celdas...
no se como llegar a la primera celda libre donde no haya un tinforme ya pasado, sino unicamente la formula citada.
Este es el primer problema.



=> podrias exponer (exactamente) las formulas del tipo buscarv que contienen las celdas combinadas (?)
(al menos) como para poder entender como debieran ser identificadas como "celdas libres" (ya que tienen formulas) -?????-

3) si continuamos hablando de celdas "combinadas" (cuando dices):

Otro problema es que cuando copiaba la celda P5 para trasladarla a la celda combinada C26:I26
me sale un mensaje de error de que no se puede pegar
porque las celdas de copiado y pegado no tienen el mismo formato como para pegar "solo valores".



=> considera que en un rango de celdas combinadas, solo la primer celda del rango contiene "los datos"
el resto de celdas (en el rango combinado) son celdas vacias (pero que "estorban" a la navegacion, conteo, seleccion, etc.)

4) continuando con el tema de las celdas combinadas (en esta parte de tu consulta...)

Sin embargo al copiar el contenido de P5 en P19 ya como texto, si copio esta ultima celda
y lo intento pegar en la celda combinada C26, el pegado normal lo admite
y como vereis en el codigo que grabe puedo a posteriori "pegar" el formato de la celda anterior...



=> no es lo mismo hacer un "copy" de una celda (P19) y "pegarla" en la primer celda de un rango combinado (C26)
que tratar de hacer el "pegado" (de UNA CELDA copiada) haciendo referencia al rango de celdas combinadas (C26:I26)

omito (re)transcribir el codigo (por razon de la "mezcla") y espero que puedas exponer detalles mas concisos (?)
saludos,
hector.
Respuesta Responder a este mensaje
#2 José Rafael
25/08/2009 - 11:20 | Informe spam
Gracias Héctor y sobre todo por tu paciencia intentando averiguar lo que
queremos... entre tanto, lo he solucionado de otra manera quizás complicada
o rebuscada pero efectiva. Sé que utilizo muchas lineas de código que se
podrían resumir o escribir de otra manera y que algunas sobra pero ya
sabes soy muy novato.
De todas formas por si es de alguna utilidad para alguien pongo el código
que utilizo y hace lo que necesito:

Sub Actualizarinformes()
'
' Actualizarinformes Macro
' Macro grabada el 25/07/2009 por hes040
'
Dim fila As Integer
Dim columna As String
Application.ScreenUpdating = False
Sheets("Crear informes").Select
Range("B20").Select
ActiveCell.FormulaR1C1 = "=RC[25]"
Range("C20:I20").Select
ActiveCell.FormulaR1C1 = "=RC[25]"

Range("B20:B35").Select
Selection.FillDown
ActiveWindow.SmallScroll Down:=-36
Range("C20:I35").Select
Selection.FillDown
Range("B20:I35").Select
Selection.Copy


'solución al problema que habia planteado

Sheets("Crear informes").Select
For fila = 20 To 35
If Range("AA" & fila).Value = 0 Then Range("AA" & fila).ClearContents
If Range("AB" & fila).Value = 0 Then Range("AB" & fila).ClearContents
'End If
Next fila




' RESTABLECE LA COPIA DEL INFORME
Sheets("Crear informes").Select

Range("AD20:AE35").Select
Selection.Copy

Range("AA20").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll ToRight:=-18
Range("B26").Select
'PREPARA LAS CELDAS A COPIAR DE CREAR INFORMES
Range("B20:B35").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False

Range("C20:I35").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("M36").Select
Application.ScreenUpdating = True



Sheets("Crear informes").Select
For fila = 20 To 35
If Range("B" & fila).Value = 0 Then Range("B" & fila).ClearContents
If Range("C" & fila).Value = 0 Then Range("C" & fila & ":I" &
fila).ClearContents
'End If
Next fila

Sheets("Crear informes").Select
Range("M1").Select
Range("M1") = "Actualizado"
Range("L20").Select

Range("L20").ClearContents
End Sub


MUCHAS GRACIAS POR TU TIEMPO. (lo digo con altavoz... jeje)




"Héctor Miguel" escribió en el mensaje
news:
hola, José Rafael !

1) hay algunas inconsistencias en esta consulta (p.e.) dices:

Tengo una matriz dentro del codigo... B20:B35 para poner la fecha que
contiene la celda P1
... en la primera celda libre por ejemplo la B26



y en el codigo que expones, tienes una "mezcla" de instrucciones que
(supongo) SI funcionan
con otras del tipo "como quisieras" que funcionaran (pero se entiende que
NO) p.e.
Range("C26:I26").Select '(esta es la primera celda combinada libre de
texto, aunque con una formula BuscarV, destino del contenido de P19)



OJO: si contiene una formula buscarv... como puede ser al mismo tiempo
considerada como una "celda libre" ?????

2) de forma similar, y hablando de celdas "combinadas", cuando dices:

y por otro lado otra matriz C20:I35 para "pegar" en la fila que
corresponda por ser la primera fila libre
por ejemplo, la C26:I26, (se trata de una sola celda de formato
combinada)..., el contenido de la celda P5
que contiene diversos textos concatenados que forman el todo de un
informe.
Como quiera que en las citadas matrices existen formulas del tipo BuscarV
en todas las celdas...
no se como llegar a la primera celda libre donde no haya un tinforme ya
pasado, sino unicamente la formula citada.
Este es el primer problema.



=> podrias exponer (exactamente) las formulas del tipo buscarv que
contienen las celdas combinadas (?)
(al menos) como para poder entender como debieran ser identificadas
como "celdas libres" (ya que tienen formulas) -?????-

3) si continuamos hablando de celdas "combinadas" (cuando dices):

Otro problema es que cuando copiaba la celda P5 para trasladarla a la
celda combinada C26:I26
me sale un mensaje de error de que no se puede pegar
porque las celdas de copiado y pegado no tienen el mismo formato como
para pegar "solo valores".



=> considera que en un rango de celdas combinadas, solo la primer celda
del rango contiene "los datos"
el resto de celdas (en el rango combinado) son celdas vacias (pero que
"estorban" a la navegacion, conteo, seleccion, etc.)

4) continuando con el tema de las celdas combinadas (en esta parte de tu
consulta...)

Sin embargo al copiar el contenido de P5 en P19 ya como texto, si copio
esta ultima celda
y lo intento pegar en la celda combinada C26, el pegado normal lo admite
y como vereis en el codigo que grabe puedo a posteriori "pegar" el
formato de la celda anterior...



=> no es lo mismo hacer un "copy" de una celda (P19) y "pegarla" en la
primer celda de un rango combinado (C26)
que tratar de hacer el "pegado" (de UNA CELDA copiada) haciendo
referencia al rango de celdas combinadas (C26:I26)

omito (re)transcribir el codigo (por razon de la "mezcla") y espero que
puedas exponer detalles mas concisos (?)
saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida