我有一个问题,可能有答案,也可能没有答案。
我有一个单元格,比如 A1,如果 A1 中有“y”,则将 A2 和 A3 中的值相加,并将总和放在 A4 中。如果 A1 为空,则 A4 只包含 A3 的值。这在 Excel 中非常简单。
但是,问题是,除了输入或删除“y”之外,我还能用什么呢?就我而言,我的数据有几千行,而这个“y”选项让我无缘无故地添加了额外的行,我宁愿避免这种情况。
本质上,我想要的是一种使用 A2 中的值的方法,并找到一种方法来命令 excel 更新 A4 值(如果我愿意的话)(通过将 A2 和 A3 相加)。否则,它将继续保留 A3 的值。
我曾尝试使用宏来更新,通过更改 A2 的字体颜色和背景颜色来表示确认,但这种方法行不通,因为 Excel 不会对字体/颜色变化进行计算。如果我按 F9,它会刷新并正常工作,但这太麻烦了,所以我不想要这个。
大家请给我推荐一些其他的东西吧!非常感谢。
答案1
输入以下内容事件宏在工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A2 As Range
Set A2 = Range("A2")
If Intersect(A2, Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
[A4] = [A2] + [A3]
Application.EnableEvents = True
End Sub
因为它是工作表代码,所以非常容易安装和自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码-这将打开一个 VBE 窗口
- 粘贴内容并关闭 VBE 窗口
如果您有任何疑虑,请首先在试用工作表上尝试一下。
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使其工作!
编辑#1:
首先丢弃上一个宏并将其替换为以下内容:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim A2 As Range
Set A2 = Range("A2")
If Intersect(Target, A2) Is Nothing Then Exit Sub
Cancel = True
[A4] = [A2] + [A3]
A2.Font.Bold = True
End Sub
它仅影响双击行为A2。代码可以轻松扩展以覆盖其他单元格或范围。
编辑#2:
在此版本中双击A2确认A2. 双击A3未确认A2:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim A2 As Range, boo As Boolean, A3 As Range
Set A2 = Range("A2")
Set A3 = Range("A3")
If Not Intersect(Target, A2) Is Nothing Then
[A4] = [A2] + [A3]
A2.Font.Bold = True
Cancel = True
End If
If Not Intersect(Target, A3) Is Nothing Then
A2.Font.Bold = False
[A4] = [A3]
Cancel = True
End If
End Sub
编辑#3:
使用此宏将功能扩展到列之外的列A:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rw2 As Range, rw3 As Range, kolumn As Long
Set rw2 = Range("2:2")
Set rw3 = Range("3:3")
kolumn = Target.Column
If Not Intersect(Target, rw2) Is Nothing Then
Cells(4, kolumn) = Cells(2, kolumn) + Cells(3, kolumn)
Cells(2, kolumn).Font.Bold = True
Cancel = True
End If
If Not Intersect(Target, rw3) Is Nothing Then
Cells(2, kolumn).Font.Bold = False
Cells(4, kolumn) = Cells(3, kolumn)
Cancel = True
End If
End Sub