Alerta en excel
¿Hola, cómo está?, tengo en una hoja un listado de valores que cotizan en bolsa con sus respectivas subidas y bajadas (%), necesitaría un evento en vba, que cuando alcanzen un determinado % ya sea positivo o negativo, me saltara una alerta de dicho acontecimiento.
Gracias por la ayuda
Gracias por la ayuda
Respuesta de Isaac Reyes
1
1
Isaac Reyes, Es mejor enseñar a pescar que dar el pescado
¿Los valores que quieres monitorear son asignados por fórmula o de que forma?
¿Los valores están en una columna o fila específica?
¿Los valores están en una columna o fila específica?
Hola nuevamente, los valores están una columna (A2:A20) y sus valores en (B2:B20), vienen todos desde una consulta web.
Gracias nuevamente
Gracias nuevamente
Ok, según lo que entendí, me dices que los valores que deseas monitorear están en A2:A20 y que sus límites están en B2:B20.
Voy a suponer que en B están los límites superiores para los valores de A, por tanto, cuando los valores en A tomen un valor igual o superior a B, te lanzará una alerta (estos supuestos, porque tu pregunta no es suficiente mente clara)
Para ello, en la sección de código de la hoja en la que vas a trabajar, debes agregar esto
'-----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'Validar que la celda modificada este en la columna A, entre las filas 2 y 20
If Target.Row >= 2 And Target.Row <= 20 And Target.Column = 1 Then
'Verificar si el valor de la columna A ha superado al de la columna B
If Target.Value >= Cells(Target.Row, 2) Then
MsgBox "Se ha sobrepasado el límite", vbExclamation, "Límite"
End If
End If
End Sub
'-------------------------
Esto lo puedes adaptar a tus requerimientos específicos.
Cualquier consulta, no dudes en preguntar.
Voy a suponer que en B están los límites superiores para los valores de A, por tanto, cuando los valores en A tomen un valor igual o superior a B, te lanzará una alerta (estos supuestos, porque tu pregunta no es suficiente mente clara)
Para ello, en la sección de código de la hoja en la que vas a trabajar, debes agregar esto
'-----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'Validar que la celda modificada este en la columna A, entre las filas 2 y 20
If Target.Row >= 2 And Target.Row <= 20 And Target.Column = 1 Then
'Verificar si el valor de la columna A ha superado al de la columna B
If Target.Value >= Cells(Target.Row, 2) Then
MsgBox "Se ha sobrepasado el límite", vbExclamation, "Límite"
End If
End If
End Sub
'-------------------------
Esto lo puedes adaptar a tus requerimientos específicos.
Cualquier consulta, no dudes en preguntar.
Hola nuevamente, no era eso precisamente pero me vale para otro tipo de cálculo, en el ejemplo que nos lleva, (A2:A20) Repsol, telefónica, bbva. Etc, (B2:B20) 0.04%, -0.10%, 0.7%, etc. Lo que necesito por ejemplo que cuando Repsol alcance la cuota de 0.05% me salte la alerta o cuando telefónica alcance el valor de -0.15% también me salte la alerta.
Gracias nuevamente
Gracias nuevamente
Con la palabra "alcance" ¿te refieres a que tome un valor: mayor que, menor que, igual que, menor igual que o mayor igual que?
Ej:
Que Repsol alcance la una cuota de 0.5 quiere decir que la alerta tiene que aparecer cuando Repsol tome un valor menor o igual que -0.15%.
¿Los valores límite los tendrás en una tabla o los establecerás por código nada más?
El código podría ser casi el mismo o variar bastante, pero sin antes aclarar lo anterior, no puedo hacer mucho más.
Ej:
Que Repsol alcance la una cuota de 0.5 quiere decir que la alerta tiene que aparecer cuando Repsol tome un valor menor o igual que -0.15%.
¿Los valores límite los tendrás en una tabla o los establecerás por código nada más?
El código podría ser casi el mismo o variar bastante, pero sin antes aclarar lo anterior, no puedo hacer mucho más.
Hola de nuevo, yo le quiero poner un tope max y un tope min, ejemplo "Repsol cotiza a +0.04% de su precio de cierre anterior, pues cuando llegue a la cota de +0.05% me salte la alarma de comprar y cuando llegue a la cota de -0.01% me salte la alarma de vender" y lo mismo con el resto de valores, soy muy malo para explicarme je je. Los topes tanto max como min se establecerán mediante código, por que cada valor cotizará diferente.
Saludos y gracias
Saludos y gracias
Ok, ya estamos más claros.
Definiremos un arreglo con los topes máximos y mínimos.
Private Sub Worksheet_Change(ByVal Target As Range)
'Definir Cotas
Dim Cotas(2 To 20, 1 To 2) As Double
'Ahora tienes que definir cada una de las cotas, para cada item.
'En la posición con índice 2, estarán los valores para el item de la fila 2, en la 3 los valores para el item 3 y así.
'Supongamos que tenemos Repsol en la 2 y telefónica en la 3
Cotas(2,1) = -0.01 'Mínima Repsol
Cotas(2,2) = 0.05 'Máxima Repsol
Cotas(3,1) = 0.1 'Mínima Telefónica
Cotas(3,2) = 0 'Máxima Telefónica
'Lo de telefonica es un supuesto
'Validar que la celda modificada este en la columna A, entre las filas 2 y 20
If Target.Row >= 2 And Target.Row <= 20 And Target.Column = 1 Then
'Verificar si el valor de la columna A ha superado al de la columna B
If Target.Value <= Cotas(Target.Row, 1) Then
MsgBox "Vender", vbExclamation, "Límite"
End If
If Target.Value >= Cotas(Target.Row, 2) Then
MsgBox "Comprar", vbExclamation, "Límite"
End If
End If
End Sub
Definiremos un arreglo con los topes máximos y mínimos.
Private Sub Worksheet_Change(ByVal Target As Range)
'Definir Cotas
Dim Cotas(2 To 20, 1 To 2) As Double
'Ahora tienes que definir cada una de las cotas, para cada item.
'En la posición con índice 2, estarán los valores para el item de la fila 2, en la 3 los valores para el item 3 y así.
'Supongamos que tenemos Repsol en la 2 y telefónica en la 3
Cotas(2,1) = -0.01 'Mínima Repsol
Cotas(2,2) = 0.05 'Máxima Repsol
Cotas(3,1) = 0.1 'Mínima Telefónica
Cotas(3,2) = 0 'Máxima Telefónica
'Lo de telefonica es un supuesto
'Validar que la celda modificada este en la columna A, entre las filas 2 y 20
If Target.Row >= 2 And Target.Row <= 20 And Target.Column = 1 Then
'Verificar si el valor de la columna A ha superado al de la columna B
If Target.Value <= Cotas(Target.Row, 1) Then
MsgBox "Vender", vbExclamation, "Límite"
End If
If Target.Value >= Cotas(Target.Row, 2) Then
MsgBox "Comprar", vbExclamation, "Límite"
End If
End If
End Sub
Perfecto¡, pero ahora me surge otra duda, hemos puesto las mínimas fijas, ¿podrían ser aleatorias con referencia a alguna celda en particular?, me explico, en el valor 'repsol' desde que abre el mercado bursátil hasta que cierra, el precio sufre diferentes variaciones tanto positivas como negartivas, habría alguna forma de fijar ese precio mínimo o máximo, cuando aparezca, ¿se quede fijo y se cambie cuando nuevamente el precio lo rebase?
Gracias otra vez
Gracias otra vez
En la misma hoja o en otra, has una lista con las mínimas y las máximas de cada item. Luego, en lugar de comparar con la matriz Cotas, comparas con el contenido de la lista que hiciste (la mariz cotas se elimina)
Supongamos que la Hoja3 en H pones la mínima y en I, la máxima y que las filas que utilizas son las mismas que utrilizas para cada item.
'Ahora tienes que definir cada una de las cotas, para cada item.
'En la posición con índice 2, estarán los valores para el item de la fila 2, en la 3 los valores para el item 3 y así.
'Lo de telefonica es un supuesto
'Validar que la celda modificada este en la columna A, entre las filas 2 y 20
If Target.Row >= 2 And Target.Row <= 20 And Target.Column = 1 Then
'Verificar si el valor de la columna A es inferior que la columna H
If Target.Value <= Sheets("Hoja3").Cells(Target.Row, 8).Value Then
MsgBox "Vender", vbExclamation, "Límite"
'Reajustar valor
Sheets("Hoja3").Cells(Target.Row, 8).Value = Target.Value
End If
'Verificar si el valor de la columna A es inferior que la columna I
If Target.Value >= Sheets("Hoja3").Cells(Target.Row, 9).Value Then
MsgBox "Comprar", vbExclamation, "Límite"
'Reajustar valor
Sheets("Hoja3").Cells(Target.Row, 9).Value = Target.Value
End If
End If
End Sub
Todo lo que está en negrita es lo que cambió.
Supongamos que la Hoja3 en H pones la mínima y en I, la máxima y que las filas que utilizas son las mismas que utrilizas para cada item.
'Ahora tienes que definir cada una de las cotas, para cada item.
'En la posición con índice 2, estarán los valores para el item de la fila 2, en la 3 los valores para el item 3 y así.
'Lo de telefonica es un supuesto
'Validar que la celda modificada este en la columna A, entre las filas 2 y 20
If Target.Row >= 2 And Target.Row <= 20 And Target.Column = 1 Then
'Verificar si el valor de la columna A es inferior que la columna H
If Target.Value <= Sheets("Hoja3").Cells(Target.Row, 8).Value Then
MsgBox "Vender", vbExclamation, "Límite"
'Reajustar valor
Sheets("Hoja3").Cells(Target.Row, 8).Value = Target.Value
End If
'Verificar si el valor de la columna A es inferior que la columna I
If Target.Value >= Sheets("Hoja3").Cells(Target.Row, 9).Value Then
MsgBox "Comprar", vbExclamation, "Límite"
'Reajustar valor
Sheets("Hoja3").Cells(Target.Row, 9).Value = Target.Value
End If
End If
End Sub
Todo lo que está en negrita es lo que cambió.
- Compartir respuesta
- Anónimo
ahora mismo