用于对列中的值进行计数的VBA代码
有人能告诉我如何为下面的实例编写VBA代码吗? 我有8名学生12周的每周出勤数据。 我已经写了一个代码,在缺席的情况下用红色填充单元格的颜色,在缺席的情况下用绿色填充单元格的颜色 现在,我必须为每一行的每个学生添加“缺席”的数字,并在下一列中填写该数字。同样地,计算每一行中每个学生的缺席人数,并将该数字填入另一列。 最后,我应该计算每个学生的“当前”百分比用于对列中的值进行计数的VBA代码,vba,count,Vba,Count,有人能告诉我如何为下面的实例编写VBA代码吗? 我有8名学生12周的每周出勤数据。 我已经写了一个代码,在缺席的情况下用红色填充单元格的颜色,在缺席的情况下用绿色填充单元格的颜色 现在,我必须为每一行的每个学生添加“缺席”的数字,并在下一列中填写该数字。同样地,计算每一行中每个学生的缺席人数,并将该数字填入另一列。 最后,我应该计算每个学生的“当前”百分比 Option Explicit Sub CopyPaste() ' ' CopyPaste Macro ' Sheets("At
Option Explicit
Sub CopyPaste()
'
' CopyPaste Macro
'
Sheets("Attendance").Select
Range("A1:M9").Select
Selection.Copy
Sheets("Report").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
Sub Filling()
'
' Filling Macro
'
Dim Cell As Range
Sheets("Report").Select
For Each Cell In Range("B2:M9")
If Cell.Value = "Present" Then
Cell.Interior.Color = 255
ElseIf Cell.Value = "Absent" Then
Cell.Interior.Color = 5287936
Else
'do nothing
End If
Next Cell
End Sub
Sub Calculate()
'
' Calculate Macro
'
Sheets("report").Select
Range("N1").Select
ActiveCell.FormulaR1C1 = "Total Present"
Range("N2").Select
ActiveCell.FormulaR1C1 = "7"
Range("N3").Select
ActiveCell.FormulaR1C1 = "8"
Range("N4").Select
ActiveCell.FormulaR1C1 = "4"
Range("N5").Select
ActiveCell.FormulaR1C1 = "7"
Range("N6").Select
ActiveCell.FormulaR1C1 = "8"
Range("N7").Select
ActiveCell.FormulaR1C1 = "7"
Range("N8").Select
ActiveCell.FormulaR1C1 = "4"
Range("N9").Select
ActiveCell.FormulaR1C1 = "7"
Range("O1").Select
ActiveCell.FormulaR1C1 = "Total Absent"
Range("O2").Select
ActiveCell.FormulaR1C1 = "5"
Range("O3").Select
ActiveCell.FormulaR1C1 = "4"
Range("O4").Select
ActiveCell.FormulaR1C1 = "8"
Range("O5").Select
ActiveCell.FormulaR1C1 = "5"
Range("O6").Select
ActiveCell.FormulaR1C1 = "4"
Range("O7").Select
ActiveCell.FormulaR1C1 = "5"
Range("O8").Select
ActiveCell.FormulaR1C1 = "8"
Range("O9").Select
ActiveCell.FormulaR1C1 = "5"
Range("P1").Select
ActiveCell.FormulaR1C1 = "Attendance Rate"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=(RC[-2]*100)/12"
Range("P2").Select
Selection.AutoFill Destination:=Range("P2:P9"), Type:=xlFillDefault
Range("P2:P9").Select
End Sub
用这个来获得灵感:
Sub countAbsence()
Dim r As Range
Dim c
Set r = Sheets("Sheet1").Range("A1:A8")
c = Application.WorksheetFunction.CountIf(r, "yes")
MsgBox "column A has " & c & " instances of 'yes'"
End Sub
问你是否需要更多的解释
如果要将计数和百分比放在某个位置,可以执行以下操作:
Range("B1").value = c
Range("C1").value = c / 8
Range("C1").style = "percent"
更新完成代码,在A2:M9中获取表格,并生成“出席”、“缺席”和“出勤率”列:
Option Explicit
Option Compare Text
Sub calculcatePresentAbsent()
Dim absent, present
Dim i
Dim record As Range, target As Range
Set record = Range("B1:M1")
Set target = Range("N1")
target.Value = "present"
target.Offset(0, 1).Value = "absent"
target.Offset(0, 2).Value = "attendance rate"
For i = 1 To 8 ' loop over students
Set record = record.Offset(1, 0) ' go to next row
Set target = target.Offset(1, 0)
absent = Application.WorksheetFunction.CountIf(record, "Absent")
present = Application.WorksheetFunction.CountIf(record, "Present")
target.Value = present
target.Offset(0, 1).Value = absent
target.Offset(0, 2).Value = present / (present + absent)
target.Offset(0, 2).Style = "percent"
Next
End Sub
这基本上完成了你发布的代码所做的一切——除了它是“动态”完成的,而不是硬编码的数字
祝你的课好运。你不需要VBA来做任何事情。你可以对颜色使用条件格式,对总数使用条件格式。亲爱的道格,我是第一次学习VBA,这是一项作业。我不需要代码就可以做到。我被连续数缺席人数和礼物的数量所震惊。如果您能帮助我,我将不胜感激。您能展示一下布局图吗?如何标记“缺席”?您可以使用Application.WorksheetFunction.CountIf
。如果你展示了你已经拥有的代码,那么应该很容易向你展示如何添加额外的行。我明白了。那样的话,请告诉我们你已经得到的代码。如果你可以在Excel中自己做,我会尝试打开宏记录器,添加公式,并尝试修改。谢谢你,我发布了我的代码。。!非常感谢。我要试试这个。。!我会让你知道的。如果您执行此操作并陷入困境,很高兴解释更多!嘿@Floris,我试过那个密码,但没弄错。可能是我对问题的解释错了。无论如何,我是否可以向您发送excel文件或至少一个问题的图像,以便您有一个清晰的想法?再次感谢你