【发布时间】:2018-09-15 00:49:09
【问题描述】:
我目前正在处理一个 16 000 行的 excel 文件
- B 列是我要更新的日期
- H 列是开始日期
- 第一列是结束日期
- K 列是日期需要更新的次数(更新 n 行)
想法是在 B 列中显示从开始日期到结束日期的所有日期(每列一个日期)。
您会在下面找到我当前的代码。我是初学者,它可能包含很多错误。能否请您帮帮我,我不断收到小错误:91、1004、5...
Sub Dates()
Dim i As Long
Dim k As Long
Dim MyDate As Long
Dim EndDate As Long
Dim EndRowA As Long
Dim EndRowB As Long
Dim EndRowH As Long
Dim StartDate As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
StartDate = ws.Cells(ws.Rows.Count, "H").Value
MyDate = ws.Cells(ws.Rows.Count, "B").Value
EndDate = ws.Cells(ws.Rows.Count, "I").Value
EndRowA = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
EndRowB = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
EndRowH = ws.Cells(ws.Rows.Count, 8).End(xlUp).Row
Do While (i <= EndRowH And i <= EndRowA And i <= EndRowB)
If ws.Cells(i, "H").Value = ws.Cells(i, "I").Value Then
GoTo Continue
ElseIf ws.Cells(i, "H").Value = ws.Cells(i, "I").Value Then
For k = 1 To ws.Cells(i, k).Value
ws.Cells(i + 1, "B").Select
ws.Cells(i, "B").Value = ws.Cells(i - 1, "H").Value + 1
Exit For
Continue:
Next k
End If
Loop
End Sub
电子表格中的主要列应如下所示:
Type Date Start date End Date #
A 01/01/2018 01/01/2018 01/10/2018 10
A 01/02/2018 01/01/2018 01/10/2018 10
A 01/03/2018 01/01/2018 01/10/2018 10
A 01/04/2018 01/01/2018 01/10/2018 10
A 01/05/2018 01/01/2018 01/10/2018 10
A 01/06/2018 01/01/2018 01/10/2018 10
A 01/07/2018 01/01/2018 01/10/2018 10
A 01/08/2018 01/01/2018 01/10/2018 10
A 01/09/2018 01/01/2018 01/10/2018 10
A 01/10/2018 01/01/2018 01/10/2018 10
B 02/06/2018 02/06/2018 02/10/2018 5
B 02/07/2018 02/06/2018 02/10/2018 5
B 02/08/2018 02/06/2018 02/10/2018 5
B 02/09/2018 02/06/2018 02/10/2018 5
B 02/10/2018 02/06/2018 02/10/2018 5
提前谢谢你
【问题讨论】:
-
我不断收到小错误:91、1004、5 - 所以您收到多个不同的错误?
-
在你的代码中你说
StartDate = ws.Cells(ws.Rows.Count, "H").Value,但你在任何时候都没有设置ws。此外,这条线Date = ws.Cells(ws.Rows.Count, "B").Value毫无意义。Date是 VBA 中的保留字。你应该使用类似 MyDate -
感谢您的评论@FoxfireAndBurnsAndBurns,我没有注意到日期功能并将其更改为 MyDate。我分配了我的工作表,但我知道我收到一个带有“$H$1048576”的弹出窗口,你知道它来自哪里吗?我的 EndRow 似乎有问题
-
当你说 popup 时,你的意思是你得到了一个 Msgbox?
-
另外,关于您的数据。我不明白你想得到什么。我想
#列是Start date和End date之间几个月的区别???因为在这种情况下,所有类型为 B 的数据都是错误的(6 月到 10 月之间只有 4 个月,而不是 5 个月)
标签: vba excel excel-2010 excel-2007