高分跪求一个用VBA写的excel的宏功能,各位大虾帮帮忙,不慎感激!

希望通过编写VBA语言通过宏实现以下功能:①在表(如图)中对每条记录进行判断,当时间1——时间8的单元格的填充色都为无时则删除该行记录(不删除也可以,可以通过在备注一列添加一个数字作为标识,方便我过滤删除)。例如运行宏后上面的记录中第十二行满足删除的条件,其他每行时间1至时间8中都只是有一个是被填充了底色的,所以第12行的记录被删除,或在12的记录的备注中填写数字1,我也可以过滤出来后再删除。当然这只是部分数据,只有12行,实际的记录可能有上千行记录需要处理,需要考虑到效率问题;
②当一行记录中有且仅有时间3有底色时且其时间范围在18:00——00:00时则在该行的备注处写入另一个数字,不能与上面①中的数字相同,也即,若时间1——时间8中都没有底色的一行的备注为0,则时间1——时间8中有且仅有时间3有底色时且其时间范围在18:00——00:00的一行的备注应为除0以外的数字作为标记
各位大虾多帮帮忙,希望代码中多注释一下,呵呵,小弟也想学学!谢谢了!
图片

Sub program()
Range("O2:O" & Range("E65536").End(xlUp).Row).ClearContents 'clear remark
Range("O2:O" & Range("E65536").End(xlUp).Row).Interior.ColorIndex = xlNone '初始化备注填充色
For iCount = 2 To Range("E65536").End(xlUp).Row '从第二行开始到有时间的最后一行

'the first condition
If -4142 = Sheets("Sheet1").Range("E" & iCount & ":L" & iCount).Interior.ColorIndex Then '如果1到8时间的填充色都是空
Range("O" & iCount) = "没有填充色" '标注自己改
End If

'the second condition
If -4142 <> Sheets("Sheet1").Range("G" & iCount).Interior.ColorIndex Then '如果时间三填充色不为空
If -4142 = Sheets("Sheet1").Range("E" & iCount & ":F" & iCount).Interior.ColorIndex And -4142 = Sheets("Sheet1").Range("H" & iCount & ":J" & iCount).Interior.ColorIndex Then 'other interior color is xlnone
If Hour(Range("G" & iCount)) - Hour("18:00") >= 0 Then '如果时间大于等于18:00
Range("O" & iCount) = "仅时间3符合条件" '标注自己改
End If
End If
End If
Next iCount
End Sub

‘自己建一个宏,根据你自己的情况再改改就好了,给你的注释已经能看懂了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-21
按Alt+F11进入Visual Basic 编辑器窗口,在菜单栏中点击“插入”按钮-“模块”,在“工程资源管理器”窗口(左上角)中双击模块1,然后在出现的代码编辑窗口复制粘贴以下代码。
Sub aa()
Dim rng As Range, j
For Each rng In Range("e2:e" & [a65536].End(3).Row)
If -4142 = rng.Resize(1, 8).Interior.ColorIndex Then
rng(1, 11) = 0
End If
If -4142 <> rng(1, 3).Interior.ColorIndex Then
j = Hour(rng(1, 3)): If j = 0 Then j = 24
If j - 18 >= 0 And j - 24 <= 0 Then
rng(1, 11) = 1
End If
End If
Next
End Sub

完成后关闭Visual Basic 编辑器窗口,返回工作表。按Alt+F8,在弹出的“宏”对话框中点击“执行”按钮就可以了。
如果有问题记得HI我
相似回答