Error al crear procedimiento Function

Logre crear la fórmula para dar solución al calculo de la comisión en una planilla. Ahora intente convertir esa fórmula en una función de Excel pero me da error. Adjunto una imagen para que puedas orientarme mejor:

¿Dónde esta el error?... Atenta a tus comentarios...

1 respuesta

Respuesta
3

H o l a:

No sé si faltan tablas o condiciones.

Lo que dices es, para la opción 1:

Si la zona es "norte" y local es 1, entonces que busque la comisión en la tabla 1.

Si no pertenece a la opción 1, entonces es la opción 2:

                        Que busque en la tabla 2.

Pero en la opción 2 hay varias combinaciones:

ZONA            LOCAL

norte                  2

norte                  3

sur                      1

sur                      2

sur                      3

este                    1

este                     2

este                     3

oeste                    1

oeste                    2

oeste                    3


¿Eso es lo que necesitas?

Gracias por responder... No falta ninguna tabla, todo lo que se ve en la imagen es.

Solo cuando la zona es norte y el local es 1 que calcule la comisión con los datos de la tabla1, de lo contrario calculara la comisión con los datos de la tabla2. Con la fórmula que ahí se muestra se hace el calculo, pero quiero crear una función para que así puedan utilizarla con el asistente de funciones.

Espero se entienda mejor y puedas ayudarme. Gracias...:-)

Bien, los datos para enviar a la función son 6, y en el siguiente orden:

  1. La celda del local
  2. La celda de la venta
  3. La celda del item
  4. La celda de la zona
  5. El rango de celdas de la tabla1
  6. El rango de celdas de la tabla2

La función:

Function Comision(wlocal As Range, wventa As Range, witem As Range, wzona As Range, tabla1 As Range, tabla2 As Range)
'Por.Dante Amor
    If UCase(wzona) = "NORTE" And wlocal = 1 Then Set rango = tabla1 Else Set rango = tabla2
    '
    Set b = rango.Columns(1).Find(witem, lookat:=xlWhole)
    If Not b Is Nothing Then
        Comision = wventa * b.Offset(0, 1)
    Else
        Comision = "No existe el item: " & witem & ", en el rango " & rango.Address(False, False)
    End If
End Function

Ejemplo:

=Comision(E5;C5;A5;D5;$H$6:$I$10;$H$15:$I$19)

La dirección de las cedas debe ser relativa "E5,C5,A5,D5", pero el rango de las tablas debe ser absoluta "$H$6:$I$10,$H$15:$I$19"; de esa forma podrás copiar la función hacia abajo sin problemas.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Gracias por responder...

No se entiende el primer if... va o no ya que como aparece en comentario y aparece un solo endif...además como se reutiliza la variable rango que se menciona en ese if... me confundí...

Atenta a tus comentarios

No te preocupes por el código, eso ya lo resolví. El primer IF no está comentado.

Solamente ocupa la función como te lo puse en el ejemplo.


En Visual tienes la opción de poner la sentencia if-then-else-endif, de dos formas, yo estoy empleando una de las formas.

Te anexo el código para que veas cómo se utiliza la otra forma:

Function Comision(wlocal As Range, wventa As Range, witem As Range, wzona As Range, tabla1 As Range, tabla2 As Range)
'Por.Dante Amor
    If UCase(wzona) = "NORTE" And wlocal = 1 Then 
       Set rango = tabla1 
    Else 
       Set rango = tabla2
    End If
    '
    Set b = rango.Columns(1).Find(witem, lookat:=xlWhole)
    If Not b Is Nothing Then
        Comision = wventa * b.Offset(0, 1)
    Else
        Comision = "No existe el item: " & witem & ", en el rango " & rango.Address(False, False)
    End If
End Function

La variable rango la utilizo como un objeto, en el objeto rango, dependiendo de la condición, si es verdadero, establezco la tabla1, de lo contrario establezco la tabla2.


Pero independientemente de si el código se entiende o no, el ejemplo que te puse es claro, solamente tienes que poner en la celda algo como esto:

=Comision(E5;C5;A5;D5;$H$6:$I$10;$H$15:$I$19)

Una vez que establecí en cuál rango voy a hacer la búsqueda, lo siguiente es buscar el item en el objeto rango:

Set b = rango.Columns(1).Find(witem, lookat:=xlWhole)

Luego de la búsqueda, pregunto si encontró el item, si lo encuentra, realiza la multiplicación, de lo contrario te regresa un mensaje.

    If Not b Is Nothing Then
        Comision = wventa * b.Offset(0, 1)
    Else
        Comision = "No existe el item: " & witem & ", en el rango " & rango.Address(False, False)
    End If

Espero que con la explicación ahora sea más clara la función Comision


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas