通过在MS Excel中输入数字自动计数

通过在MS Excel中输入数字自动计数,excel,vba,Excel,Vba,我正在寻找一个excel表格来自动计算总计数 我正在为考勤管理系统创建excel。这个班大约有30名学生。它们由注册号(2011/V/01, 2011/V/02,…,2011/V/30)。他们每天有很多课。出勤(每位学生在出勤表上签名)由讲师每小时记录一次。当考勤表送达该部门时,该官员准备计算缺勤人数 该官员将为缺席学生键入最后一个注册号(例如:2011/V/05的05) 开始时,总缺勤率为零 当他/她在单元格A3中输入最后一个数字并按enter键时,相应单元格应立即增加1 在第一份考勤表中,登

我正在寻找一个excel表格来自动计算总计数

我正在为考勤管理系统创建excel。这个班大约有30名学生。它们由注册号(2011/V/01, 2011/V/02,…,2011/V/30)。他们每天有很多课。出勤(每位学生在出勤表上签名)由讲师每小时记录一次。当考勤表送达该部门时,该官员准备计算缺勤人数

该官员将为缺席学生键入最后一个注册号(例如:2011/V/05的05)

开始时,总缺勤率为零

当他/她在单元格A3中输入最后一个数字并按enter键时,相应单元格应立即增加1

在第一份考勤表中,登记号为2011/V/02、2011/V/05、2011/V/07和2011/V/13的人员缺勤

(Ex: cell A3 = 02 then cell D3 from 0 to 1).
(Ex: cell A3= 05 then cell D6 from 0 to 1).
(Ex: cell A3 = 07 then cell D8 from 0 to 1).
(Ex: cell A3 = 13 then cell D14 from 0 to 1).


In second attendance sheet 2011/V/03, 2011/V/05, 2011/V/13, 2011/V/16 and 2011/V/21 are absents
(Ex: cell A3 = 03 then cell D4 from 0 to 1).
(Ex: cell A3 = 05 then cell D6 from 1 to 2). (absent in first sheet,so 1 to 2)
(Ex: cell A3 = 13 then cell D14 from 1 to 2). (absent in first sheet,so 1 to 2)
(Ex: cell A3 = 16 then cell D17 from 0 to 1).
(Ex: cell A3 = 21 then cell D22 from 0 to 1).
在第三次考勤表2011/V/03和2011/V/05中缺席 (例如:单元格A3=03,然后单元格D4从1到2)。(第二页中没有,so 1至2) (例如:单元格A3=05,然后单元格D6从2到3)。(第二页中没有,so 2至3)

这种情况每天都会发生,直到考勤表电脑化


您想要做的事情最好通过一个非常简单的数据输入用户表单来实现

Google“excel vba数据输入用户表单”,您将发现优秀的教程

跟着他们,回到这里继续读这个答案

我将创建两张表和一个表单

Sheet1将包含数据输入的日志。只有两列,日期和学生代码

表2将包含缺勤计数。同样有两列,第一列是你所有学生的名单,第二列是缺席的连续计数

表单将包含两个控件。一个是学生代码的单个字段(文本框或更复杂的组合框,在初始化时使用表2第1列的所有学生代码构建)。第二,一个提交按钮

在“提交”按钮的“代码”上,您应该添加一些代码以获取当前日期和选定的学生代码,并将它们插入到sheet1的最后一行


在sheet2上,第二列将是一个公式,即在sheet1的第2列中简单计算相应学生代码的查找结果。

您想要做的最好是使用一个非常简单的数据输入用户表单

Google“excel vba数据输入用户表单”,您将发现优秀的教程

跟着他们,回到这里继续读这个答案

我将创建两张表和一个表单

Sheet1将包含数据输入的日志。只有两列,日期和学生代码

表2将包含缺勤计数。同样有两列,第一列是你所有学生的名单,第二列是缺席的连续计数

表单将包含两个控件。一个是学生代码的单个字段(文本框或更复杂的组合框,在初始化时使用表2第1列的所有学生代码构建)。第二,一个提交按钮

在“提交”按钮的“代码”上,您应该添加一些代码以获取当前日期和选定的学生代码,并将它们插入到sheet1的最后一行


在表2上,第二列将是一个公式,即在表1的第2列中对相应学生代码的查找结果进行计数。

在数据输入表的代码模块中:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim student As String, f As Range

    If Target.Cells.Count = 1 And Target.Address() = "$A$3" Then

        student = "2011/V/" & Format(Target.Value, "00")

        Set f = Me.Range("C:C").Find(what:=student, lookat:=xlWhole)
        If Not f Is Nothing Then
            Me.Range("A3:A4").ClearContents
            f.Offset(0, 1).Value = f.Offset(0, 1).Value + 1
        Else
            Me.Range("A4").Value = "Student not found!"
        End If

        Me.Range("a3").Select

    End If

End Sub

在数据输入表的代码模块中:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim student As String, f As Range

    If Target.Cells.Count = 1 And Target.Address() = "$A$3" Then

        student = "2011/V/" & Format(Target.Value, "00")

        Set f = Me.Range("C:C").Find(what:=student, lookat:=xlWhole)
        If Not f Is Nothing Then
            Me.Range("A3:A4").ClearContents
            f.Offset(0, 1).Value = f.Offset(0, 1).Value + 1
        Else
            Me.Range("A4").Value = "Student not found!"
        End If

        Me.Range("a3").Select

    End If

End Sub

我不明白这个问题。为什么单元格A3大于D4、D6等?我想你可以用
countif()
countifs()
来完成你想要的。A3=02意味着在单元格A3中键入02。如果注册表是01,02,03。。。。29 , 003. 注意:这里是注册号只有最后的数字没有(2011/V/)。最后一个数字是“003”,不是30。我不明白这个问题。为什么单元格A3大于D4、D6等?我想你可以用
countif()
countifs()
来完成你想要的。A3=02意味着在单元格A3中键入02。如果注册表是01,02,03。。。。29 , 003. 注意:这里是注册号只有最后的数字没有(2011/V/)。最后一个数字是“003”,不是30。好的,这里2011/V/不是主要部分。因为我只输入了最后两位数字。2011/V/05示例05非常感谢Tim Williams。它工作正常。你给我指明了道路,这正是我所期望的!如果注册号为,如何更改是01,02,03。。。。29 , 003. 注意:这里是注册号只有最后的数字没有(2011/V/)。最后一个数字是“003”,不是30。我试图这样做,这样您就不必输入前导零,但看起来您需要输入整个值,这样您就可以从
Target.value
周围删除
Format()
调用。顺便说一句,将03和003都作为两个不同的注册表号似乎是在自找麻烦,特别是在Excel中工作时。ok,这里2011/V/不是主要部分。因为我只输入了最后两位数字。2011/V/05示例05非常感谢Tim Williams。它工作正常。你给我指明了道路,这正是我所期望的!如果注册号为,如何更改是01,02,03。。。。29 , 003. 注意:这里是注册号只有最后的数字没有(2011/V/)。最后一个数字是“003”,不是30。我试图使它成为这样,您不必输入前导零,但看起来您需要输入整个值,这样您就可以从
Target.value
周围删除
Format()
调用。顺便说一句,将03和003都作为两个不同的注册表号似乎是在自找麻烦,尤其是在Excel中工作时。