更改单元格以清除其他单元格的内容

我想清除CDE列中的单元格,如果date在列B中更改,但只有同一行中date发生更改的单元格(Date = Sheet1!c2),所以date来自表格1,但来自不同的单元格和不同的行样本xls文件

这是我做的,但它不工作,直到手动更改B列表2中的date:

Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("b1:b100")) Is Nothing Then Cells(Target.Row, 3) = "" Cells(Target.Row, 4) = "" Cells(Target.Row, 5) = "" End If End Sub 

这是一个非常简单,有限的例子。 我们只监视包含公式的单元格B5 。 该公式从另一个工作表中检索date:

在这里输入图像说明

在这张表的工作表代码区域中,我们安装下面的Eventmacros:

 Private Sub Worksheet_Calculate() Dim Monitor As Range, Helper As Range Dim rw As Long Set Monitor = Range("B5") Set Helper = Range("H5") rw = Monitor.Row Application.EnableEvents = False If Helper.Value = "" Then Helper.Value = Monitor.Value Else If Helper.Value <> Monitor.Value Then Helper.Value = Monitor.Value Range("C" & rw & ":E" & rw).ClearContents End If End If Application.EnableEvents = True End Sub 

代码使用单元格H5作为“帮助程序”代码首次运行时,辅助单元格被填充。 每一次之后,代码将比较“帮手”和H5 。 如果它们变得不同,则清除该行中的单元CE。

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

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. closuresVBE窗口

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件macros(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

macros必须启用这个工作!

编辑#1:

完全丢弃原来的macros并安装这个:

 Private Sub Worksheet_Calculate() Dim Monitor As Range, Helper As Range Dim rw As Long, r As Range Set Monitor = Range("B2:B100") Set Helper = Range("H2:H100") Application.EnableEvents = False For Each r In Helper If r.Value = "" Then r.Value = r.Offset(0, -6).Value End If Next r For Each r In Helper If r.Value <> r.Offset(0, -6).Value Then r.Value = r.Offset(0, -6).Value rw = r.Row Range("C" & rw & ":E" & rw).ClearContents End If Next r Application.EnableEvents = True End Sub 

如您所见,我们必须循环范围内的每个项目。

尝试使用Worksheet_Change 事件 (请参阅https://msdn.microsoft.com/EN-US/library/office/dn301178.aspx

 Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Column = 2 Then Rem Disable Events. So it's not triggered by changes to columns D, E & F Application.EnableEvents = 0 Rem Clear Columns D, E & F same row .Cells.Offset(, 2).ClearContents .Cells.Offset(, 3).ClearContents .Cells.Offset(, 4).ClearContents Rem Enable Events after changes Application.EnableEvents = 1 End If: End With End Sub