Estoy empezando con VBA y necesito hacer una macro que me muestre en pantalla las tablas de multiplicar (del 1 al 5 por ejemplo) utilizando el bucle For-Next, he intentado el siguiente código: Sub TablasMultiplicacion() For M1 = 1 To 5 For M2 = 1 To 10 Next M2 Next M1 End Sub Necesito esto en pantalla: 1x1=1 1x2=2....etc hasta la tabla del 5 Pero no se como hacer para que aparezca en pantalla.
Sé que para un experto como tu es algo sencillísimo...
1 Respuesta
Respuesta de santiagomf
2
2
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
Te dejo dos formas de hacerlo. Creo que lo que buscas es la primera, pero la segunda queda mucho más bonita (te dibuja cada tabla en 5 columnas)... y también más complicada. El código de la primera sería este: Sub generarTablasMultiplicar() Dim i As Integer ' Lo usaremos para el bucle de la tabla a generar ' Borramos todo el contenido de la página actual Cells.Delete For i = 1 To 5 prepararTablaEnUnaColumna i Next i End Sub Sub prepararTablaEnUnaColumna(ByVal m2 As Integer) ' Usaremos m2 como el multiplicador Dim nColDestino As Integer ' Indicará en qué columna escribimos el resultado Dim m1 As Integer ' Para el multiplicando Dim txt As String ' Para el texto que vamos a escribir nColDestino = (m2 * 2 - 1) ' Asignará la columna 1 para la tabla del 1, la columna 3 para la tabla del 2, la tabla del 3 en la columna 5, etc... For m1 = 1 To 10 txt = Format$(m1) & "*" & Format$(m2) & "=" & Format$(m2 * m1) Cells(m1, nColDestino) = txt ' Ponemos el resultado en la celda correspondiente Next m1 End Sub Para la segunda forma, a mi me gusta más como queda, su código sería... Sub generarTablasMultiplicarEnCincoColumnas() Dim i As Integer ' Lo usaremos para el bucle de la tabla a generar ' Borramos todo el contenido de la página actual Cells.Delete ' Para que se vea mejor, en este caso pondremos el ancho de las columnas con valor 3 Columns.ColumnWidth = 3 For i = 1 To 5 prepararTablaEnCincoColumnas i Next i End Sub Sub prepararTablaEnCincoColumnas(ByVal m2 As Integer) ' Usaremos m2 como el multiplicador ' Pero supongamos que queremos poner la tabla en 5 columnas y que el resultado sea una fórmula que ' multiplique la primera columna y la tercera. ' Sería algo así como poner el primer valor en la columna 1, un asterisco en la columna 2, el segundo valor en ' la columna 3, el signo igual en la columna 4 y... la fórmula de multiplicar en la columna 5. ' Para separar dos tablas dejaríamos una columna en blanco. ' Por ello, la primera columna sería el número de la tabla multiplicado por 6 menos 5. Esto nos dará la ' columna 1 para la tabla del 1, la columna 7 para la tabla del 2, columna 13 para la del 3, etc... Dim nColDestino As Integer ' Indicará en qué columna escribimos el resultado Dim m1 As Integer ' Para el multiplicando Dim txtFormula As String ' Para el texto que vamos a escribir nColDestino = (m2 * 6 - 5) ' Asignará la primera columna ' Para que se vea bien la tabla que vamos a dibujar, cambiaremos el ancho de las 5 columnas Columns(nColDestino).ColumnWidth = 3 Columns(nColDestino + 1).ColumnWidth = 1.5 Columns(nColDestino + 2).ColumnWidth = 3 Columns(nColDestino + 3).ColumnWidth = 1.5 Columns(nColDestino + 4).ColumnWidth = 4 Columns(nColDestino + 5).ColumnWidth = 8 For m1 = 1 To 10 Cells(m1, nColDestino) = m1 ' Ponemos el primer valor Cells(m1, nColDestino + 1) = "*" ' El asterisco es fijo en la segunda columna Cells(m1, nColDestino + 2) = m2 ' Ponemos el segundo valor Cells(m1, nColDestino + 3) = "=" ' El igual es fijo en la segunda columna txtFormula = "=" & letraColumna(nColDestino) & Format$(m1) & "*" & letraColumna(nColDestino + 2) & Format$(m1) Cells(m1, nColDestino + 4).Formula = txtFormula ' Ponemos la fórmula para que haga la multiplicación Next m1 End Sub Function letraColumna(ByVal nColumna As Integer) As String ' Traduce el número de columna a la letra correspondiente Dim n1 As Integer Dim n2 As Integer If nColumna <= 26 Then letraColumna = Chr$(64 + nColumna) Else n1 = 0 n2 = nColumna Do While n2 > 26 n1 = n1 + 1 n2 = n2 - 26 Loop letraColumna = Chr$(64 + n1) & Chr$(64 + n2) End If End Function