¿Cómo puedo poner más corto este código?

Tengo este código. Pero debo repetirlo constantemente para que me realice esta función en toda la columna lo que quiero es que me haga esta función pero con toda la columna B, DE y E no se si me explico.

If Sheets("Hoja1").Range("B24") = Empty Then
Range("D24:E24").Font.ColorIndex = 2
Else
Range("D24:E24").Font.ColorIndex = 1
End If

3 Respuestas

Respuesta
1

Para referenciar toda la columna B, DE y E usa este esta forma:

If Sheets("Hoja1").Range("B24") = Empty Then Range("B:B,D:D,E:E").Font.ColorIndex = 2
If Sheets("Hoja1").Range("B24") <> Empty Then  Range("B:B,D:D,E:E").Font.ColorIndex = 1

Mira estos ejemplos que trabajan con color en celda, quizás te aporte algo más.

https://youtu.be/5w1SV8S0NjQ

https://youtu.be/V_pQbeDdlFY

Acá te muestro como hacer referencia a celdas mediante macros de VBA, es posible te sirva también.

https://youtu.be/UuyFcJnv5MM   

Respuesta
1

Prueba con esta macro

y esta es la mac

Sub colorear()
Set datos = Range("a1").CurrentRegion
With datos
    f = .Columns(1)
    For i = 1 To .Rows.Count
        xcolor = f(i, 1)
        If IsEmpty(xcolor) Then
            .Cells(i, 2).Font.ColorIndex = 3
            .Cells(i, 2).Interior.ColorIndex = 2
        Else
            .Cells(i, 2).Font.ColorIndex = 2
            .Cells(i, 2).Interior.ColorIndex = 5
        End If
    Next i
End With
Set datos = Nothing
End Sub

ro 

¡Gracias!  enserio me ayudo en mucho

¿El código lo modifique a mi gusto y no me sirve por que?

Set datos = Range("A10").CurrentRegion

With datos
f = .Columns(1)
For i = 10 To 10
xcolor = f(i, 1)
If IsEmpty(xcolor) Then
'.Cells(i, 3).Font.ColorIndex = 2
.Cells(i, 2).Font.ColorIndex = 2
.Cells(i, 2).Interior.ColorIndex = 2
'.Cells(i, 4).Interior.ColorIndex = 2
Else
.Cells(i, 2).Font.ColorIndex = 1
.Cells(i, 2).Font.ColorIndex = 1
End If
Next i
End With
Set datos = Nothing

Esta es la macro tuya modificada, primer error cambiar los valores del For a como la programaste le indicaste que fuera del valor 10 al valor 10 y esto significa que recorrerá una sola celda, lo único que ocupabas en la macro inicial era solo cambiar el valor de la A1 por la A10 y los colores del colorindex que por cierto para las letras la instrucción es .font.colorindex=x y para la celda es .interior.colorindex=x, tu tienes dos valores para la letra, si solo quieres cambiar la letra sin cambiar el fondo solo elimina la instrucción para cambiar la celda.

Respuesta

[Hola

No, tu explicación no es totalmente clara. Quizá si das algunos detalles sea más fácil ayudarte. En ese ejemplo que envías, si la celda "B24" está vacía colocas un color de fuente a todo un rango determinado y sino, otro color. ¿Tú lo que quieres ahora es...?

Abraham Valencia

Primeramente Muchas muchas gracias por tomarse el tiempo de ayudarme.Lo que quiero es que mi macro me recibe todas las filas de la columna B y si alguna esta vacía quiero que las filas de su lado derecho se pongan del color "2" . Ya me pude explicar un poco mejor?

Si mal no te entendí, algo así te será útil:

Dim Celda As Range
For Each Celda In Range("B1:B20")
    If Celda = Empty Then
        Celda.Offset(0, 1).Font.ColorIndex = 2
    End If
Next Celda

Solo ajusta tu rango al que deseas.

Comentas

Abraham Valencia

Quiero que haga esto

No me resulto :¿c no soy muy experta en esto pero no tendría que decirle que filas se pondrá de el color que quiero?

Lo que te he enviado hace algo así solo que puse que recorra el rango "B1:B20" y si está vacía alguna celda a la de su derecha se le coloca fuente de color blanco, como en tu imagen. Entonces, yo te he comentado que ajustes el rango, o sea que cámbialo por el tuyo y listo, no habrá problema.

Abraham Valencia

Este seria mi rango For Each Celda In Range("B22:B120") el problema es que yo quiero pinta las columnas "D" y "E"  Como hago para que me ponga colos solo a ea 2 columnas?

Un millón de gracias ya lo resolví

Que bueno. De nada. Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas