【发布时间】:2021-11-28 03:08:05
【问题描述】:
请看下面我的 Excel 电子表格的图片。
我想要完成的是在每个连续的月份仅第一个实例顶部添加 3 个空白行。因此,如果新的月份从 2 月开始(或基本上是“2”),则将自动在其顶部添加 3 个空白行。我正在尝试使用 VBA 代码来做到这一点。但是,我的问题在于某些函数如何处理数字和日期(尤其是)与文本/字符串不同。
我当前的 VBA 代码 Sub insert()(显示在我的图像文件下)在单元格 A2 上使用了 LEFT() 函数,但它没有返回我想要的值,即“1”或“01”(代表数字其月份的值)。相反,它返回其实际值“44200”等 - 不是我想要的。我需要找到一种方法,通过在每个新月的顶部插入 3 个空白行来让我的 VBA 代码完成其工作。但它不能用 LEFT() 函数做到这一点。 MONTH() 函数在该代码中也不起作用。我该如何解决这个问题并更改此代码以使其正常工作?感谢您的帮助。
Sub insert()
Dim lastRow As Long
Dim done As Boolean
'change A to the longest column (most rows)
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
For i = 1 To lastRow
'change the 1 below to the necessary column (ie, use 4 for column D)
If Left(Cells(i, 1), 2) = "01" Then
Rows(i).insert
done = True
i = i + 1
End If
If done = True Then Exit For
Next
End Sub
【问题讨论】:
-
为什么month() 在代码中不起作用?它甚至应该与例如月(44200)。但是您的代码还有另一个问题:在 for 循环中插入行时,您的 lastRow 也会发生变化。也许在大多数情况下,这无关紧要 - 但可能会有你错过的情况,例如12 月第一个实例 ...
-
@Ike 因为在我的 VBA 代码中将 LEFT() 替换为 MONTH() 时,我在 VBA 中收到此错误消息:“编译错误:参数数量错误或属性分配无效”。这就是为什么我说它不起作用。
-
但是
Month(cells(i,1))应该返回月份。隐式调用cells会不会有问题?另外:当替换为 MONTH() 时,您必须从 LEFT() 中省略 ', 2` -
If Month(Cells(i, !).Value) = 1 Then不工作吗? -
创建一个变量来保存单元格的值:
Dim cValue As Variant。从 2nd 行开始循环:For i = 2 To LastRow(第一行包含Date)。将当前单元格的值写入变量:cValue = Cells(i, 1).Value。检查变量是否包含日期:If IsDate(cValue) Then。检查是否是第一个月:If Month(cValue) = 1 Then。不要忘记“关闭”End Ifs。
标签: excel vba excel-formula