Search code examples
excelmatrix-multiplicationvba

making multiplication table by using do while loop with excel vba


I am trying to do 2 dimension dynamic multiplication table by using "do while loop" but I can get only 1 row with this code can someone help? and i need to use do while loop not another loop.

Sub multp_doWhileLoop()
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
k = Range("b1").Value
l = Range("d1").Value
ReDim multp_tab(k, l) As Long 'defining ixj matrix
i = 1
j = 1
Range("a2:zz100000").Clear
Cells(2, 1) = "mult."
    Do While i < k + 1
        Do While j < l + 1
        Cells(i + 2, 1).Value = i       'for frame
        Cells(2, j + 1).Value = j       '
        multp_tab(i, j) = i * j
        j = j + 1

       Loop
       i = i + 1
    Loop
    i = 1
    j = 1
        Do While i < k + 1
            Do While j < l + 1
            Cells(i + 2, j + 1).Value = multp_tab(i, j)
            j = j + 1

            Loop
        i = i + 1
        Loop      
End Sub

Solution

  • Please tell me that you aren't getting help from me to cheat on your exams.

    Sub multp_doWhileLoop()
        ' 09 Apr 2017
    
        Dim Mtbl As Variant                     ' Multiplication table
        Dim R As Long                           ' row
        Dim C As Long                           ' column
        Dim Rmax As Long                        ' try to give meaning to the names
        Dim Cmax As Long                        ' you give to your variables
    
        With ActiveSheet
            Rmax = .Cells(1, "B").Value
            Cmax = .Cells(1, "D").Value
            If Rmax < 1 Or Cmax < 1 Then
                MsgBox "Please enter valid parameters in row 1.", _
                       vbExclamation, "Invalid matrix parameters"
                Exit Sub
            End If
            ReDim Mtbl(1 To Rmax, 1 To Cmax)    'defining ixj matrix
    
            Do
                R = R + 1
                C = 0
                Do
                    C = C + 1
                    Mtbl(R, C) = R * C
                Loop While C < Cmax
            Loop While R < Rmax
    
            With .UsedRange
                .Range(.Cells(2, 1), .Cells(.Rows.Count, .Columns.Count)).ClearContents
            End With
            .Cells(2, 1).Resize(Rmax, Cmax).Value = Mtbl
        End With
    End Sub