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 SubAhora, 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 SubNota 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.
