有很多人问这个问题,如果在一列中写算式,如何在旁边列自动计算出结果?
有很多人会建议用 evaluate 函数来实现,我很早以前也写过这种方法,详情请参见
但是,这种方式仍然要在结果列输入自定义的函数,并没有实现广大网友们要的真正自动化。
要完全自动化,必须使用 VBA,因为只有 VBA 才能根据事件来触发结果。
案例:
如下表所示,A 列是随机列出的一些算式。要求:只要选中 A 列的任意非空区域,就会在 B 列的对应区域自动得出结果。
这是最终完成效果:
解决方案:
1. 按 Alt+F11 打开 VBE,输入以下代码:
Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i, n, r, c As Integer, calculator '声明变量 calculator = Selection 'calculator为选中的单元格区域 r = Application.WorksheetFunction.Max(Selection.Cells(1).Row, "2") '获取选中区域的第一个行号,如果行号小于2,则从2开始 n = Selection.Cells(Selection.Cells.Count).Row 'n为选中区域的最后一个行号 c = Selection.Cells.Column '获取选中区域的列号 For i = r To n '历遍选中的区域 If Cells(i, c) <> "" Then '如果选中的单元格不为空 Cells(i, c + 1) = "=" & Cells(i, c) '在右边列出计算结果 End If Next End Sub Sub 清空() Dim j, k As Integer k = Sheet1.Range("b" & Sheet1.Rows.Count).End(xlUp).Row '找出B列非空的最后一个行号 For j = k To 2 Step -1 '从最后一个非空行向上历遍至第2行 Sheet1.Range("B" & j).Clear '清空B列除B1之外的所有单元格 Next End Sub
2. 保存后返回 Excel,选择菜单栏的“开发工具”-->“插入”-->“按钮”
3. 在弹出的指定宏对话框中选择刚才设置的“清空”作为宏 --> 确定
4. 将默认的按钮名称更改为“清空”
5. 现在就已经完成了,这是演示效果: