用于对列中的值进行计数的VBA代码

用于对列中的值进行计数的VBA代码,vba,count,Vba,Count,有人能告诉我如何为下面的实例编写VBA代码吗? 我有8名学生12周的每周出勤数据。 我已经写了一个代码,在缺席的情况下用红色填充单元格的颜色,在缺席的情况下用绿色填充单元格的颜色 现在,我必须为每一行的每个学生添加“缺席”的数字,并在下一列中填写该数字。同样地,计算每一行中每个学生的缺席人数,并将该数字填入另一列。 最后,我应该计算每个学生的“当前”百分比 Option Explicit Sub CopyPaste() ' ' CopyPaste Macro ' Sheets("At

有人能告诉我如何为下面的实例编写VBA代码吗? 我有8名学生12周的每周出勤数据。 我已经写了一个代码,在缺席的情况下用红色填充单元格的颜色,在缺席的情况下用绿色填充单元格的颜色

现在,我必须为每一行的每个学生添加“缺席”的数字,并在下一列中填写该数字。同样地,计算每一行中每个学生的缺席人数,并将该数字填入另一列。 最后,我应该计算每个学生的“当前”百分比

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文件或至少一个问题的图像,以便您有一个清晰的想法?再次感谢你