VBA Si color de celda buscar un valor en una celda

Resuelto
jambontomate Mensajes publicados 44 Estado Miembro -  
jambontomate Mensajes publicados 44 Estado Miembro -
Hola a todos,

Tengo celdas con colores (por ejemplo: B2:B10 son amarillas). La idea es:

Si B2=amarillo, B3 = "valor de la celda F19 de la hoja XXXX".

¿Cómo escribirlo en VBA, gracias, o fórmula si no es necesario VBA (aún mejor)?

Muchas gracias.

3 respuestas

  1. g Mensajes publicados 1285 Estado Miembro 578
     
    Hola,

    Sub privado Hoja_CambioSeleccion(ByVal Objetivo Como Rango)
    Si Rango("B2").Interior.ColorIndex = 6 Entonces
    Rango("B3") = Hojas("Hoja2").Rango("F19")
    Fin Si
    Fin Sub

    Atentamente
    1
    1. jambontomate Mensajes publicados 44 Estado Miembro 1
       
      ¡Gracias, lo modificaré y veré si está todo bien, gracias!
      0
    2. jambontomate Mensajes publicados 44 Estado Miembro 1
       
      Un comentario: Si esta idea se aplica a un rango de celdas, por ejemplo: rango de celdas B2:B20 si B2:B10 = amarillo entonces C2:C10 = "valor de la hoja "xxx" de la celda "Y" si B10:B20 = rojo entonces C10:C20 = "valor de la hoja "xxx" de la celda "Y".

      ¿La fórmula VBA cambia radicalmente o solo es poner rango(B2:B20)...? Gracias
      0
    3. g Mensajes publicados 1285 Estado Miembro 578
       
      El código cambia, pero para poder establecerlo, se necesitan datos precisos.
      Nombre de las hojas, designación de las celdas de comando, designación de las celdas de resultado, etc....
      Incluso se puede adjuntar un archivo lleno.
      0
    4. g Mensajes publicados 1285 Estado Miembro 578
       
      De lo contrario, puedes ver con este código para los valores de retorno en Hoja2 F19 y F20

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      For i = 2 To 10
      If Range("B" & i).Interior.ColorIndex = 6 Then
      Range("C" & i) = Sheets("Hoja2").Range("F19")
      ElseIf Range("B" & i).Interior.ColorIndex <> 6 Then
      Range("C" & i) = ""
      End If
      Next i
      For j = 11 To 20
      If Range("B" & j).Interior.ColorIndex = 3 Then
      Range("C" & j) = Sheets("Hoja2").Range("F20")
      ElseIf Range("B" & j).Interior.ColorIndex <> 3 Then
      Range("C" & j) = ""
      End If
      Next j
      End Sub
      0
    5. jambontomate Mensajes publicados 44 Estado Miembro 1
       
      Esta noche adjuntaré un archivo porque aquí la seguridad del trabajo bloquea. De hecho, va a ser más complicado para la macro.

      Voy a tener una columna B2:B100 con cuatro colores fijos (azul, amarillo, naranja, rojo) que pueden cambiar en las celdas de esta columna a menudo.

      Me gustaría, si es posible, que la macro busque para las celdas C2:C100, a cada cambio de color, un valor diferente (en este caso: cuatro valores diferentes = cuatro colores diferentes)

      Ej: para el color amarillo el valor de la celda B19 de la hoja 1, para el color azul el valor de la celda B19 de la hoja 2, etc.

      La dificultad de esta macro es que las celdas de colores pueden cambiar de rango, un día B2:B10 amarillo y al día siguiente B4:15 azul, etc.

      ¿Es posible ya? Si es posible, les enviaré un archivo esta noche con un ejemplo si no está claro.
      0
  2. Mike-31 Mensajes publicados 18203 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Hola,

    ¿Cómo están coloreadas tus celdas, manualmente o con formato condicional?
    Si es formato condicional, ¿cuál es la forma de tu formato?

    --
    A+
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
    1. jambontomate Mensajes publicados 44 Estado Miembro 1
       
      Las celdas iniciales manualmente. Luego, mediante VBA, las otras celdas toman automáticamente el color de las celdas iniciales.
      0
  3. jambontomate Mensajes publicados 44 Estado Miembro 1
     
    Una observación: Si esta idea se aplica a un rango de celdas, ej: rango de celdas B2:B20, si B2:B10 = amarillo entonces C2:C10 = "valor de la hoja "xxx" de la celda "Y"; si B10:B20 = rojo entonces C10:C20 = "valor de la hoja "xxx" de la celda "Y".

    ¿La fórmula VBA cambia radicalmente o solo hay que poner range(B2:B20)...? Gracias.
    0