Search code examples
excelvisual-studio-macrosvba

Multiplying an integer with a currency in Excel VBA


In my excel table i have one row (5th row) as number of items and another (6th row) as the price of the items. For example i want to multiply 200 with $56.50 but I am having a problem with this script. Can anyone please help.

Sub calcprice()
    Dim i As Integer
    Dim iRowNumber As Integer   ' Integer to store result in
    Dim val As Double

    iRowNumber = InputBox(Prompt:="Number of Rows", _
          Title:="Rows: ", Default:="# of Rows")
    For i = 1 To iRowNumber
        If Cells(i, 5).Value >= 0 And Cells(i, 6).Value >= 0 And IsEmpty(Cells(i, 5)) = False And IsEmpty(Cells(i, 5)) = False Then
            val = FormatCurrency(Cells(i, 5).Value) * Cells(i, 6).Value
            Cells(i, 7).Value = val
        End If
    Next i
End Sub

it says runtime error 13
type mismatch here is the image: it says currency



Here is the link: https://www.dropbox.com/s/lla2cuz8hqu5qyp/test.xlsm
also i cannot use the =a*b i have to use macros!


Solution

  • You don't need a loop

    You can work with a single shot range in colunm G that

    • Adds a formula from G5 to the user entered iRowNumber to test whether a result > 0 happens in each row (or adds "" for a 0 result)
    • overwrite the formulae with the values

      Sub calcprice()
          Dim iRowNumber As Long   ' Integer to store result in        
      iRowNumber = InputBox(Prompt:="Number of Rows", _
            Title:="Rows: ", Default:="# of Rows")
      
      With Range(Cells(5, 7), Cells(iRowNumber, 7))
      .FormulaR1C1 = "=IF(N(RC[-1]*RC[-2]),RC[-1]*RC[-2],"""")"
      .Value = .Value
      End With
      End Sub