确认输入的方法

确认输入的方法

我有一个问题,可能有答案,也可能没有答案。

我有一个单元格,比如 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

因为它是工作表代码,所以非常容易安装和自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码-这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请首先在试用工作表上尝试一下。

如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除宏:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 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

相关内容