No me funciona la fórmula y como realizar los criterios de búsqueda en tabla de Access 2016

Tengo una tabla con la la edad de mis clientes, con 4 campos. El primero es [edad], el segundo se llama [Porcentaje], y los dos últimos [cantidad1] y [cantidad2]. Quiero que al introducir la edad y un campo de cantidad [cantidad3]desde un formulario, y me seleccione el porcentaje que corresponde en la tabla, comparando el valor de [cantidad3] y que este comprendido entre los valores de los campos [cantidad1] y [cantidad2] y además coincida con la edad. Quisiera hacerlo en una consulta ya que al realizarlo con la fórmula me indica access que la fórmula es demasiado compleja

Os paso la imagen para que lo veáis mejor. Por ejemplo que ponga EDAD:49 / Cantidad3 :31000 y el resultado me de el valor 35 del ID 2 ya que cumple todos los criterios.

1 respuesta

Respuesta
2

Por lo que dices. Si tengo el formulario donde escribo

Y pulso Enter

Si hubiera puesta otra cantidad

Al pulsar Enter

En el evento Después de actualizar del cuadro de texto Cantidad3 le tengo puesto

Private Sub Cantidad3_AfterUpdate()
Porcentaje = DLookup("porcentaje", "copia", "edad=" & Me.Edad & " and cantidad1<=" & Me.Cantidad3 & " and cantidad2>=" & Me.Cantidad3 & "")
End Sub

¿Los campos los coge de un formulario que ya he rellenado y al colocar este evento me acaba de rellenar los otros campos aunque sean de otra tabla?

No he entendido la pregunta. En el ejemplo que te puse, el formulario es independiente, ya que no sé como lo tienes tú.

Tengo la tabla Copia donde sólo he puesto unos cuantos

Lo que hace es que después de que rellenes Cantidad 3 busca en esta tabla Consulta el valor del campo Porcentaje que corresponde a aquel registro en que la edad sea igual a la que has escrito y que Cantidad3 esté entre los valores de los campos Cantidad1 y Cantidad2.

Si pones una imagen de tu formulario te podría concretar más

No sé si te refieres a que tu formulario depende de otra tabla. Es exactamente igual.

La ventaja de las funciones Dlookup, Dcount, etc es que le dices lo que tiene que buscar, donde debe buscar y que criterios se usan para "distinguir" un registro de otro, independientemente de donde estés. Tampoco los cuadros de texto tienen porque llamarse igual, pero sí ser de datos coherentes, es decir, que si busca texto, lo debe guardar en un campo texto, si lo que busca es numérico, guardarlo en un campo numérico, etc.

Si pertenece a una hoja vinculada de Excel.Ya que hice la fórmula y access me dice que es demasiado compleja para resolverla. Tengo que realizar la fórmula para que coja los datos de una hoja de excel y que realiza los cálculos automáticamente. El sistema no se actualiza de manera inmediata.El caso es que no puedo coger solo la celda donde da el resultado de excel.

La realización de la fórmula tiene demasiados parámetros y no me permite integrarla en Access

Todo viene por una formula de Excel que da como resultado un porcentaje.Queria recrearlo en Access y no he sabido hacerlo.Si conoces alguna manera, me iria de maravilla."=SI(Y($J25<49;$G18<30000);40%;SI(Y($J25<49;Y($G18>29999;$G18<50000));35%;SI(Y($J25<49;Y($G18>49999;$G18<100000));25%;SI(Y($J25<49;Y($G18>99999;$G18<300000));20%;SI(Y($J25<49;$G18>299999,99);15%;SI(Y(Y($J25>48;$J25<54);$G18<30000);38%;SI(Y(Y($J25>48;$J25<54);Y($G18>29999;$G18<50000));33%;SI(Y(Y($J25>48;$J25<54);Y($G18>49999;$G18<100000));23%;SI(Y(Y($J25>48;$J25<54);Y($G18>99999;$G18<300000));18%;SI(Y(Y($J25>48;$J25<54);$G18>299999,99);13%;SI(Y(Y($J25>53;$J25<60);$G18<30000);37%;SI(Y(Y($J25>53;$J25<60);Y($G18>29999;$G18<50000));32%;SI(Y(Y($J25>53;$J25<60);Y($G18>49999;$G18<100000));22%;SI(Y(Y($J25>53;$J25<60);Y($G18>99999;$G18<300000));17%;SI(Y(Y($J25>53;$J25<60);$G18>299999,99);12%;SI(Y($J25>59;$G18<30000);35%;SI(Y($J25>59;Y($G18>29999;$G18<50000));30%;SI(Y($J25>59;Y($G18>49999;$G18<100000));20%;SI(Y($J25>59;Y($G18>99999;$G18<300000));15%;SI(Y($J25>59;$G18>299999,99);10%;"ERROR"))))))))))))))))))))

Por partes

¿Porqué no importas a Access la hoja de Excel como tabla Vinculada de forma que cualquier modificación que hagas en Excel automáticamente queda reflejada en la tabla de Access y ahí puede buscar.

Segundo, me extraña mucho que en Access no puedas hacer los cálculos que haces en Excel. Ten en cuenta que ambos están hechos en VBA. En Excel usas funciones, que no dejan de ser un trozo de código al que le han puesto un nombre en "cristiano". Si usas la función Raiz cuadrada(B:1) en realidad le estás diciendo

Celda B:3=Sqr(B:1)

Si usas BurcarV, en realidad le estás diciendo

CeldaB3=dlookup(....

Si quieres elevar el valor de la celda B1 al cubo, en realidad le estás diciendo

CeldaB3=B1^3

Observarás que no sé como se representan las celdas en Excel

No deja realizar la fórmula.Access tiene limitado el tamaño de la fórmula y no lo permite. Tienen el error reportado en la página de Microsoft.La hoja de Excel debe abrirse primero para realizar la vinculación de datos y el formulario no actualiza sus datos al momento. Tengo que cerrarlo y volverlo a abrir para que me actualice los datos.No se como actualizar ese campo, una vez cambio el dato de la hoja de Excel.He probado con un botón que actualiza el formulario, pero ese campo no me lo actualiza

Esa expresión que has puesto no me parece cuando menos cómoda, por no decir otra cosa. Por otro lado, cuando en Excel pones

SiInm(B1=53;35;12) en realidad, por eso te decía lo del nombre "cristiano", lo que le estás diciendo(aunque no lo veas)

If B1 = 53 then

loquesea=35

else

loquesea=12

end if

Por eso, en el caso que nos ocupa no necesitas ni tabla. Para los valores me voy a guiar por tu imagen del principio. Si tengo el formulario

Cuando pulso Enter

Vamos a suponer que ponemos otra edad y otra Cantidad3

Cuando pulso Enter después de escribir Cantidad3

El código del evento Después de actualizar del cuadro de texto(puede parecer largo, pero es exactamente lo que haces cuando lo escribes en Excel, y además desde que el nunca bien glorificado, para mí el mejor inventor de informática que haya existido, Larry Tesler inventó lo de Copiar y Pegar, se hace en un momento)

Private Sub Cantidad3_AfterUpdate()
Select Case Edad
Case Is = 49
    If Cantidad3 >= 0 And Cantidad3 <= 30000 Then
    Porcentaje = 40
    ElseIf Cantidad3 >= 30001 And Cantidad3 <= 50000 Then
    Porcentaje = 35
    ElseIf Cantidad3 >= 50001 And Cantidad3 <= 100000 Then
    Porcentaje = 25
    ElseIf Cantidad3 >= 100001 And Cantidad3 <= 300000 Then
    Porcentaje = 20
    ElseIf Cantidad3 >= 300001 And Cantidad3 <= 1000000 Then
    Porcentaje = 15
    End If
Case Is = 53
    If Cantidad3 >= 0 And Cantidad3 <= 30000 Then
    Porcentaje = 38
    ElseIf Cantidad3 >= 30001 And Cantidad3 <= 50000 Then
    Porcentaje = 33
    ElseIf Cantidad3 >= 50001 And Cantidad3 <= 100000 Then
    Porcentaje = 23
    ElseIf Cantidad3 >= 100001 And Cantidad3 <= 300000 Then
    Porcentaje = 18
    ElseIf Cantidad3 >= 300001 And Cantidad3 <= 1000000 Then
    Porcentaje = 13
    End If
Case Is = 59
    If Cantidad3 >= 0 And Cantidad3 <= 30000 Then
    Porcentaje = 37
    ElseIf Cantidad3 >= 30001 And Cantidad3 <= 50000 Then
    Porcentaje = 32
    ElseIf Cantidad3 >= 50001 And Cantidad3 <= 100000 Then
    Porcentaje = 22
    ElseIf Cantidad3 >= 100001 And Cantidad3 <= 300000 Then
    Porcentaje = 17
    ElseIf Cantidad3 >= 300001 And Cantidad3 <= 1000000 Then
    Porcentaje = 12
    End If
End Select
End Sub

Me explico, primero selecciona la edad y luego compara el rango de valores y le asigna el valor al campo Porcentaje. Basta con hacer, por ejemplo, el de 49 años y luego es cuestión de Copiar y Pegar pero cambiándole solo los valores de edad y porcentaje que le corresponde.

Lo voy a comprobar.Pero muchas gracias por la currada.No tienes precio.

Perdona por la demora.

He creado los tres campos en el formulario de mi tabla

Despues me he ido a eventos del campo porcentaje:

Copio el codigo que me has enviado:

Grabo y realizo las pruebas y me sale en blanco.

No se que hago mal, pero voy más perdió que un ratón en un monasterio

Porque el formulario esta basado en una consulta?

No, el formulario, como te dije es independiente.

Si quieres, repito, si quieres, mándame un mensaje, sólo el mensaje, a [email protected] y te mando un ejemplo usando la imagen que pusiste del formulario.

Si lo haces, en el asunto del mensaje pon tu alias Jesús Mej, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas