VBA宏用于计算多行的小时数

时间:2014-01-22 14:00:29

标签: excel vba excel-vba time

我有一个问题,这个宏完全拒绝工作。 我正在尝试让宏总结语言课程的课时数,以便检查长记录文件。 为了给你一个完整的解释,第2栏有课程的名称(例如高级英语2),第3栏有一个版本(这是一个数字)。该文件先前按列2排序,然后是3.如果课程名称和版本相同,则表示我需要将小时数添加到总计中。 “教师”如果指的是在该栏中有教师或助理,但后者不需要计算他们的小时数(所以我想跳过有一个的行)。 第5列和第6列中的单元格是时间(例如13:00,08:45)。 我希望代码在第12列写入小时数(无论格式如何,我知道excel会将日期和时间读作数字,因此我可以对该单元格中的数字感到满意)。 感谢所有愿意就我的错误提出建议的人:)

ENGLISH; ENGLISH UPPER INTERMEDIATE; 30; 15/01/2014; 08:30; 13:00;老师; A342; C0329

ENGLISH; ENGLISH UPPER INTERMEDIATE; 30; 15/01/2014; 14:00; 17:00;老师; A342; C0329

ENGLISH; ENGLISH GRAMMAR; 36; 14/01/2014; 08:30; 13:00;老师; A342; C0329

ENGLISH; ENGLISH GRAMMAR; 36; 14/01/2014; 14:00; 17:00;老师; A342; C0329

ITALIAN; ITALIANO BASE; 7; 15/01/2014; 08:30; 13:00;老师; A342; BR240

ITALIAN; ITALIANO BASE; 7; 15/01/2014; 14:00; 17:00;老师; A342; BR240

意大利; LETTERATURA E STORIA; 8; 16/01/2014; 08:30; 13:00;老师; A342; BR240

意大利; LETTERATURA E STORIA; 8; 16/01/2014; 14:00; 17:00;老师; A342; BR240

ITALIAN; ITALIANO PER IDIOTI; 7; 21/01/2014; 08:30; 13:00;老师; A342; C0329

ITALIAN; ITALIANO PER IDIOTI; 7; 21/01/2014; 14:00; 17:00;老师; A342; C0329

西班牙语; LA TAUROMAQUIA; 17; 14/01/2014; 08:30; 13:00;老师; A342; U6014

西班牙语; LA TAUROMAQUIA; 17; 14/01/2014; 14:00; 17:00;老师; A342; U6014

西班牙语;西班牙语高级; 19; 21/01/2014; 10:30; 13:00;老师; A342; U6012

西班牙语;西班牙语高级; 19; 21/01/2014; 14:00; 17:30;老师; A342; U6012

西班牙语;西班牙语123; 17; 16/01/2014; 08:30; 13:00;老师; A342; U6014

西班牙语;西班牙语123; 17; 16/01/2014; 14:00; 17:00;老师; A342; U6014

西班牙语;西班牙语分类; 18; 22/01/2014; 08:30; 13:00;老师; A342; U6014

西班牙语;西班牙语分类; 18; 22/01/2014; 14:00; 17:00;老师; A342; U6014

西班牙语;西班牙语贷款; 17; 15/01/2014; 08:30; 13:00;老师; A342; U6014

西班牙语;西班牙语贷款; 17; 15/01/2014; 14:00; 17:00;老师; A342; U6014

西班牙语;西班牙语和葡萄牙语:为什么?; 15; 23/01/2014; 10:30; 13:00;老师; A342; U6017

西班牙语;西班牙语和葡萄牙语:为什么?; 15; 23/01/2014; 14:00; 17:30;老师; A342; U6017

FRENCH; FRENCH INTENSIVE; 48; 07/01/2014; 08:30; 13:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 07/01/2014; 08:30; 13:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 07/01/2014; 14:00; 17:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 07/01/2014; 14:00; 17:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 08/01/2014; 08:30; 13:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 08/01/2014; 08:30; 13:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 08/01/2014; 14:00; 17:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 08/01/2014; 14:00; 17:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 09/01/2014; 08:30; 13:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 09/01/2014; 08:30; 13:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 09/01/2014; 14:00; 17:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 09/01/2014; 14:00; 17:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 10/01/2014; 08:30; 13:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 10/01/2014; 08:30; 13:00; CoDocente; 00348170101; C0691

FRENCH; FRENCH INTENSIVE; 48; 10/01/2014; 14:00; 17:00;老师; A342; C0329

FRENCH; FRENCH INTENSIVE; 48; 10/01/2014; 14:00; 17:00; CoDocente; 00348170101; C0691

这是一个与我的真实数据类似的csv:)

Dim i As Integer
Dim x As Integer
Dim y As Integer
Dim k As Integer
Dim z As Integer
Dim hoursA As Integer
Dim hoursB As Integer
Dim hours As Integer

z = 3
i = 2
k = 12

Do
hours = 0
Do
t = 1
If Cells(i, 2) = Cells(z, 2) Then
    If Cells(i, 3) = Cells(z, 3) Then
        If Cells(i, 5) = "Teacher" Then
            hoursA = Cells(i, 5).Value
            hoursB = Cells(i, 6).Value
            hours = hoursB - hoursA + hours
            Cells(i, k).Value = hours
        End If
    Else
        t = 0
    End If
Else
    t = 0
End If
i = i + 1
z = i + 1

Loop While t > 0

Loop While UCase(Cells(i, 2)) <> ""


 End Sub

1 个答案:

答案 0 :(得分:0)

我发现代码存在两个问题。

  1. 时间存储为分数,但您尝试将它们存储在Integer中。将三个Hours变量更改为Double
  2. 教师在D栏上,但您正在查看Cells(i,5)。将其更改为Cells(i,4)