Insertar fórmula en celda mediante vba dependiendo de otra celda

En la hoja códigos se tiene el registro de varios valores que se cargan mediante un formulario, los cuales se van agregando de forma descendiente, se requiere que mediante macros al ingresar un valor en las celdas de la columna "C" se agregue una fórmula en la celda de la columna "E" de la misma fila, ejemplo : mediante el formulario se carga el precio de costo de un articulo en la celda c3 y se requiere que mediante código se cargue automáticamente la fórmula =CONCATENAR("$", C3*0.22+C3), en la celda "E3" que dará el resultado de agregarle un 22 % que seria el precio de venta del articulo, y así consecutivamente con las demás celdas siguientes en forma descendente de la misma columna agradezco mucho sus comentarios y soluciones.

1 respuesta

Respuesta
1

[Hola

¿Cómo insertas en las celdas los otros datos de los que hablas? ¿Necesitas la fórmula o te basta solo el resultado?

Abraham Valencia

Como le comentaba los datos se ingresan por medio de formulario y si me interesa que se agregue la fórmula para que si hay un cambio en la celda de referencia se actualice automáticamente, por ejemplo cuando hay un cambio de precio en el costo del articulo al agregarse la fórmula calcula cual seria el costo de venta, gracias ...

No repondiste lo principal: ¿Cómo insertas los datos en las celdas?. Decir "por medio de formulario" no es una respuesta. Dependiendo de la respuesta se puede proponer una solución a tu dilema.

Abraham Valencia

tal vez no me exprese bien...

La macro deberá correr al entrar un dato en las celdas de la columna "c" ingresando la fórmula en la celda de la columna "e" le agrago una imagen para ser más claro ¡Gracias!

Como para que te des idea:

Dim UltimaFila As Long, x As Long
Let UltimaFila = Cells(Rows.Count, 5).End(xlUp).Row
Range("E" & UltimaFila + 1).FormulaR1C1 = "=CONCATENATE(""$"", RC[-2]*0.22+RC[-2])"

Comentas

Abraham Valencia

Ya inserte el código que me envías en un modulo pero no trabaja la macro, no se que estoy haciendo mal, entiendo que al introducir un dato en la celda la macro deberá pegar la fórmula en la otra celda indicada, como ejemplo, si escribo la cantidad "10" en c5 debe aparecer la fórmula en e5 dándome el resultado 10.22, bueno eso es lo que necesito ... agradezco su apoyo y sigo atento a sus comentarios ...

En el módulo de la hoja coloca esto:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nFila As Long
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
    nFila = Target.Row
    Range("E" & nFila).FormulaR1C1 = "=CONCATENATE(""$"", RC[-2]*0.22+RC[-2])"
End If
End Sub

Estoy asumiendo que no tienes nada más en el evento "Change" de dicha hoja.

Abraham Valencia

Buen día, ya seguí las indicaciones puse el código en la hoja en evento change como podrás ver en las imágenes pero al ingresar datos en la celda de la columna "c" la macro no corre y no aparece la fórmula en la columna "e", no se en que me estoy equivocando, ¿qué debo hacer? Gracias por su tiempo y apoyo

En la "Ventana inmediato" coloca esto y dale "Enter":

Application.EnableEvents = True

Y ahora prueba ingresando datos en la hoja nuevamente

Abraham

Ya lo hice y aun no introduce la fórmula ... ¿qué hago?

.. ¿Te envío mi libro?

Coloca el archivo en algún "Drive" (OneDrive, Google Drive, DropBox, etc.) y envía el enlace por aquí.

Abraham Valencia

https://1drv.ms/x/s!AlX7nySrlC4Fh0-dGb9lcOLtMmvW  te  copio  el  link  de one drive  espero  tus comentarios  Gracias por tu ayuda .. 

Tu archivo tiene 50 megas de tamaño, el Excel te está inhabilitando algunas cosas, no es problema de la macro y/o como las has colocado. Has aplicado formatos de celda, colores de fondo, y muchas cosas más ¡A hojas completas! Tienes millones de celdas así, por el el tamaño del archivo. Lee por aquí:

https://abrahamexcel.blogspot.com/2018/01/el-gran-problema-de-los-archivos-lentos.html 

Mientras no soluciones eso, vas a tener varios dilemas, te lo aseguro

Abraham Valencia

¡Gracias! 

Buen día Abraham, ya elimine todo lo innecesario y ya corre bien la macro como me indicaste, pero me di cuenta de que trabaja la macro cuando directamente sobre la celda le introduces algún valor, efectivamente introduce la fórmula donde debe, todo bien, pero cuando mediante el formulario de ventana códigos introduces los datos no aparece la fórmula, y realmente así es como se le utiliza mediante los formularios, ¿cómo puedo hacer que la macro trabaje con el formulario?

Pues volvemos al inicio, como ya te había dicho, debes mostrar exactamente como insertas los datos en la columna C, de no mostrarlo, con cualquier alternativa que te dé volverá a pasar lo mismo de que no puedas adaptarlo.

Abraham Valencia

Desde este formulario se ingresan o modifican los datos a la hoja datos, y se llama desde el botón "ventana códigos", ya tienes el libro de trabajo puedes checar el código ahí pero te lo mando al parecer es este :

Private Sub CommandButtonActualizar_Click()
ClaveUsuario = 0
If IsNumeric(TextBoxId) Then
ClaveUsuario = InputBox("Introduzca Contraseña de Confirmacion")
If ClaveUsuario <> "123" Then
MsgBox "Los cambios no se guardaron", vbCritical
End If
If ClaveUsuario = "123" Then
Worksheets("Codigos").Cells(TextBoxId, 1).NumberFormat = "@"
Worksheets("Codigos").Cells(TextBoxId, 1) = TextBoxA.Value
Worksheets("Codigos").Cells(TextBoxId, 1).Errors(xlNumberAsText).Ignore = True
Worksheets("Codigos").Cells(TextBoxId, 2) = TextBoxB.Value
If TextBoxC.Value = "" Then
Worksheets("Codigos").Cells(TextBoxId, 3) = Format(0, "currency")
Else
Worksheets("Codigos").Cells(TextBoxId, 3) = Format(TextBoxC.Value, "currency")
End If
Worksheets("Codigos").Cells(TextBoxId, 4) = TextboxD.Value
Worksheets("Codigos").Cells(TextBoxId, 5) = TextBoxE.Value
If TextBoxG.Value = "" Then
Worksheets("Codigos").Cells(TextBoxId, 7) = 0
Else
Worksheets("Codigos").Cells(TextBoxId, 7) = TextBoxG.Value
End If
Worksheets("Codigos").Cells(TextBoxId, 8).FormulaR1C1 = "=RC[-1]-RC[-2]"
'*****Worksheets("Codigos").Cells(TextBoxId, 9) = TextBoxI.Value
Worksheets("Codigos").Cells(TextBoxId, 10) = TextBoxJ.Value
If TextBoxK.Value = "" Then
Worksheets("Codigos").Cells(TextBoxId, 11) = Format(0, "00%")
Else
Worksheets("Codigos").Cells(TextBoxId, 11) = Format(TextBoxK.Value / 100, "00%")
End If
For Seleccionado = 0 To ListaCodigos.ListCount - 1
If ListaCodigos.List(Seleccionado, 9) = TextBoxId Then
ListaCodigos.List(Seleccionado, 0) = TextBoxA
ListaCodigos.List(Seleccionado, 1) = TextBoxB
ListaCodigos.List(Seleccionado, 2) = Format(TextBoxC, "currency")
ListaCodigos.List(Seleccionado, 3) = TextboxD
ListaCodigos.List(Seleccionado, 4) = TextBoxE
ListaCodigos.List(Seleccionado, 5) = TextBoxG
ListaCodigos.List(Seleccionado, 6) = TextBoxI
ListaCodigos.List(Seleccionado, 7) = TextBoxJ
ListaCodigos.List(Seleccionado, 8) = Format(TextBoxK, "00%")
ListaCodigos.List(Seleccionado, 9) = TextBoxId
Exit For
End If
Next
TextBoxC = Format(Worksheets("Codigos").Cells(TextBoxId, 3), "currency")
TextBoxG = Worksheets("Codigos").Cells(TextBoxId, 7)
TextBoxK = Format(Worksheets("Codigos").Cells(TextBoxId, 11) * 100, "GENERAL NUMBER")
If LabelNuevo.Caption = "NUEVO REGISTRO" Then
TotalCodigos = TotalCodigos + 1
End If
LabelNuevo.Caption = ""
ActiveWorkbook.Sabe
BuscarCodigo.SetFocus
End If
ActualizarIndice
End If
End Sub

Sin excepción, borro todo archivo que no sea mío y que he descargado para ayudar, tal como en tu caso. Segundo, noto que dices "al parecer es este", lo que quiere decir que tú no hiciste las macros, con lo que entiendo la dificultad de entender los ejemplos enviados antes para adaptarlos a lo que necesitas. Tercero, envías bastante código con variables y nombres de objetos que evidentemente yo no conozco y tampoco voy a revisar pues significaría un tiempo mayor al que yo doy para ayudar (esto es ad honorem).

Intenta entender lo que tienes para que puedas adaptar lo sugerido en ya más de una ocasión.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas