根据条件删除单元格

我在A列中列出了员工名单,并在列B中列出了他们的状态(从下拉菜单中select“活动”或“非活动”)。他们在名为“员工列表”的表中。

当员工的状态设置为“未激活”时,我想要将员工自动剪切并粘贴到另一个工作表。 另一张纸叫做“Misc”

如果在状态设置为“Inactive”时不能自动完成,那么也许我可以设置一个button来调用该工作表中的VBA命令,从列表中清除所有不活动的员工并将其移动到另一个表中。

我比Ben M更加渴望声望,所以我会给你发一些代码。 :)你当然应该听取他的build议,并开始阅读好书。

下面可以使用一些微调,但应该是一个很好的起点。 如果您正如您所写的那样,希望Excel在发生Inactive选项后立即自动移动“员工姓名”和“状态”,则应该这样做:

Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False ' Only react to edits in Column B: ' If Not Intersect(Target, Sheets("Employee List").Range("B:B")) Is Nothing Then ' Dont do anything if > 1 cell was just changed: ' If Target.Cells.Count = 1 Then ' Only make the change if the new value in Col B is "inactive": ' If Target.Value = "Inactive" Then ' Find the next available cell on the Misc sheet for a name: ' Dim nextRange As Range Set nextRange = Sheets("Misc").Range("A65536").End(xlUp).Offset(1, 0) ' Cut the employee name and status and paste onto the Misc sheet: ' Range(Target, Target.Offset(0, -1)).Cut Sheets("Misc").Paste Destination:=Sheets("Misc").Range(nextRange.Address) End If End If End If Application.EnableEvents = True End Sub 

请注意,每当您针对某个事件编写代码时,您可能需要禁用事件,以使Excel不会陷入任何无限循环。

开始使用Excel VBA的最佳方法之一是loggingmacros并查看它们生成的代码。 这样你会看到如何使用VBA代码在Excel中操作对象。

另外,考虑获得VBA开发者手册 。 它基于较旧版本的Office,但VBA在Office的最后一个查看版本中没有太多变化(如果有的话),所以它仍然是一个很好的阅读。

学习对象实例化,循环,条件逻辑,string连接等基本的东西,这将带你很长的路要走。


对于你当前的问题,你可能会做的是logging剪切和粘贴移动的macros,看看它产生的代码。 然后看看你是否可以找出如何修改该代码来适应你的目的。

回到堆栈溢出(Stack Overflow),如果遇到困难,请回答非常具体的问题 ,这就是最好的答案。 例如,你可能会说“如何循环遍历我的单元格范围来应用这个复制和粘贴?”。