Excel根据选择的单元格自动计算
1、电脑上面打开Excel表格,按下【Alt+F11】组合键调出VBA编辑器,或者点击Excel表格上方的【开发工具】,【Visual Basic】。
2、在VBA编辑器里边的VBA项目下方双击“Sheet1”工作表,在打开的代码窗口里边输入以下程序代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'当工作表上的选定区域发生改变时执行
On Error Resume Next '忽略运行过程中出现的错误
Dim r, ro, c, co, i, j As Long '数据类型定义
Set mySheet1 = ThisWorkbook.Worksheets("Sheet1") '定义工作表
r = Target.Row '选择的第几行,选择多行时只默认第一行
ro = Target.Rows.Count '总共选择多少行
c = Target.Column '选择的第几列,选择多列时只默认第一列
co = Target.Columns.Count '总共选择多少列
For i = 2 To 1000 '从第2行执行到1000行
If mySheet1.Cells(i, 6) <> "" And mySheet1.Cells(i, 2) <> "" Then
'如果两列对应的单元格都不为空白,则执行其计算
mySheet1.Cells(i, 7) = mySheet1.Cells(i, 6) * mySheet1.Cells(i, 2)
End If
Next
If ro <= 1000 And co < 50 Then '选择的范围小于等于1000行,小于50列
For j = 1 To ro '从1执行到选择的多少行
If r > 1 And c > 2 And c < 6 And mySheet1.Cells(r + j - 1, c) <> "" And _
mySheet1.Cells(r + j - 1, 6) <> "" Then
'如果选择的单元格从第二行开始,且在第3到第5列之间,并且单元格不为空白,则执行计算
'下划线“_”为程序的连接符,毕竟程序语句不想写那么长,所以换行
mySheet1.Cells(r + j - 1, 7) = mySheet1.Cells(r + j - 1, 6) * _
mySheet1.Cells(r + j - 1, c)
End If
Next
End If
End Sub
3、程序思路:
(1)选择的单元格是要单独计算,其余的单元格也要计算,而程序的计算顺序是从上往下的,因此,可以先全部计算,之后再单独对选择的单元格进行计算。
(2)写VBA程序的时候,为了防止选择一整行或一整列而出现卡死的现象发生,所以就在选择的范围里边加了个限制的条件。
4、回到Excel表格工作表界面,选择单元格时将会根据选择的单元格进行自动计算。
5、选择其他单元格时,它将会按照B列与F列对应的单元格相乘计算。
6、如果选择的区域里边含有多列时,它将会以选择区域里边的第一列进行计算。