一、代码要求:
在下面Excel工作表中,如果d列(企业名称)的值相同,并且B列(日期)连续出现3天或以上,则在所有连续日期对应的E列(标记)输入y,否则为空。

二、实现代码
'以下是优化后的代码:Sub CheckConsecutiveDates()Dim lastRow As LonglastRow = Cells(Rows.Count, "D").End(xlUp).Row '获取最后一行的行数Dim curValue As String '当前D列的值Dim curDate As Date '当前B列的日期Dim curStatus As String '当前连续日期的状态Dim consecDays As Integer '连续日期的天数curValue = ""curDate = Cells(2, "B").ValuecurStatus = ""consecDays = 0For i = 2 To lastRow '从第二行开始遍历数据 If Cells(i, "D").Value = curValue Then '如果D列的值相同 If Cells(i, "B").Value = curDate + 1 Then '如果当前日期与前一天相差一天 If curStatus = "y" Or consecDays >= 2 Then '如果前面已经有连续日期,或者当前日期已经是第三天连续 curStatus = "y" consecDays = consecDays + 1 Else '如果前面没有连续日期 curStatus = "n" consecDays = 2 End If Else '如果当前日期与前一天不连续 If consecDays >= 3 Then '如果前面有连续日期 Range(Cells(i - consecDays, "E"), Cells(i - 1, "E")).Value = "y" '在所有连续日期对应的E列输入y End If curStatus = "" consecDays = 0 End If Else '如果D列的值不同 If consecDays >= 3 Then '如果前面有连续日期 Range(Cells(i - consecDays, "E"), Cells(i - 1, "E")).Value = "y" '在所有连续日期对应的E列输入y End If curStatus = "" consecDays = 0 End If curValue = Cells(i, "D").Value curDate = Cells(i, "B").ValueNext i'处理最后一段连续日期If consecDays >= 3 Then '如果最后一段是连续日期 Range(Cells(lastRow - consecDays + 1, "E"), Cells(lastRow, "E")).Value = "y" '在所有连续日期对应的E列输入yEnd IfEnd Sub
这段代码的应用场景是针对一个Excel表格中的数据进行处理,判断其中日期是否连续,并在连续的日期所在的行中特定的列(E列)输入对应的标记("y")。
具体来说,该代码遍历了Excel表格中指定的列(D列),同时对比该列中相邻两行的数据,判断这些数据对应的日期(B列中的数据)是否连续。如果两行数据对应的日期连续,则该代码将判断当前连续日期的状态(curStatus)和连续日期的天数(consecDays),并根据这些数据决定是否在第一天日期对应的E列中输入"y"。如果当前日期与前一天不连续,则该代码判断前面是否存在连续日期,如果存在则在第一天日期对应的E列中输入"y",否则为空。
通过以上处理,该代码实现了对Excel表格中的数据进行连续日期的判断,并在连续日期所在行的特定列输入标记的功能。这个功能可以方便地帮助用户对Excel表格中的数据进行处理和分析,提高工作效率。