Estos días he tenido una carga importante de trabajo (¡yey, dinero!) y mis porciones de desayuno han bajado a comparación de mi necesidad de comer calorías (papiiiitas). Combinando una breve reseña de que frutas comer con la opción de como enseñar variables con arraigos a mis alumnos de Excel ha nacido para mí una revelación.
Para Excel, un arraigo es una variable que tiene múltiples opciones entre las cuales escoger (como yo y mi desayuno) todas ellas depositadas dentro del mismo nombre y solo identificadas por un numero de índice.
La nomenclatura es: MiVariable(n)
Donde MiVariables es una variable a nuestra elección y n es el número de opciones depositada en la variable.
Sabiendo que tengo 6 opciones para escoger, voy a crear una variable con un arraigo de 6 en mi código de VBA, el cual queda así.
Sub arraigo_desayuno() Dim MiDesayuno(6) As Variant End Sub
Nota que he designado que la variable sea del tipo Variant, esto porque un arraigo no puede ser del tipo String (o texto) y para dar mayor flexibilidad ya que Variant conlleva distintos tipos de datos.
Sub arraigo_desayuno() Dim MiDesayuno(6) As Variant MiDesayuno(1) = Worksheets("Desayuno").Range("B3").Value MiDesayuno(2) = Worksheets("Desayuno").Range("B4").Value MiDesayuno(3) = Worksheets("Desayuno").Range("B5").Value MiDesayuno(4) = Worksheets("Desayuno").Range("B6").Value MiDesayuno(5) = Worksheets("Desayuno").Range("B7").Value MiDesayuno(6) = Worksheets("Desayuno").Range("B8").Value End Sub
Ahora, con el código de arriba estoy designando un valor a cada uno de mis arraigos, esto lo hare porque el siguiente paso será escoger una fruta mediante una inputbox y comprobar que funciona con un msgbox que me dirá que fruta escogí.
Sub arraigo_desayuno() Dim MiDesayuno(6) As Variant Dim seleccion As Integer MiDesayuno(1) = Worksheets("Desayuno").Range("B3").Value MiDesayuno(2) = Worksheets("Desayuno").Range("B4").Value MiDesayuno(3) = Worksheets("Desayuno").Range("B5").Value MiDesayuno(4) = Worksheets("Desayuno").Range("B6").Value MiDesayuno(5) = Worksheets("Desayuno").Range("B7").Value MiDesayuno(6) = Worksheets("Desayuno").Range("B8").Value seleccion = InputBox("Seleccionar numero de fruta", "mi desayuno") MsgBox "usted a seleccionado " & MiDesayuno(seleccion), vbOKOnly, "Que escogi" End Sub
¡Listo! Mi arraigo funciona a la perfección, con lo que me he ahorrado un sinfín de if´s y msgbox, pero aun lo podría hacer mejor. Si en lugar de designar por default un valor a mi arraigo lo quiero hacer mas inteligente puedo usar el siguiente código.
Sub arraigo_desayuno_2() Dim MiDesayuno2() As Variant Dim rng, i As Integer Worksheets("desayuno").Activate rng = WorksheetFunction.CountA(Range("B3:B1000000")) ReDim MiDesayuno2(rng) As Variant For i = 1 To rng MiDesayuno2(i) = Cells(i + 2, 2).Value Next i End Sub
Nota como al principio solo le declaro el paréntesis () sin ningún valor y después usando la función ReDim vuelo a actualizar la variable para designarle el largo del numero de elementos, así si tengo más o menos fruta podre tener una selección mejor sin necesidad de volver a definir el largo de mi arraigo.
Sub arraigo_desayuno_2() Dim MiDesayuno2() As Variant Dim rng, i, seleccion As Integer Worksheets("desayuno").Activate rng = WorksheetFunction.CountA(Range("B3:B1000000")) ReDim MiDesayuno2(rng) As Variant For i = 1 To rng MiDesayuno2(i) = Cells(i + 2, 2).Value Next i seleccion = InputBox("Seleccionar numero de fruta", "mi desayuno") MsgBox "usted a seleccionado " & MiDesayuno2(seleccion), vbOKOnly, "Que escogi" End Sub
¡Los arraigos son las cosas mas CUTE que encontraras con el manejo de VBA! Son fáciles y extremadamente dinámicos. Mi ejercicio es mucho mas largo que eso, pero se los enseño luego que me tengo que seguir apurando que papi necesita zapatos nuevos (ojos de $$$ aquí).
Comparte tu experiencia y cualquier duda ya sabes, caja de comentarios.