仅计算选定的行

时间:2019-02-12 10:33:01

标签: excel vba dynamic range

我的工作簿很大,正在尝试提高性能。

是否可以/可以将公式存储在代码中包含的某种列表中,而不是电子表格中的单元格中?

Variable SelectedRow = the currently selected row

例如:

ColumnBFormula = A(SelectedRow) + 1
ColumnCFormula = A(SelectedRow) + 2

如果用户在单元格A3中输入4,则该宏仅在空单元格B3和C3中写上述公式,然后转换为值。电子表格的其余部分保持不变(应该到处都只有值)。

然后,用户在A4单元格中输入6,然后电子表格将公式写入空白单元格B4和C4,然后进行计算并转换为值。

谢谢

2 个答案:

答案 0 :(得分:0)

鉴于您知道代码要执行的操作,则无需输入公式即可执行操作。

在VBA编辑器中,将此代码添加到“ ThisWorkbook”对象中...

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim objCell As Range

    Application.EnableEvents = False

    For Each objCell In Target.Cells
        If objCell.Column = 1 Then
            If objCell.Value = "" Then
                objCell.Offset(0, 1) = ""
                objCell.Offset(0, 2) = ""
            Else
                objCell.Offset(0, 1) = objCell.Value + 1
                objCell.Offset(0, 2) = objCell.Value + 2
            End If
        End If
    Next

    Application.EnableEvents = True
End Sub

希望对您有用。

仅供参考-您需要为值添加相关的错误检查(如果不是数字等),则需要对其进行改进。

答案 1 :(得分:0)

尝试:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Lastrow As Long

'Refer to Sheet1
With ThisWorkbook.Worksheets("Sheet1")

    'Check if Column A affected
    If Not Intersect(Target, Range("A:A")) Is Nothing And IsNumeric(Target) Then
        'Disable event to avoid event trigger
        Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target + 1
            Target.Offset(0, 2).Value = Target + 2
        'Enable event
        Application.EnableEvents = True

    End If

End With

结束子 说明:

enter image description here

启用事件

enter image description here