有没有办法在CountIf公式中使用变量,以便始终将列迭代1

问题描述 投票:0回答:1

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

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
excel vba
1个回答
0
投票

问题出在这一行:

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

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

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

这将修复您的即时错误消息,但是整个宏非常脆弱,您应该阅读文章PEH引用并替换所有这些。尽可能选择/ .Copy / .PasteSpecial。

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

© www.soinside.com 2019 - 2024. All rights reserved.