If then else macro en Excel

Estimado Experto:
Necesito vuestra ayuda con el siguiente macro y es que funciona sólo para una celda, pero yo necesito que funcione para un rango seleccionado de celdas.
Agradezco por anticipado vuestra valiosa ayuda.
Function Variacion()
x = Range("G9").Value
If x <= -3.1 Then
Range("H9").Value = "B.N"
Else
If x < 0.5 And x < -3.1 Then
Range("H9").Value = "E.B"
Else
If x >= -0.5 And x <= 0.5 Then
Range("H9").Value = "E"
Else
If x >= 0.5 And x < 3.1 Then
Range("H9").Value = "E.A"
Else
If x >= 3.1 Then
Range("H9").Value = "A.N"
Else
Range("H9").Value = ""
End If
End If
End If
End If
End If
End Function
Muchas gracias.

1 respuesta

Respuesta
1
No lo dices, pero intuyo que lo necesitas para un rango de celdas dentro de la misma columna.
En ese caso te quedaría así:
Function Variacion()
    For Each oCelda In Range("H9:H20")
        x = oCelda.Value
        If x <= -3.1 Then
            oCelda.Offset(0, 1).Value = "B.N"
        Else
            If x < 0.5 And x < -3.1 Then
                oCelda.Offset(0, 1).Value = "E.B"
            Else
                If x >= -0.5 And x <= 0.5 Then
                    oCelda.Offset(0, 1).Value = "E"
                Else
                    If x >= 0.5 And x < 3.1 Then
                        oCelda.Offset(0, 1).Value = "E.A"
                    Else
                        If x >= 3.1 Then
                            oCelda.Offset(0, 1).Value = "A.N"
                        Else
                            oCelda.Offset(0, 1).Value = ""
                        End If
                    End If
                End If
            End If
        End If
    Next
End Function
Te he puesto en negrita los cambios que he hecho.
En el For deberás sustituir el Rango por el que tu necesites, en el ejemplo he puesto Range("H9:H20")
Espero que te sirva,
Saludos,
Carlos
[email protected]
Estimado Carlos:
Que bendición que haya personas como vosotros los Expertos, quienes nos ayudan a solucionar los problemas que necesitamos resolver en la oficina u otros lugares. Con que facilidad resuelven los problemas.
Fíjate que lo único que hace falta modificar sobre tu sugerencia es que yo no tenga que entrar al Editor de Macros de Excel para modificar el rango que aparece al principio Range("H9:H20"), sino que al seleccionar un rango de celdas (algo así como on selected range).
Soy un aprendiz y espero que me hayas comprendido.
Nuevamente, os lo agradezco muchísimo.
Ok, vamos a hacer así a ver si te vale esto :)
1. Crea un módulo y copia este código (te he puesto en negrita los cambios con respecto a la anterior):
Sub Variacion()
    For Each oCelda In Selection
        x = oCelda.Value
        If x <= -3.1 Then
            oCelda.Offset(0, 1).Value = "B.N"
        Else
            If x < 0.5 And x < -3.1 Then
                oCelda.Offset(0, 1).Value = "E.B"
            Else
                If x >= -0.5 And x <= 0.5 Then
                    oCelda.Offset(0, 1).Value = "E"
                Else
                    If x >= 0.5 And x < 3.1 Then
                        oCelda.Offset(0, 1).Value = "E.A"
                    Else
                        If x >= 3.1 Then
                            oCelda.Offset(0, 1).Value = "A.N"
                        Else
                            oCelda.Offset(0, 1).Value = ""
                        End If
                    End If
                End If
            End If
        End If
    Next
End Sub
2. Ahora en tu hoja, selecciona un rango (por ejemplo selecciona las celda H9:H20 o cualquier otro)
3. Ahora pulsa en el menú: Herramientas - Macros - Macro
4. Selecciona la macro Variación
5. Pulsa en Ejecutar
Estos pasos son para Excel 2003, si tienes 2007 me dices que te miro que pasos son para ejecutar una macro (si no lo sabes).
¿Te valdría así?
Estimado Experto Carlos:
¡Muchas gracias!
¡Mañana lo voy a probar en mi trabajo y si surge algún problema luego te cuento! ¿¡Vale!?
¡Te has ganado los 100 puntos! Lastima que no puedo invitarte a un cerveza para celebrar.
¡ Hasta pronto!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas