Solicitud de asistencia para cálculo de costos en hoja de Excel

  • Autor Autor Miguel92
  • Fecha de inicio Fecha de inicio
Miguel92

Miguel92

Alfa
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos!

Estoy realizando un archivo Excel que contiene una hoja llamada Productos y otra llamada Recetas, en Productos tengo todos los ingredientes y algunas cosas más la tabla esta conformada así, claramente los precios están desactualizados
1726093073203.png


En la hoja "Recetas" es así
1726093134806.png


Pero lo que estaría buscando es que en la columna seleccionada "Recetas D5", tenga que realizar una formula que primero compruebe si existe alguna opción seleccionada en C5 (en mi caso) y dependiendo si elige Und, Kg, Gr, Lt, Ml hará una cuenta diferente, luego tenga que buscar el producto en Productos y desde allí buscar la cantidad y precio para realizar las operaciones.

porque tenia una formula algo similar a esto, pero se ve que en algún momento lo modifique sin darme cuenta y quedo así, era mucho más largo
Insertar CODE, HTML o PHP:
=SI(D7="";"";(SI(D7="Und";((BUSCAR(B7;Tabla1[#Todo];Tabla1[[#Todo];[Columna4]])/BUSCAR(B7;Tabla1[#Todo];Tabla1[[#Todo];[Columna2]])*C7));(BUSCAR(B7;Tabla1[#Todo];Tabla1[[#Todo];[Columna4]])/1000)*C7)))

Lo trate de hacer con VBA , pero no me esta saliendo...
Función en VBA
Insertar CODE, HTML o PHP:
Function CalcularCosto(celdaProducto As Range, celdaCantidad As Range, celdaUnidad As Range) As Variant
    Dim ws As Worksheet
    Dim rng As Range
    Dim precioUnitario As Double
    Dim cantidadEnTabla As Double
    Dim precioTotal As Double
    Dim cantidad As Double
    Dim unidad As String
    Dim producto As String
   
    Set ws = ThisWorkbook.Sheets("Productos")
   
    ' Verificar si los parámetros están vacíos
    If IsEmpty(celdaProducto.Value) Or IsEmpty(celdaCantidad.Value) Or IsEmpty(celdaUnidad.Value) Then
        CalcularCosto = ""
        Exit Function
    End If
   
    cantidad = celdaCantidad.Value
    unidad = LCase(celdaUnidad.Value)
    producto = celdaProducto.Value
   
    ' Definir el rango de búsqueda
    Set rng = ws.Range("A3:D" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
   
    ' Obtener el precio y la cantidad en la tabla
    On Error Resume Next
        precioUnitario = Application.WorksheetFunction.VLookup(producto, rng, 4, False)
        cantidadEnTabla = Application.WorksheetFunction.VLookup(producto, rng, 2, False)
        unidadProducto = Application.WorksheetFunction.VLookup(producto, rng, 3, False)
    On Error GoTo 0
   
    ' Verificar si el producto no fue encontrado
    If IsError(precioUnitario) Or IsError(cantidadEnTabla) Then
        CalcularCosto = "Unidad no reconocida"
        Exit Function
    End If
   
    ' Cálculo del costo basado en la unidad
    Select Case LCase(unidad)
        Case "und"
            ' Cálculo directo si la unidad es "und"
            precioTotal = (precioUnitario / cantidad) * cantidadEnTabla

        Case "ml"
            ' Si el precio es por 1 litro, convertimos los ml a litros y calculamos el costo
            precioTotal = (precioUnitario / (cantidadEnTabla * 1000)) * cantidad

        Case "lt"
            ' Si el precio ya está por litro, el cálculo es directo
            precioTotal = (precioUnitario / cantidadEnTabla) * cantidad

        Case "gr"
            ' Verificar si el precio en la tabla está en kilogramos
            If LCase(unidadProducto) = "kg" Then
                ' Convertimos la cantidad de la tabla a gramos
                precioTotal = (precioUnitario / (cantidadEnTabla * 1000)) * cantidad
            Else
                ' Si ya está en gramos, no hacemos la conversión
                precioTotal = (precioUnitario / cantidadEnTabla) * cantidad
            End If

        Case "kg"
            ' Cálculo directo si ya está en kilogramos
            precioTotal = (precioUnitario / cantidadEnTabla) * cantidad

        Case Else
            ' Si la unidad no es reconocida, devolver un valor vacío o un guion para indicar que no se puede calcular
            CalcularCosto = ""
            Exit Function
    End Select
   
    CalcularCosto = precioTotal
End Function
Porque mi idea era usarlo así
1726095365740.png

Pero me queda así
1726095409498.png


Si traté de hacerlo con Chat GPT, pero me devuelve casi cerca lo que quiero, pero lo tengo que terminar editando y reescribiéndolo.

De todas formas les dejo el archivo para que lo vean(lo tuve que comprimir ya que no me deja subir el Costo2.xlsm)... Y si conocen algún tutorial o algo similar para sacar el costo del producto, díganme y lo busco, así lo hago. Cabe recalcar que no soy experto y tampoco conozco mucho Excel...

El archivo esta habilitado para macros, ya que tiene un formulario para agregar un nuevo producto, y un botón para agregar una nueva receta.

Desde ya muchas gracias y espero haberme explicado más o menos lo que estoy buscando.
 

Adjuntos

Última edición:
Hola,

Por lo que veo, estás tratando de establecer un cálculo de costos basado en varios parámetros seleccionables. Entiendo tu inconveniente y espero poder ayudarte.

Aunque no puedo ver directamente tu archivo desde aquí, puedo sugerir que intentes usar una combinación de funciones de búsqueda como VLOOKUP (BUSCARV) o INDEX MATCH (INDICE COINCIDIR) para encontrar los valores en la hoja de productos basándote en lo seleccionado en la hoja de recetas.

Por otro lado, puedes usar la función IF (SI) para crear diferentes métodos de cálculo basados en la unidad de medida seleccionada.

Este sería un acercamiento usando fórmulas en lugar de VBA. Podrías investigar un poco más sobre estas funciones y cómo se pueden combinar para lograr lo que necesitas.

Un consejo adicional sería buscar tutoriales de Excel online sobre "cálculos condicionales" y "funciones de búsqueda".

Espero haber sido de ayuda. ¡Buena suerte!
 
Atrás
Arriba