Crear función en Excel que realice unos cálculos en función de los valores de las celdas seleccionadas

Crear función en Excel que realice unos cálculos en función de los valores de las celdas seleccionadas.

Para ello acompaño el código utilizado en Vba, pero no me funciona.

Function METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE(Tipo_conducto As String, valor_unión_espesor As Double, Pieza As String, Ancho1 As Double, Alto1 As Double, Largo1 As Double,)

 If Range("b3") = "Conducto metálico unión Vaina" Or "Conducto metálico unión Metu 20 mm" Or "Conducto metálico unión Metu 30 mm" Or "Conducto metálico unión Metu 40 mm" Or "Conducto metálico, otra unión Según fabricante" Then

    Select Case Pieza

        Case "FC01-Conducto Recto Chapa"

            METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

            If (METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE < 1) Then

                    METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 1

              Else

                METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

            End If

        Case "FC02-Codo Curvo Chapa2"

            METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

            If (METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE < 1) Then

                    METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 1

              Else

                METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

            End If

        Case "FC03-Codo Recto Chapa"

            METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

            If (METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE < 1) Then

                    METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 1

              Else

                METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

            End If

Else

    METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE = 0  

End If            

End Function

1 Respuesta

Respuesta
2

Debes explicar con ejemplos qué necesitas.

Debes poner un ejemplo para cada caso de la función.

Es decir, qué datos le pasas a la función y qué esperas de resultado.


En un vistazo rápido, al final del último Case, te falta la instrucción End Select


Otros detalles:

Function METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE(Tipo_conducto As String, valor_unión_espesor As Double, Pieza As String, Ancho1 As Double, Alto1 As Double, Largo1 As Double,)

El parámetro "Tipo_conducto " no lo utilizas en la función, entonces no deberías pedirlo como parámetro.

Al final de los parámetros tienes una coma demás.


En lo sucesivo puedes poner el código, aquí en el foro, utilizando el icono para insertar código:

Se vería algo así:

Function METROS_CUADRADOS_CONDUCTOS_Pestaña_UNE(Tipo_conducto As String, valor_unión_espesor As Double, Pieza As String, Ancho1 As Double, Alto1 As Double, Largo1 As Double)
  If Range("b3") = "Conducto metálico unión Vaina" Or "Conducto metálico unión Metu 20 mm" Or "Conducto metálico unión Metu 30 mm" Or "Conducto metálico unión Metu 40 mm" Or "Conducto metálico, otra unión Según fabricante" Then
    Select Case Pieza
      Case "FC01-Conducto Recto Chapa"
      '...

Veo que sin importar la pieza, aplicas la misma fórmula:

x = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + valor_unión_espesor)

Revisa si la fórmula es correcta.

Ajusté el código de la función. Revisa el orden de los parámetros de entrada. Primero puse los textos y después los valores.

Podría quedar simplificada de esta manera:

Function m2conductos(Tipo_conducto As String, Pieza As String, _
                     Espesor As Double, Ancho1 As Double, Alto1 As Double, Largo1 As Double)
  Select Case Tipo_conducto
    Case "Conducto metálico unión Vaina", "Conducto metálico unión Metu 20 mm", _
         "Conducto metálico unión Metu 30 mm", "Conducto metálico unión Metu 40 mm", _
         "Conducto metálico, otra unión Según fabricante"
      Select Case Pieza
        Case "FC01-Conducto Recto Chapa", "FC02-Codo Curvo Chapa2", "FC03-Codo Recto Chapa"
          m2conductos = 2 * ((Ancho1 + Alto1) / 1000) * (Largo1 / 1000 + Espesor)
          If m2conductos < 1 Then m2conductos = 1
      End Select
    Case Else
      m2conductos = 0
  End Select
End Function

Ejemplo:

[Si te ayuda la respuesta, al final hay un botón para valorarla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas