甚至可以在 Excel 中检查 A 列中的重复项,然后比较 B 列中的相应日期吗?
Is it even possible in Excel to check for duplicates in column A and then compare the corresponding dates in column B?
我通常什么都不问,但我碰壁了。我什至不知道这是否可能。
假设 A 列是学生# 的列表,B 列是每个学生 phone 大学的日期列表。即:
123456 9/21/2013
123456 9/22/2013
123456 9/25/2013
124343 10/10/2014
324242 11/15/2014
所以 ID 123456 的学生打了 3 次电话。但是我想具体能够计算的是,如果一个学生有不止一个电话,他在最初的电话后的48小时内回拨了多少次。这里的答案是 123456 在第一次出现后的 48 小时内回调了 1 次。
感谢任何帮助。
微笑,有可能:)
首先将所有学生的 ID(无重复)放入一个集合中(假设他们从 Range("A1") 开始):
Dim studentsID As New Collection
For j = 1 To Range("A1").End(xlDown).Row
alreadyThere = False
For k = 1 To studentsID.Count
If Range("A" & j) = studentsID(k) Then
alreadyThere = True
Exit For
End If
Next k
If alreadyThere = False Then studentsID.Add Range("A" & j).Value 'if student is not there yet, add it to the collection
Next j
这计算了一个学生总共被叫了多少次 ...因为你问过但我想具体计算一下是否有一个学生不止一个电话
所以你检查是否有不止一个学生打来的电话:
For j = 1 To studentsID.Count 'for each student in your list
count = 0
For k = 1 To Range("A1").End(xlDown).Row
If Range("A" & k) = studentsID(j) Then count = count + 1 'count how many occurrencies there are in column A
Next k
If count > 1 Then MsgBox "The student " & studentsID(j) & " called us " & count & " times"
Next j
虽然这会计算学生在过去 48 小时内打来电话的次数
...然后按照相同的逻辑计算他在过去 48 小时内打了多少次电话:
todayIs = DateSerial(Year(Now()), Month(Now()), Day(Now()))
twoDaysAgoWas = todayIs - 2
For j = 1 To studentsID.Count
count = 0
For k = 1 To Range("A1").End(xlDown).Row
If (Range("A" & k) = studentsID(j)) And (Range("B" & k) >= twoDaysAgoWas) Then count = count + 1
Next k
If count > 1 Then MsgBox "The student " & studentsID(j) & " called us " & count & " times during the last 48 hours."
Next j
您可以尝试使用这些代码片段来构建您想要的输出(例如,您最有可能希望将计数器存储在变量中并将它们打印到统计数据中,而不是使用消息框 sheet)。
注意
如果您需要 exact 最后 48 小时,您可能还想使用函数 TimeSerial(Hour,Minute,Second)
.
假设您的数据从 A2 开始(第 1 行用于标题),然后在 C2 中尝试以下公式并将其复制下来:
=COUNTIFS(A:A,A2,B:B,">"&B2,B:B,"<="&B2+2)
也就是说 "Count all cases where the value is col A is the current student and where the date is between the date on the current row and 2 days into the future"。
如果可能同一天有多个电话,那么这样可能更好:
=COUNTIFS(A:A,A2,B:B,">="&B2,B:B,"<="&B2+2)-1
(-1
从计数中删除每一行与其自身的匹配)。
如果 48 小时需要更精确,那么您可能需要改变公式以使用小时而不是天,但相同的公式结构应该有效。
我通常什么都不问,但我碰壁了。我什至不知道这是否可能。
假设 A 列是学生# 的列表,B 列是每个学生 phone 大学的日期列表。即:
123456 9/21/2013
123456 9/22/2013
123456 9/25/2013
124343 10/10/2014
324242 11/15/2014
所以 ID 123456 的学生打了 3 次电话。但是我想具体能够计算的是,如果一个学生有不止一个电话,他在最初的电话后的48小时内回拨了多少次。这里的答案是 123456 在第一次出现后的 48 小时内回调了 1 次。
感谢任何帮助。
微笑,有可能:)
首先将所有学生的 ID(无重复)放入一个集合中(假设他们从 Range("A1") 开始):
Dim studentsID As New Collection
For j = 1 To Range("A1").End(xlDown).Row
alreadyThere = False
For k = 1 To studentsID.Count
If Range("A" & j) = studentsID(k) Then
alreadyThere = True
Exit For
End If
Next k
If alreadyThere = False Then studentsID.Add Range("A" & j).Value 'if student is not there yet, add it to the collection
Next j
这计算了一个学生总共被叫了多少次 ...因为你问过但我想具体计算一下是否有一个学生不止一个电话
所以你检查是否有不止一个学生打来的电话:
For j = 1 To studentsID.Count 'for each student in your list
count = 0
For k = 1 To Range("A1").End(xlDown).Row
If Range("A" & k) = studentsID(j) Then count = count + 1 'count how many occurrencies there are in column A
Next k
If count > 1 Then MsgBox "The student " & studentsID(j) & " called us " & count & " times"
Next j
虽然这会计算学生在过去 48 小时内打来电话的次数
...然后按照相同的逻辑计算他在过去 48 小时内打了多少次电话:
todayIs = DateSerial(Year(Now()), Month(Now()), Day(Now()))
twoDaysAgoWas = todayIs - 2
For j = 1 To studentsID.Count
count = 0
For k = 1 To Range("A1").End(xlDown).Row
If (Range("A" & k) = studentsID(j)) And (Range("B" & k) >= twoDaysAgoWas) Then count = count + 1
Next k
If count > 1 Then MsgBox "The student " & studentsID(j) & " called us " & count & " times during the last 48 hours."
Next j
您可以尝试使用这些代码片段来构建您想要的输出(例如,您最有可能希望将计数器存储在变量中并将它们打印到统计数据中,而不是使用消息框 sheet)。
注意
如果您需要 exact 最后 48 小时,您可能还想使用函数 TimeSerial(Hour,Minute,Second)
.
假设您的数据从 A2 开始(第 1 行用于标题),然后在 C2 中尝试以下公式并将其复制下来:
=COUNTIFS(A:A,A2,B:B,">"&B2,B:B,"<="&B2+2)
也就是说 "Count all cases where the value is col A is the current student and where the date is between the date on the current row and 2 days into the future"。
如果可能同一天有多个电话,那么这样可能更好:
=COUNTIFS(A:A,A2,B:B,">="&B2,B:B,"<="&B2+2)-1
(-1
从计数中删除每一行与其自身的匹配)。
如果 48 小时需要更精确,那么您可能需要改变公式以使用小时而不是天,但相同的公式结构应该有效。