1. AyudaExcel utiliza cookies. Si continuas utilizando AyudaExcel, estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

Cómo ingresar una fórmula en una macro ¿?

Tema publicado en 'Macros y programación VBA' iniciado por Callao2908, 19 Ene 2010.

  1. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Buenas noches, agradeceréa quién tenga a su alcance poder ayudarme con ejemplos o temas para poder ingresar formula en el desarrollo de una macro. De ser posible, que de la facilidad de poder elegir la formula en el ayudante para ingresar una formula, y resto de procedimiento.
    Gracias
    Saludos Jorge
  2. Gerson Pineda

    Gerson Pineda Moderador Staff AyudaExcel

    Registrado:
    30 Mar 2009
    Mensajes:
    6.768
    Me Gusta recibidos:
    552
    Género:
    Masculino
    Hola Callao
    Lo que pides Excel ya lo da (con todas sus funciones nativas), al menos es lo que logro entender, en la version 2007 ya viene incorporado un auto buscador por asi decirlo, en las versiones anteriores a 2007 es diferente pero solo busca asi: menu/insertar/funcion y dentro de ese cuadro de dialogo puedes buscarlas por categorias y listo

    Espero sea lo que buscas

    Saludos desde Honduras
  3. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    93
    Género:
    Masculino
    Hola Jorge y Gerson,

    ya Gerson te da muy buenas ideas ahí.

    Yo te diría que uses la grabadora de macros ingresando la fórmula con la que quieres trabajar.

    si quieres llamar el asistente para insertar funciones, esto lo hará:

    Application.Dialogs(xlDialogFunctionWizard).Show

    Si pudieras explicar un poquito más qué es lo que quieres hacer a ver por dónde ser puede ir armando la cosa.
  4. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Gracias Gerson y Mjofra, por vuestra atenta respuesta. Voy a estudiar y probar bien vuestras respuestas.
    Estamos en comunicación
    Saludos
    Jorge
  5. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Gerson y mjrofra, estoy adjuntado un archivo, en el cual en la primera hoja les doy a conocer el porque de mi consulta. Espero tengan por bien el poderme atender
    Gracias, saludos
    Jorge

    Nota, no he podido adjuntar el achivo, porque ya zipeado es 260 KB. Por favor indicarme pautas para subirlo
    Gracias
  6. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Estimados amigos, lamentablemente, he tenido que reducir la data, para poder estar debajo de los 100KB, para poderles remitir el archivo. En la primera hoja encontrarán la información necesaria
    Gracias por su atención:cool:
    Saludos

    Adjuntos:

  7. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    93
    Género:
    Masculino
    Hola Jorge,

    para la primera consulta:

    1) En ambas tablas el campo SECCIÓN_A, lo convierta al campo SECCIÓN que se muestra, es decir, le cambie el formato

    prueba esta macro:

    CÓDIGO:
    Sub Cambiar_Formato_Seccion_A()
    
        Dim ref As String, Func As String
        
        With Sheets("Tarifas")
            ref = "Tarifas!e2:e" & .Range("e" & .Rows.Count).End(xlUp).Row
            Func = "substitute(right(" & ref & ",6)&left(" & ref & ",2),""-"","""")"
            .Range(ref).Offset(, 4) = Evaluate("index(" & Func & ",0)")
        End With
        
        With Sheets("Becados")
            ref = "Becados!i2:i" & .Range("e" & .Rows.Count).End(xlUp).Row
            Func = "substitute(right(" & ref & ",6)&left(" & ref & ",2),""-"","""")"
            .Range(ref).Offset(, 2) = Evaluate("index(" & Func & ",0)")
        End With
        
    End Sub
    Para la segunda y tercera consulta:

    2)La segunda macro y la más importante es que necesito hacer una macro tal que en la hoja BECADOS, me inserte una columna , campo MONTO, el cual se tiene que hallar en la tabla TARIFAS
    3) Una tercera macro que en la tabla BECADOS, luego de haberse incorporado el campo MONTO, calcule un campo DCTO., que va ser igual a ...

    prueba esta:

    CÓDIGO:
    Sub Calcular_Insertar_Monto_Dcto()
        
        Dim refB As String, refT_M As String, refT_S As String
        
        refB = "Becados!l2:l" & Sheets("Becados").Range("k" & Rows.Count).End(xlUp).Row
        refT_M = "Tarifas!$g$2:$g$" & Sheets("Tarifas").Range("g" & Rows.Count).End(xlUp).Row
        refT_S = "Tarifas!" & Range(refT_M).Offset(, 2).Address
        
        With Sheets("Becados")
            .Range("l1:m1") = Array("MONTO", "DCTO")
            With .Range(refB)
                .Value = "=sumif(" & refT_S & ",k2," & refT_M & ")/countif(" & refT_S & ",k2)"
                .Offset(, 1) = "=l2*g2*h2"
                .Resize(, 2).Value = .Resize(, 2).Value
            End With
        End With
    
    End Sub

    cualquier inconveniente avisas.
  8. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Gracias Mauricio, en la tarde me estoy comunicando contigo. Estoy por entrar a una reunión, más luego el almuerzo, te estaré informando en cuanto al resultado aproximadamente entre 5 a 6 horas
    Gracias
    Jorge
  9. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Mauricio, gracias, las macros están funcionando bien, más bien dos consultas, en lo que sería la parte dos , ¿Que hace la sentencia .Resize(, 2).Value = .Resize(, 2).Value, para qué sirve en ésta macro?, y luego decirte que en la sentencia .Offset(, 1) = "=l2*g2*h2", la he tenido que modificar a .Offset(, 1) = "=l2*g2*h2/100", debido a que ese dato h2, es decir toda la columna es porcentaje, entonces, por ejemplo 20, es 0.20; 50 es 0.50, etc.....
    Saludos
    Jorge
  10. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    93
    Género:
    Masculino
    Hola jorge,

    como ves lo que hace la macro es ingresar dos fórmulas, en rojo ( bueno, tu ya modificaste la segunda para obtener el resultado que requerías):

    CÓDIGO:
    With .Range(refB)
        .Value = "[COLOR="red"]=sumif(" & refT_S & ",k2," & refT_M & ")/countif(" & refT_S & ",k2)[/COLOR]"
        .Offset(, 1) = "[COLOR="red"]=l2*g2*h2[/COLOR]"
        .Resize(, 2).Value = .Resize(, 2).Value
    End With
    lo que hace el .Resize(, 2).Value = .Resize(, 2).Value es convertir la fórmula ingresada en esas dos columnas a valor, algo así como Copiar > Pegados especial > valores. Si ejecutas la macro sin esa línea veras que en las dos columnas correspondientes tienes una fórmula.
  11. Callao2908

    Callao2908 Usuario

    Registrado:
    21 Ago 2008
    Mensajes:
    257
    Me Gusta recibidos:
    4
    Género:
    Masculino
    Mauricio, te agradeceré se sirvan dar el caso como SOLUCIONADO.
    Hasta la próxima, éxitos
    Saludos
    Jorge

Compartir esta página