EXCEL - ¿Cómo tener una salida de fórmula y entrada del usuario en la misma celda?

0

Quisiera ayuda de alguien, ya que creo que este problema requiere VB. Básicamente tengo una CELDA (A4) donde las personas ingresarán valores para descubrir los cálculos correspondientes que se muestran a continuación.

Sin embargo, quiero agregar una función adicional donde los valores populares se ingresan automáticamente en esa misma celda (A4).

Las celdas E7 y E8 recibirán información y la multiplicarán por 960 (E7) o 765 (E8) y transferirán ese valor a la celda (A4) para que el resto de las fórmulas se actualicen correctamente.

Básicamente, haga que el usuario ingrese las bolsas directamente en A4 o ingrese el número de contenedores en E7 o E8.

** Aquí es donde tengo el problema porque cuando ingreso una fórmula en A4, se elimina una vez que ingresa un valor directamente en ella.

** También tenga en cuenta que el resultado de E7 y E8 debe mostrarse (en A4) ya que también lo necesito.

Mi hoja:

ingrese la descripción de la imagen aquí

Josh
fuente
No, las celdas solo pueden tener un valor a la vez. Si desea una entrada, puede solicitarla al usuario, pero no entiendo muy bien lo que quiere hacer.
Raystafarian
¿Por qué necesita ser A4? ¿Por qué no tener dos filas para "Bolsas"; una entrada y una salida?
James Brewer
No quiero agregar celdas o filas adicionales a un estándar que ya se está utilizando. Quiero que la gente solo ingrese un 2 en E8 y tenga una pantalla A4 1530 y los cálculos basados ​​en eso. Lo que se está haciendo en este momento es que están usando la calculadora para multiplicarlo allí y luego ingresarlo manualmente en A4. Quería reemplazar eso agregando la función E7 y E8. Tiene que ser más fácil y rápido que simplemente hacer una calculadora, de lo contrario no se implementará.
Josh

Respuestas:

4

Puede usar una función de cambio de hoja de trabajo en vba. Algo como

Private Sub Worksheet_Change(ByVal target As Range)

If Intersect(target, Range("e7:e8")) Is Nothing Then Exit sub

Application.enableevents = False
ActiveSheet.range("A4").formula="=if(e7="""",e8*765,e7*960)"
Application.enableevents = True

End Sub

Cada vez que la hoja cambia, verifica si la celda cambiada fue e7 o e8. Si fuera así pone la fórmula

=if(e7="",e8*765,e7*960)

en la celda A4. Si luego coloca un valor en la celda A4, permanecerá hasta que cambie de nuevo e7 o e8. Es posible que deba ajustarse para que haga exactamente lo que desea, pero la idea está ahí.

Esto iría en el objeto de la hoja de trabajo debajo de los objetos de Microsoft Excel en vba.

EDITAR:

Para encajar con los comentarios.

Nuevo código, este solo hará algo si la celda tiene un valor agregado o cambiado, no se ejecutará si elimina un valor.

Luego verifica si e7 fue editado. Si fue e8 se elimina. Si no fuera así, sabemos que e8 fue editado para que e7 se elimine. La fórmula se mantiene igual.

Private Sub Worksheet_Change(ByVal target As Range)

    If Intersect(target, Range("e7:e8")) Is Nothing Or target.Value = "" Then Exit Sub
        Application.EnableEvents = False

        ActiveSheet.Range("A4").Formula = "=if(e7="""",e8*765,e7*960)"

        If Intersect(target, Range("e7")) Is Nothing Then
           ActiveSheet.Range("e7").ClearContents
        Else
            ActiveSheet.Range("e8").ClearContents
        End If

    Application.EnableEvents = True

End Sub
gtwebb
fuente
.............¡Muy agradable!
Estudiante de Gary
GT webb gracias, lo intentaré, desafortunadamente no entiendo tu última línea. "Esto iría en el objeto de la hoja de trabajo debajo de los objetos de Microsoft Excel en vba". Entro en la pestaña Desarrollador y hago clic en Ver código, luego se abre una nueva ventana e ingreso el código allí. i57.tinypic.com/345k9rb.png
Josh
Sí, ese es el lugar correcto. Dependiendo de para qué se use la macro, hay diferentes lugares donde se puede almacenar. También tenga en cuenta las 4 citas consecutivas en el medio de la fórmula. Debido a que una cita se toma como el final de un texto en vba, debe tener 4 allí para imprimir 2 en la celda. Su imagen solo tiene comillas dobles. Además, su código solo se activará si se cambia e8 (que podrían ser datos ingresados ​​o eliminados).
gtwebb
Sí, solo estaba jugando con algunos de los valores, eso es genial, hombre; p Sin embargo, el cálculo funciona muy bien siempre que cualquiera de las 2 celdas esté en blanco, si escribo un 2 en e7 pero luego escribo un 1 en e8 nada funcionará, sé que pueden eliminarlos manualmente, pero ¿hay alguna forma de evitarlo? ¿O se ha eliminado la celda cuando ingresa el valor en la otra? así que si ingreso 2 en E7, E8 se borrará y su increíble script funcionará automáticamente.
Josh
Agregué código adicional para asegurarme de que la edición no elimina una celda y eliminar la otra celda si se agrega un valor. Si la respuesta resuelve su problema, ¿puedo pedirle que acepte la respuesta para que la pregunta se marque como resuelta? Gracias.
gtwebb
1

En los negocios, es común querer usar una fórmula para calcular un valor, pero aún así permitir al usuario anular esa fórmula para casos especiales.

Digamos que A4 representa el costo total y contiene:

=D8*G8

donde D8 es el costo unitario y G8 es la cantidad.

Pero para clientes especiales queremos poder cotizar un costo con descuento. Ponemos el costo con descuento en H8 y modificamos la fórmula de esta manera:

=IF(H8<>"",H8,F8*G8)

Entonces, si queremos la anulación, va en H8; de lo contrario, dejamos H8 en blanco.

Estudiante de gary
fuente
Algo así sucedería detrás de escena, ¿no? Tampoco quiero tener celdas de entrada adicionales aunque.
Josh
@ Josh Aunque tener celdas adicionales parece un poco desordenado, comúnmente se hace. La gente tiene miedo de arruinar las fórmulas; de hecho, algunas personas protegen las celdas de fórmula de ser editadas.
Gary's Student
Sí, pero si no parece lo suficientemente simple y sin muchas alteraciones. Las personas no cambiarán lo que han estado haciendo durante años, que se multiplica en una calculadora y luego ingresa el resultado en A4 :(
Josh
0

Puede usar VB para cambiar cualquier valor durante la etapa de cálculo.

Pero hacerlo significa que la macro cambiará el valor en A4, y tendrá que agregar algo para saber que el valor no debe actualizarse en un segundo intento.

Entonces, en teoría, es posible, pero es muy poco práctico hacerlo.

Si solo quiere tener una lista desplegable con valores populares, no necesita ir a VB sofisticado. Excel tiene esta función incorporada. Puede hacerlo a través de data validation.

LPChip
fuente
El menú desplegable no funcionará y es demasiado engorroso, los valores en E7 o E8 podrían oscilar entre 1-1000. También sé que es un poco sofisticado, pero no creo que sea poco práctico; de hecho, mi objetivo es que sea práctico e intuitivo ya que el resto de las personas que lo usan no son competentes en informática.
Josh
La parte poco práctica es crear esto y hacer que funcione bien para el usuario.
LPChip
Solo quería que ingresaran un valor en mis nuevos campos E7 o E8 y que calcularan el resto, créanme, probé otras opciones pero no soy un dios programador, he recurrido a la comunidad en busca de ayuda;)
Josh,
¿Es posible hacer que A4 no sea un campo que el usuario cambiaría? Quizás coloque eso en E6 y haga que A4 tenga la fórmula que desea que tenga, tomando nota del valor en E6. Como señalaron otros, esa es la forma en que las personas lo hacen, porque esa es la única forma en que se puede mantener. VB te lo pondrá muy difícil si no lo has tocado antes. No son pocas líneas de código y funciona, por lo que básicamente descarta el uso de VB.
LPChip
Además, si es su trabajo que la gente juegue con el número en A4 para encontrar el valor al comparar todas las salidas, lo está haciendo mal. Excel está haciendo lo contrario. Usted especifica el objetivo y calcula la entrada.
LPChip
0

La solución que uso donde solo tienes unas pocas celdas en las que quiero que tanto los cálculos como la habilidad ingresen valores para anular la fórmula o eliminar lo que ingresaron y hacer que la fórmula funcione.

Configure su hoja de trabajo como desee. Luego, para la celda que desea anular, configure una celda idéntica en una columna fuera de la pantalla, es decir, la columna az y corte y pegue su ell allí. En esta entrada especial, modifique su fórmula pero con un if para probar si un valor ha sido ingresado en la celda original.

Luego copie esta celda, seleccione su celda original y pegue una imagen vinculada especial.

Ahora seleccione la imagen y agregue un hipervínculo a la celda directamente debajo de ella, use un nombre ranbe si cree que puede moverse debido a la inserción de filas.

Ahora debería encontrar que la celda parece que muestra un valor de la fórmula, cuando hace clic en la celda, el hipervínculo salta a la celda debajo, ingrese el valor y la pantalla cambia, elimínelo y se muestra el valor de la fórmula.

También considere agregar un formato condicional en la celda de fórmula que cambie si hay un valor en la celda mostrada, esto le ayuda a recordar que se ha ingresado un valor manual.

Espero que ayude a configurar formularios que se vean simples y funcionen sin macros.

Terry

casco de felpa
fuente