Julie希望在工作表上有一些输入单元格,当有人输入值时,该单元格会自动将20%添加到输入的内容中。

例如,如果有人在这些单元格之一中输入200,则实际输入的是240。

您可以使用多种方式使用宏来完成此任务。

最好的方法是创建一个工作表中的单元格更改后自动运行的宏。然后,您可以检查是否在输入单元格之一中进行了更改,并相应地调整值。

如果在三个单元格(A1,C3或B8)中的任何一个中输入值,则以下示例修改输入的值。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInput As Range     Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired     Set rInput = Range("A1, C3, B8")



Set rInt = Intersect(Target, rInput)

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

请记住,这是一个事件处理程序,这意味着(在这种情况下)工作表中的任何更改都会触发它。为了使用此宏,请在工作表选项卡上单击鼠标右键,然后从出现的“上下文”菜单中选择“查看代码”。 Excel将显示VB编辑器,然后可以添加Worksheet_Change代码。

请注意,确定是否在三个已定义输入单元之一中进行更改的关键是“相交”功能。它检查目标范围(触发Worksheet_Change处理程序的已更改单元格)与rInput范围(输入单元格)之间是否存在交集。如果存在,则rInt将包含确实相交的单元格。

然后,宏会逐步遍历这些单元格,如果这些单元格包含数值,则它将这些单元格乘以120%。 (乘以120%等于将值增加20%。)请注意,完成乘法后,.EnableEvents属性设置为False;如果未采取此保护措施,则每次乘法都会再次触发此事件处理程序,并且您将(永远)将单元格值乘以120%。

如果您想对值进行实际的其他处理(例如舍入到特定数量的小数点或整数),那么您只需要更改实际进行乘法运算的单行即可。

如果您的输入像元位于连续区域中,则更好的方法可能是将这些输入像元定义为命名范围,然后在宏中使用该命名范围来确定更改的像元的交集。这样,当您的输入单元格组发生更改时,您无需修改​​宏。

要使用此方法,假设输入单元格的范围是B7:B19。选择这些单元格,然后使用单元格区域左上角的名称框,输入名称“ plus20pct”。此操作将名称分配给范围。然后,您可以在宏中使用该名称。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired

Set rInt = Intersect(Target, Range("plus20pct"))

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

请注意,唯一的变化是确定单元格的交集的方式— Intersect函数使用“ plus20pct”范围作为参数。其他一切都像以前一样。

既然您已经了解了如何使用宏执行此操作,那么问题仍然是您是否真的应该使用宏进行此操作。首先,这些宏的作用是有限的。例如,如果您的用户在一个输入单元格中输入日期或时间怎么办?在内部,Excel将日期和时间处理为数字,这意味着它们也将增加20%。

其次,如果有人通过添加或删除行或列来修改工作表结构,则需要考虑工作表会发生什么。

宏使用绝对单元格引用(A1,C3和B8)或命名范围(plus20pct)。尽管可以通过添加或删除行或列来调整命名范围,但绝对单元格引用不会更改。因此,您可能会进行宏检查(和调整)

不再是预期数据输入单元的单元。

第三,假设有人在您的一个输入单元格中输入了一个值(200)。它会自动增加20%,变为240。此人看到了此更改并想知道发生了什么,因此他们选择了单元格,然后按F2键开始编辑该单元格。在进行更改之前,他们记得“哦,是的;应该自动增加20%”。因此,他们只需按Enter即可接受240值。

但是,Excel将此视为更改,并将240增加了20%,结果是288,而不是您或用户的预期。

第二个考虑因素-用户困惑-是自动更改用户输入工作表的最大潜在问题。不太混乱的方法是为工作簿定义一个明确的输入区域。用户将图形放到输入区域中,而这些图形在输入时仍然保留。然后,在其他单元格或公式中,进行20%的调整。

与自动更改他们在工作表单元格中输入的内容相比,这种设计方法(修改工作表设计以方便数据输入)对于用户而言,可能会减少混乱。它还消除了任何启用了宏的工作簿所固有的风险-用户可以在不启用宏的情况下加载工作簿,从而确保未按预期调整数字。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12684)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。