如何在Microsoft Excel VBA中进行计算?

时间:2019-03-05 11:55:29

标签: excel vba

我15岁,我正在做一名开发人员实习生,我有点辛苦。

我有一个包含3列的表格,A是“数字” B是“百分比”,C是“值”。 “值”列为空白,我需要使用宏按钮来计算值。我已经尝试过了,但是这是错误的,因为我没有在VBA中进行计算:

Public Sub PushButton ()
    Range("C2:C11").Formula = "=A2*B2/100"
    Range("C2:C11").Value = Range("C1:C6).Value
End Sub

我该如何解决?

2 个答案:

答案 0 :(得分:2)

您使用的是定义的范围,可以使用这样的动态范围来做到这一点:

Option Explicit
Sub PushButton()

    Dim i As Long, LastRow As Long

    With ThisWorkbook.ActiveSheet
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'first you need to find the last row on the active sheet

        For i = 2 To LastRow 'then iterate through all the rows starting from 2, if row 1 has headers
            .Cells(i, 3) = .Cells(i, 1) * .Cells(i, 2) / 100
        Next i
    End With


End Sub

如果您需要帮助来理解此代码,请告诉我。

编辑:说明

好吧,您首先要做的是Dimension所有变量,并帮助您在所有代码上方使用Option Explicit

我为循环确定了1个变量的大小,并为另一个变量确定了文本的最后一行。

要找到最后一行,您实际要执行的操作将是excel,请选择最后一行(1048576)以及将要显示文本的列(在本例中为1或“ A”列),然后按ctrl + Up excel而vba会将您带到文本的最后一个单元格。

为此,您可以使用Cells(Row, column)来代替手动插入行1048576,而只需使用rows.count,就可以了。

获得最后一行后,您将使用For i循环进行迭代,这意味着对于名为i的变量,该变量等于2(For i = 2To LastRow(到最后一行)您计算得出),每次循环重新启动时,VBA都会在ForNext之间重复代码,向i添加1个数字。

在这种情况下,只需在Cells(i, 3)的行上添加一个数字,以便您可以根据其i的值修改该单元格。

答案 1 :(得分:0)

我认为您需要质疑为什么Excel需要按需计算而不是像正常情况那样自动计算。失败的话有几个选择

您可以在ThisWorkbook对象中使用以下内容将计算方法更改为“手动”

Option Explicit
Dim xlCalcMethod As XlCalculation
Private Sub Workbook_Open()
    With Application
        ' Store users current method for when closing the workbook
        xlCalcMethod = .Calculation
        .Calculation = xlCalculationManual
    End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Reset calculation
    Application.Calculation = xlCalcMethod
End Sub

然后按下按钮时,使用以下代码计算放置在模块中的

Option Explicit
Public Sub Button_Click()
    Application.Calculate
End Sub

另一个无需循环的选择是:

Sub CalculateRange()
    Dim rng As Range

    ' Update for your Range
    With ActiveSheet
        Set rng = .Range("C2:C" & .Cells(.Rows.Count, "A").End(xlUp).Row)
    End With

    rng.Value2 = Evaluate(rng.Offset(0, -2).Address & "*" & rng.Offset(0, -1).Address & "/100")
End Sub

最后,您的想法完全可以接受VBA