Tablas de multiplicar con macro

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
2
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas