首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有一种方法可以在CountIf公式中使用变量,以便始终按1迭代列

有没有一种方法可以在CountIf公式中使用变量,以便始终按1迭代列
EN

Stack Overflow用户
提问于 2019-02-19 03:03:05
回答 1查看 308关注 0票数 0

我正在设置一个考勤电子表格,其中我们使用CountIf函数计算总的迟到和病假天数。每列列出一个员工。我正在尝试编写一个宏,它将统计每个员工的迟到或病假天数,将该值输入到一个单元格中,然后将该值复制到汇总表中。然后使用For循环使用相同的范围(行数)遍历每个员工,但始终移动到一列。这是我第一次真正使用VBA,所以我被卡住了,因为我的代码在尝试迭代列时给我一个错误。谢谢!

代码语言:javascript
运行
AI代码解释
复制
Sub Counting()
ActiveCell.Select
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[2]:RC[2],""L"")"
Selection.Copy
Sheets("Sheet3").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet1").Select
Application.CutCopyMode = False
Selection.ClearContents

Dim LastCol As Integer
With ActiveSheet
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With

Dim i As Integer
For i = 1 To LastCol

ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[i]:RC[i],""L"")"

ActiveCell.Select
Selection.Copy
Sheets("Sheet3").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet1").Select
Application.CutCopyMode = False
Selection.ClearContents
Next i
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 10:26:45

问题出在这一行:

ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[i]:RC[i],""L"")"

看起来你想要这里的i的值,而不是字母"i",你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[" & i & "]:RC[" & i & "],""L"")"

这将修复您的即时错误消息,但是宏作为一个整体是非常脆弱的,您应该阅读PEH参考的文章,并尽可能地替换所有这些.Select / .Copy / .PasteSpecial。

或者,您可以在没有宏的情况下执行所需的操作,而使用公式。如果可以的话,那就更好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54758281

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文