Excel countif vba 代码,其标准产生值
Posted
技术标签:
【中文标题】Excel countif vba 代码,其标准产生值【英文标题】:Excel countif vba code with criteria resulting with values 【发布时间】:2013-10-15 10:20:21 【问题描述】:我不确定我想要实现的目标是否可行。所以这里是:
我有 2 张工作簿:
第一张表包含员工参加或未参加培训的原始数据(他们无法参加培训)。表格包含几列,例如:姓名、特殊 ID(每个员工都不同)、2 个空白列、存在(是/否)等等......
第二张表将根据范围和存在条件创建报告。
技术上是这样的:
报告表有员工列表,他们将使用自动过滤器进行过滤。将检查这些过滤的员工是否参加了 14 类培训。类别因范围而异(范围是已知的;时间范围将被添加或调整以适应新添加的培训)。
我的问题: 是否可以创建 vba 代码来检查员工是否参加了某些培训(countif 在某个范围内,条件为:不存在 = 不计数)并将值粘贴到某些单元格?如果是,您能否就如何做到这一点提供一些建议?我不是要求准备好的代码。
试图让它发挥作用,但我坚持这一点。 “if cells.find...”行出错。
Sub Check()
MyRange = Range("A1", Selection.End(xlDown))
For Each MyCell In MyRange
With Range("pp2dni2007")
If Cells.Find(MyCell.Value) Is Nothing Then
Else
If ActiveCell.Value = ActiveCell.Offset(0, 3).Value Then
MyCell.Offset(0, 6).Value = 1
Else
MyCell.Offset(0, 6).Value = 0
End If
End If
End With
Next
End Sub
第二次编辑,较早的代码执行了无限循环。现在我认为 if 语句引用了错误的范围,但不知道如何处理它。
Sub Check()
Dim MyRange As Range, MyCell As Variant
Range("A1").Select
Set MyRange = Range(Selection, Selection.End(xlDown)).Rows.SpecialCells(xlCellTypeVisible)
For Each MyCell In MyRange.Cells
With Range("pp2dni2007")
If .Cells.Find(MyCell.Value) Is Nothing Then
Else
If .Cells.Find(MyCell.Value).Value = .Cells.Find(MyCell.Value).Offset(0, 3).Value Then
MyCell.Offset(0, 6).Value = 1
Else
MyCell.Offset(0, 6).Value = 0
End If
End If
End With
Next
End Sub
示例工作簿:https://dl.dropboxusercontent.com/u/7421442/sample%20workbook%20(1).xls
【问题讨论】:
是的,这是可能的。如果您不是要代码,那么您要的是什么? 好吧,我不知道如何解决这个问题。宏应包含以下操作:将公式插入过滤的单元格,然后复制粘贴为值。或者还有另一种通过宏运行公式并仅粘贴值的方法?如果第二个选项是可能的,我想询问一些示例代码。 【参考方案1】:声明所有变量,例如,
Dim MyRange as Range, MyCell as Range
。
如果没有声明,MyCell
是变体数据类型,这就是您收到 Object Required
错误的原因。然后做:
For Each MyCell In MyRange.Cells
在With
块内,您可能想要使用(注意Cells
前面的.
):
If .Cells.Find(MyCell.Value) Is Nothing Then
此外,您可能需要修改您对ActiveCell
所做的操作,因为这永远不会改变哪个单元格处于活动状态,我不确定它是否会给您带来预期的结果。最好避免依赖Active
和Select
方法(除非将它们用作用户输入)。相反,直接使用范围对象。
【讨论】:
谢谢,它在某种程度上向前迈进了一步,但仍然不完美。更新了代码。 我想我知道问题出在哪里了!有两个范围:MyRange(对应于员工 ID)和 pp2dni2007(对应于员工 ID,但在另一个带有培训列表的工作表中)。 If 语句必须对应于范围 pp2dni2007 而不是 MyRange(当前它引用 MyRange)。如何处理? 除非您更改了代码,否则您使用的If
语句以Range("pp2dni2007")
为条件。我不明白你在问什么。由于这已经解决了您的直接问题/错误,请考虑将此答案标记为已接受,并提出一个新问题来帮助您解决语法/逻辑错误。
嗯...我认为这不是因为它不能正常工作 - 我检查过。也许代码看起来不错,但不知何故它的工作方式与我预期的不同。我回家后会尽力为您提供示例数据。
大卫你是对的。范围设置好,问题出在我的 if 语句上。我改变了它,现在它工作正常。感谢您的帮助和耐心:)以上是关于Excel countif vba 代码,其标准产生值的主要内容,如果未能解决你的问题,请参考以下文章
自动填充 Application.Countifs.Formula VBA Excel
Excel VBA 使用 SUMPRODUCT 和 COUNTIFS - 速度问题
Excel:VBA:CountIf()运行时出现Run-time error: