Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Inputbox en VBA

Función InputBox en VBA

| 47 Comments

Usamos la función InputBox de Excel para obtener la entrada del usuario. Es importante recordar incluir validaciones de datos correctos, esto asegurará que la entrada de datos correspondan con lo que el programa necesita.

La función Inputbox presenta un mensaje al usuario, permitiéndole ingresar un valor en una caja de texto. Los parámetros principales de esta función son:

Inputbox (Promt, Title, Default)

  • El parámetro Prompt especifica la leyenda que mostrará la caja de mensajes.
  • El parámetro Title especifica el título que llevará el cuadro de diálogo.
  • El parámetro Default es el texto que mostrará la caja de texto.

El aspecto más importante de InputBox es que nos devuelve una cadena con lo que haya ingresado el usuario en la caja de texto. Luego podemos realizar una tarea específica dependiendo del valor obtenido.

Veamos por ejemplo en la siguiente macro, en al que puede observar como se solicita un dato, donde “Ingrese cantidad” es la leyenda o prompt, y “Título” es el texto que se emplea como título, luego de anotar el valor, y presionar aceptar, el valor empleado es entregado a la variable “X”

Sub test()

x = InputBox(“Ingrese cantidad”, “Título”)

MsgBox x

End Sub

Inputbox en VBA

Ejemplos de InputBox

Solicitar varios nombres usando Inputbox

A través del uso de la función InputBox, creamos una macro que nos permita registrar los nombres de las personas que consignaremos en la caja de información.

Creamos la macro:


Sub nombres()
Dim i As String
Dim a As Integer
Range("A1:A5").Select        'selecccionamos rango de trabajo
For a = 0 To Selection.Cells.Count        'realizar repeticiones para cada una de las celdas
i = (InputBox("Ingrese su nombre", "Nombre"))        'recuperamos las cadena del input box
ActiveCell.Offset(a, 0).Value = i         'bajamos por las celdas de la selección de 1 en 1
Next a
End Sub

Ejecutamos la macro y registramos los nombres de la siguiente manera:

2.1. Ejecutando la macro

(Para mayor visualización de la imagen, hacer click en la misma)

2.2. Digitar en la caja de texto los nombres a registrarse y luego aceptar

(Para mayor visualización de la imagen, hacer click en la misma)

Ejemplo elaborado por: Ricardo Najarro Chuchón

Descargar ejemplo: Función InputBox en VBA

 

Solicitar un nombre y colocarlo en una celda

A través del uso de la función InputBox, solicitaremos datos de los usuarios para que de esta manera accedan al programa. Para ello:

1° En la hoja de cálculo, insertaremos cuadros de texto activex.

2° Hacemos doble click en el primer cuadro de texto y vamos cambiando los nombres en los respectivos caption. Asimismo introducimos la functión INPUTBOX para lograr que aparezca una caja de información solicitándonos datos personales:


Private Sub CommandButton1_Click()
Dim mensaje As String
Dim nombre As String
mensaje = "Por favor, escriba su nombre."
nombre = InputBox(mensaje)
Range("a2").Value = nombre
End Sub

 

3° Finalmente, probamos el resultado en la hoja de excel.

Ejemplo elaborado por: Sara Ramos

Descargar Ejemplo: Ejemplo Inputbox en VBA

47 Comments

  1. Esta macro me resulta importante para el llenado de bases de datos. Puede combinarse y repetirse tantas veces como se requiera para distintos rangos especificos.

  2. Se le podria incluir mas datos y ademas que te detecte si el dato registrado ya ha sido anhadido.Por ejemplo cuando se agregan nuevos clientes a una base de datos, se aolicita informacion basica como nombres, apellidos, documebto de identidad y datos de contacto.

  3. Al ejecutar esta macro resulta que se puede ingresar hasta cinco nombre distintos pero cuando vuelvo ha ejecutar la misma, esta sobreescribe los nombres ya existentes. Me podrian ayudar a perfeccionar este código para poder registrar y a su vez mantener los nombres escritos previamente y que pueda continuar en la siguiente fila en blanco? Me ayudaria mucho para los fines que persigo, gracias.

  4. Modificando el ejemplo, he colocado un indicador para que corte el ingreso de nombres sin reemplazar los que ya se encuentran en las celdas cada vez que se ejecuta la macro.
    Sub nombres()
    Dim i As String
    Range(“A1”).Select ‘iniciamos en A1
    ‘revisamos las celdas hasta encontrar la primera en blanco
    Do While ActiveCell.Value “”
    ActiveCell.Offset(1, 0).Activate
    Loop
    ‘iniciamos el llenado de nombres hasta que indiquemos con XXX que terminamos
    Do
    i = (InputBox(“Ingrese el nombre (XXX=Fin)”, “Nombre”))
    If i “XXX” Then
    ActiveCell.Value = i
    ActiveCell.Offset(1, 0).Activate
    End If
    Loop While i “XXX”
    End Sub

  5. muy importante para el ingreso de los datos ojo ,hay que tener cuidado con los tipos de datos pueden ser numerico,string …. saber que tipo de datos vas ingresar para hacer tus calculos

  6. Esta funciòn es muy importante para realizar grandes bases de datos en la cual nos facilitara tanto para introducir cada uno de los datos que podamos ingresar y utilizando la programacion VBA nos facilitara el trabajo, esta funcion InputBox en VBA es una especie de ventana donde el usuario digita informacion pero esa informacion digitada debe guardarse en un lugar en donde debemos declarar variables para que ahi se almacene la informacion que deseamos compartir en nuestra base de datos.

  7. Al ejecutar la macro me pide ingresar seis nombres a pesar de que se han seleccionado cinco celdas, eso es porque el ciclo for va de 0 al numero de celdas seleccionadas es decir 5 lo que es seis por tanto lo modifiqué para que pida solo cinco nombres, añadiendo -1 al límite del for, quedando:

    Sub nombres()

    Dim i As String
    Dim a As Integer

    Range(“F1:F5”).Select
    For a = 0 To Selection.Cells.Count – 1
    i = InputBox(“Ingrese el nombre: “, “Nombres”)
    ActiveCell.Offset(a, 0).Value = i

    Next a

    End Sub

  8. Al código del ejemplo se añadio la líneas siguientes lineas dentro del bucle FOR:
    +————————
    If a = 4 Then
    Exit For
    End If
    +————————-
    La finalidad es para que sólo se ingresare 5 nombres según el rango eleccionado. El código completo es el siguiente:
    +————————————–
    Sub Nombres()
    Dim i As String
    Dim a As Integer
    Range(“A1:A5”).Select
    For a = 0 To Selection.Cells.Count
    i = InputBox(“Ingese su Nombre: “, “Nombres”)
    ActiveCell.Offset(a, 0).Value = i
    If a = 4 Then
    Exit For
    End If
    Next a
    End Sub
    +—————————————-

  9. He realizado una modificación a la macro presentada, incorporando una validación solo númerica. Es útil para valores que el usuario debe ingresar y que sean únicamente números.

    Este es el código:

    Sub Valores()

    Dim i As String

    n = Worksheets(“Hoja1”).Range(“a” & Worksheets(“Hoja1”).Rows.Count).End(xlUp).Row + 1

    INPUT_I:
    i = (InputBox(“Ingrese el valor”, “Valor”))

    If Not IsNumeric(i) And i “” Then
    MsgBox “INGRESE SOLO VALORES NÚMERICOS”, vbInformation
    GoTo INPUT_I
    End If

    Worksheets(“Hoja1”).Range(“a” & n).Value = i

    End Sub

  10. Estimados:
    Bien, si se prueba el MsgBox y se pulsa el boton ayuda, salta la ayuda de office, esto me hace pensar que estoy haciendo algo mal y por eso no salta mi ayuda… necesito alguna respuesta:

    Sub MessageBox()
    MsgBox “El proceso tardará 5 minutos ¿Desea Continuar?”, 3 + 256 + 16384, “Copia de Seguridad.”, “C:\ejemplo.chm”, 71
    End Sub

  11. Definitivamente esta opción resulta practica para la creación de entornos visuales y botones.

  12. La función Inputbox es importante para el desarrollo de programas complejos, ya que permite enviar mensajes al usuario y a la vez almacenar información. Esta informacion permitira crear variables para un codigo complejo, por ejemplo al ser usada con la funcion InStrRev se podran realizar busquedas grandes o especificas, facilitando así el uso de las hojas de cálculo.

  13. Modifique en elago el codigo de Darío:
    espero les sirva.
    Sub Nuevo()
    Dim i As String
    Worksheets(“Hoja1”).Activate
    ActiveSheet.Range(“A1”).Activate ‘iniciamos en A1
    ‘revisamos las celdas hasta encontrar la primera en blanco
    Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(1, 0).Activate
    Loop
    ‘iniciamos el llenado de nombres hasta que indiquemos con XXX que terminamos
    i = (InputBox(“Ingrese el Nombre:”, “Nombre”))
    Do While i “”
    With ActiveCell
    ActiveCell.Value = i
    ActiveCell.Offset(1, 0).Activate
    End With
    i = (InputBox(“Ingrese el Nombre:”, “Nombre”))
    Loop
    End Sub

  14. Asignándole varias variables yo puedo crear con este macros bases de datos de mis alumnos, pero quisiera saber si hay una forma de restringir la información a ingresar, osea si se le puede poner una cantidad límite de letras en el nombre o algo así

  15. Esta función me ha ayudado para poder realizar una pequeña encuesta. Ademas esta función es el inicio para la toma de información para distintas base de datos.

  16. En la macro se consideró que el rango de trabajo era desde la celda 1 hasta la fila 5. Sin embargo, al descagar el excel, esto aplicaba hasta la fila 6. A que se debe esto?

  17. El macro permite el ingreso de información de manera rápida, y la función nos recuerda a que corresponde la misma. Aun falta aprender el resto de parametros incluidos en el macros.

  18. También se puede usar para un mini censo. Esto lo usaron unos muchachos de mi empresa para obtener feedback sobre la snuevas politicas.

  19. Buen día amigos,

    Excelente función para ingresar datos; es importante validarlos también. Por mi parte he modificado la fila donde se usa la función COUNT porque la macro no terminaba cuando ingresabas los 5 datos.

    Para mejorar la

    For a = 0 To Selection.Cells.Count – 1

    Saludos

  20. esta función es realmente importante pues ayudará a que nosotros podamos guardar bases de datos es decir, que estas sean traspasadas desde el formulario al Excel automáticamente al ejecutar la macro.

  21. Hola tengo unas dudas
    Cual es la diferencia entre usar Select y Activate para una unica celda?

    GRacias
    Walter

  22. Esta función es realmente importante para la programación en Excel con VBA. Permite el ingreso de datos. Hay que tener en cuenta que siempre devuelve una cadena por lo que será necesario convertir el resultado en un valor si se da el caso.

  23. Es una función realmente importante para la programación en Excel con vba. Permite el ingreso de datos. Hay que tener en cuenta que el tipo de datos que se devuelve siempre es una cadena (string) por lo que será necesario convertir el resultado en un valor en caso de ser necesario.

  24. Esta función es muy útil. Ya que gracias a esta se puede tener programas en vba más interactivos y de uso fácil ya que el usuario de estos programas, que usualmente no es el diseñador de los mismos, sabrá exactamente que es lo que debe ingresar.

  25. En la quinta fila del código tenemos la siguiente expresión :
    “For a = 0 To Selection.Cells.Count”
    El comando cells está de más, basta con utilizar “Selection.Count”.

  26. Esta función es útil para facilitar el ingreso de datos al usuario, pues muchas veces las macros tienen lugares específicos en donde ingresar los datos, lo cual generar errores al ejecutarla. Esta función ayuda reducir el error que se pueda cometer al ejecutar una macro asegurándonos de ingresar los datos de manera correcta y facilitando la tarea al operador.

  27. Es una función muy útil para llenar hojas de excel que requieran la entrada de gran cantidad de datos que necesitan ser registrados de una manera sencilla y que limite el márgen del error de la persona que la esta utilizando.

  28. Es un comando de VBA de gran utilidad para almacenar la información que se ingresa en una variable.

  29. Esta función te permite ingresar información, esta puede ser validada con Do loop.
    Ejemplo:

    Do
    Cantidad=Inputbox(“Ingresar el número de productos”)
    Loop until Cantidad >0

  30. Daniel Castillo, me gustó tu código sin embargo la condicion para empezar las iteraciones debe ser que la variable i sea distinta a XXX

    If i “XXX” Then ‘para continuar con el siguiente nombre

    y Loop While i “XXX” ‘para verifiicar la finalizacion

  31. Daniel Castillo me gustó tu código, sin embargo debes establecer la condicion que la variable i sea distinta a “XXX” para que funcione correctamente

    If i “XXX” Then , para continuar con la siguiente iteracion

    y

    Loop While i “XXX” , para verificar la finalizacion

  32. estoy tratando de usar esta macro de dniel, pero no me deja seguir en linea 5 me sale un error

    Sub nombres()
    Dim i As String
    Range(“A1″).Select ‘iniciamos en A1
    ‘revisamos las celdas hasta encontrar la primera en blanco
    Do While ActiveCell.Value “”
    ActiveCell.Offset(1, 0).Activate
    Loop
    ‘iniciamos el llenado de nombres hasta que indiquemos con XXX que terminamos
    Do
    i = (InputBox(“Ingrese el nombre (XXX=Fin)”, “Nombre”))
    If i “XXX” Then
    ActiveCell.Value = i
    ActiveCell.Offset(1, 0).Activate
    End If
    Loop While i “XXX”
    End Sub

  33. Interesante la rutina, me sirvió mucho para el ingreso de ciertos parámetros que requiere una función engorrosa de generación de números aleatorios que frecuentemente uso.

  34. Interesante ejemplo del INPUTBOX.

    Saludos cordiales.

  35. Yo lo hice así…
    y resulta en cualquier selección de celdas.

    Sub nombres2()
    Dim i As String
    Dim a As Integer
    a = 0
    For Each celda In Selection
    i = InputBox(“Ingrese el nombre: “, “Nombres”)
    ActiveCell.Offset(a, 0).Value = i
    a = a + 1
    Next
    End Sub

  36. He hecho un código un tanto distinto pero que funciona para lo mismo, solo que es más completo.

    Lo que hace es recoger una selección cualquiera, revisa que tenga solo una columna (si tiene más de una tira error) y entonces empieza a mostrar cuadros de entrada para cada una de las celdas.

    El código va como sigue:

    Sub nombresauto()

    Dim contador As Integer
    Dim i As String

    If Selection.Columns.Count > 1 Then
    MsgBox “Tiene seleccionada más de una columna. Asegúrese de que su selección contiene solo una columna e intente de nuevo.”, vbOKOnly + vbExclamation, “Error en la selección”
    Else
    For Each cell In Selection
    cell.Value = (InputBox(“Ingrese Nombre”, “Nombre”))
    Next
    End If
    End Sub

  37. Esta función me parece muy adecuada para el llenado de base de datos… yo soy nueva en esto, así que estoy intentando modificarla para ingresar fechas y que me devuelva una fecha posterior.

  38. Estimados amigos, me parece muy interesante esta macro con la función InputBox.
    Para agregar el apellido en otra columna, he realizado otra macro, para lo cual he copiado la macro inicial y he realizado los siguientes cambios:

    Nombre de la macro: “nombres” por “apellidos”
    Rango de celdas: A1:A5 por B1:B5
    Descripción en InputBox: “nombre” por “apellido”.

    De esta manera el apellido se copia en la columna B, manteniendo los nombres.

    Sub nombres()
    Dim i As String
    Dim A As Integer
    Range(“A1:A5”).Select ‘selecccionamos rango de trabajo
    For A = 0 To Selection.Cells.Count ‘realizar repeticiones para cada una de las celdas
    i = (InputBox(“Ingrese su nombre”, “Nombre”)) ‘recuperamos las cadena del input box
    ActiveCell.Offset(A, 0).Value = i ‘bajamos por las celdas de la selección de 1 en 1
    Next A
    End Sub

    Sub apellidos()
    Dim i As String
    Dim A As Integer
    Range(“B1:B5”).Select ‘selecccionamos rango de trabajo
    For A = 0 To Selection.Cells.Count ‘realizar repeticiones para cada una de las celdas
    i = (InputBox(“Ingrese su apellido”, “Apellido”)) ‘recuperamos las cadena del input box
    ActiveCell.Offset(A, 0).Value = i ‘bajamos por las celdas de la selección de 1 en 1
    Next A
    End Sub

  39. Estimados amigos, a las macros que envié en comentario anterior le incluí una macro final que une las dos macros iniciales (nombres y apellidos) a fin de que, con esta última macro, me solicite ingresar nombres y apellidos sin necesidad de ejecutar cada macro por separado.

    Sub nombres()
    Dim i As String
    Dim A As Integer
    Range(“A1:A5”).Select ‘selecccionamos rango de trabajo
    For A = 0 To Selection.Cells.Count ‘realizar repeticiones para cada una de las celdas
    i = (InputBox(“Ingrese su nombre”, “Nombre”)) ‘recuperamos las cadena del input box
    ActiveCell.Offset(A, 0).Value = i ‘bajamos por las celdas de la selección de 1 en 1
    Next A
    End Sub

    Sub apellidos()
    Dim i As String
    Dim A As Integer
    Range(“B1:B5”).Select ‘selecccionamos rango de trabajo
    For A = 0 To Selection.Cells.Count ‘realizar repeticiones para cada una de las celdas
    i = (InputBox(“Ingrese su apellido”, “Apellido”)) ‘recuperamos las cadena del input box
    ActiveCell.Offset(A, 0).Value = i ‘bajamos por las celdas de la selección de 1 en 1
    Next A
    End Sub

    Sub Nombre_Apellido()
    nombres
    apellidos
    End Sub

  40. Esta función se podría llegar a utilizar para el bloqueo del mismo excel? Es decir, utilizar ese cuadro de dialogo como una opción para introducir una clave o algún tipo de código?

  41. hola amigos muy interesante esta herramienta, soy un poco neofito en loque se debe a excel y sus funciones pero queria saber si se pueden expresar o digitar varias variables numericas

  42. Muy buena esta función de VBA. Tengo una inquietud: ¿Cómo queda el código para validar que no se ingresen datos repetidos o duplicados? ¿Cuáles líneas de código deben adicionarse? Estaré muy agradecido a quien me enseñe esto.

  43. Excelente tutorial. Me ha despejado algunas dudas, pero tengo un caso especial, espero podáis echarme una mano.

    Deseo crear mis SKU (códigos internos de stock) en función a unas categorías, subcategorías y número de artículo, dicho de otro modo:

    – Poder definir categorías, que por ejemplo sean desplegables y asignarles un valor. Por ejemplo categoría 1, valor 01.
    – Lo mismo con subcategorías, subcategoría 1, valor 01
    – Finalmente número del producto.

    El cuadro tendría 4 columnas: categoría, subcategoría, número de producto, SKU.

    Lo que deseo lograr es que el SKU sea de la forma:
    01010001

    01 = categoría
    01 = subcategoría
    0001 = número del producto.

    ¿Sería posible que se tomen estos valores sin que sean sumados, sino que sean una secuencia numérica en función a estos valores?

    Gracias de antemano por vuestra ayuda.

  44. Buenas tardes.

    He buscado y también leído sobre bastantes ejemplos de automatización de actividades, en mi trabajo me trace una meta pero no he podido encontrar la herramienta que me sirva para solucionar mi necesidad, Quisiera encontrar una guia o ver un ejemplo, para pegar el valor de una celda o un ComboBox o TextBox de un formulario teniendo en cuenta otras celdas u otros ComboBox o TextBox, a una celda especifica osea manejando tres variables, Hoja de destino, Ubicación en referencia Celda horizontal, Ubicación en referencia Celda Vertical.

    Realmente necesito una ayuda con esta situación. y en esta pagina me he encontrado con maravillosas macros,

    Muchas Gracias

Deja un comentario

Required fields are marked *.


Excel Avanzado located at , Lima, Perú . Reviewed by usuarios rated: 4.7 / 5