Fórmula en rango.

23/03/2010 - 09:28 por César | Informe spam
Hola a todos.

En una hoja en el rango A1:A100 tengo distintos textos.

Range(“B1:B100”).Value = Range(“B1:B100”).Offset(0,-1).Value

y en cada celda del rango B1:B100 me pone su valor correspondiente del rango
A1:A100

Si en vez del valor quiero que en cada celda de B1:B100 me ponga si la celda
correspondiente de A1:A100 está en negrita. ¿Cómo lo puedo hacer?

Estoy buscando una solución que haga ‘de golpe’ el bloque completo, no con
bucles, el libro real tiene varios miles de filas y un bucle se demora
bastante.

Gracias anticipadas.

Saludos.

Preguntas similare

Leer las respuestas

#1 Benito Merino
23/03/2010 - 17:26 | Informe spam
Hola.

Lo que quieres me parece que no lo puedes hacer en bloque.

Mi propuesta es:
Sub prueba()
For Each celda In Range("B1:B100")
If celda.Offset(0, -1).Font.Bold = -1 Then
celda.Value = "negrita"
Else
celda.Value = "normal"
End If
Next
End Sub

Saludos

Benito Merino
Barcelona
Respuesta Responder a este mensaje
#2 Juan Español
23/03/2010 - 18:04 | Informe spam
Hola Cesar:

En la ventana de inmediato teniendo activa la hoja que quieras valorar:

FOR n = 1 to 100:Range("B" & n & ":B" & n).Value = Range("A" & n & ":A" &
n).Font.Bold = True:NEXT

Cambia el 1 to 100 por lo que te convenga.

Con respecto a que un bucle retrasa mucho la ejecución...

Este código

hi = timer:FOR n = 1 to 50000:Range("B" & n & ":B" & n).Value = Range("A" &
n & ":A" & n).Font.Bold = True:next:? timer - hi

En tres ensayos me da como resultado:
3,996094
3,96875
3,988281
Es decir, siempre menos de 4'' para 50000 filas. Tú dirás.

Saludos.-


"César" escribió en el mensaje de noticias
news:
Hola a todos.

En una hoja en el rango A1:A100 tengo distintos textos.

Range(“B1:B100”).Value = Range(“B1:B100”).Offset(0,-1).Value

y en cada celda del rango B1:B100 me pone su valor correspondiente del
rango
A1:A100

Si en vez del valor quiero que en cada celda de B1:B100 me ponga si la
celda
correspondiente de A1:A100 está en negrita. ¿Cómo lo puedo hacer?

Estoy buscando una solución que haga ‘de golpe’ el bloque completo, no con
bucles, el libro real tiene varios miles de filas y un bucle se demora
bastante.

Gracias anticipadas.

Saludos.
Respuesta Responder a este mensaje
#3 Héctor Miguel
24/03/2010 - 05:15 | Informe spam
hola, César !

op1: desde la ventana de inmediato en el editor de vba, copia/pega (o escribe) lo siguiente
(adapta segun tu rango de filas real, y pulsa {enter} para su ejecucion)

for n = 1 to 10: range("b" & n) = range("a" & n).font.bold: next

op2: prueba definiendo un nombre-formula con las macro-funciones del (viejo ?) excel v-4
a) selecciona la celda en referencia "relativa" entre donde quieres el resultado y de cual columna se comprueba
p.e. si quieres el resultado en [B1] haciendo referencia a [A1] => SELECCIONA [B1]
b) (menu) insertar / nombre / definir... (OJO: nota el signo de vinculalcion hoja!celda => "!")
nombre formula
Izq.Negrita =indicar.celda(20+0*hoy(),!a1)
c) aun en [B1] solo aplica "el nombre" (p.e. =izq.negrita) y pulsa enter
d) este nombre siempre buscara si la celda de la columna izquierda tiene formato de "negrita" (20)

saludos,
hector.

__ OP __
En una hoja en el rango A1:A100 tengo distintos textos.
Range("B1:B100").Value = Range("B1:B100").Offset(0,-1).Value
y en cada celda del rango B1:B100 me pone su valor correspondiente del rango A1:A100
Si en vez del valor quiero que en cada celda de B1:B100
me ponga si la celda correspondiente de A1:A100 esta en negrita. Como lo puedo hacer?
Estoy buscando una solucion que haga "de golpe" el bloque completo, no con bucles
el libro real tiene varios miles de filas y un bucle se demora bastante.
Respuesta Responder a este mensaje
#4 Héctor Miguel
24/03/2010 - 05:26 | Informe spam
hola (de nuevo), César !

si dejas creado el nombre, puedes usarlo en cualquier otro rango (siempre con referencia a la celda en la columna izquierda)
y luego conviertes el resultado de los nombres a valores constantes (el nombre dejara de re-calcularse cada vez)
p.e. con los valores/formatos/... en el rango [B15:B34] pones si negritas (verdadero/falso) en el rango [C15:C34]

With [c15:c34]
.Formula = "=izq.negrita": .Value = .Value
End With

saludos,
hector.

op2: prueba definiendo un nombre-formula con las macro-funciones del (viejo ?) excel v-4
a) selecciona la celda en referencia "relativa" entre donde quieres el resultado y de cual columna se comprueba
p.e. si quieres el resultado en [B1] haciendo referencia a [A1] => SELECCIONA [B1]
b) (menu) insertar / nombre / definir... (OJO: nota el signo de vinculalcion hoja!celda => "!")
nombre formula
Izq.Negrita =indicar.celda(20+0*hoy(),!a1)
c) aun en [B1] solo aplica "el nombre" (p.e. =izq.negrita) y pulsa enter
d) este nombre siempre buscara si la celda de la columna izquierda tiene formato de "negrita" (20)

saludos,
hector.

__ OP __
En una hoja en el rango A1:A100 tengo distintos textos.
Range("B1:B100").Value = Range("B1:B100").Offset(0,-1).Value
y en cada celda del rango B1:B100 me pone su valor correspondiente del rango A1:A100
Si en vez del valor quiero que en cada celda de B1:B100
me ponga si la celda correspondiente de A1:A100 esta en negrita. Como lo puedo hacer?
Estoy buscando una solucion que haga "de golpe" el bloque completo, no con bucles
el libro real tiene varios miles de filas y un bucle se demora bastante.




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