excel VBA:运算符,将电子表格中的日期转换为while / do

时间:2013-12-18 14:10:20

标签: excel vba date loops excel-vba

我正在尝试编写一个插入重复行的宏(与列中指定的一样多),同时更改每个副本的日期。 像

这样的东西
BEFORE                                     AFTER
20/01/2013   2                             20/01/2013   2       
28/02/2013   0                             21/01/2013   2
15/03/2013   1                             22/01/2013   2
                                           28/02/2013   0
                                           15/03/2013   1
                                           16/03/2013   1

复制部分效果很好,但是日期变化令我头疼。我试过

Cells(x,y).Value = Cells(x,y).Value + 1

但它不适用于日期

Dateadd还没带我到任何地方...... 代码来了......感谢任何能帮助我的人

Sub Macro2()
'
' Macro2 Macro
' ola
'

Dim i As Integer
Dim x As Integer
Dim y As Integer
Dim k As Integer
Dim z As Integer


    i = 2
    x = Application.InputBox("Number of Rows", "Number of Rows", Type:=1)
    k = Application.InputBox("Column", "Choose 1 for A, 2 for B, 5 for E...", Type:=1)


Do
    y = Cells(i, k).Value
    If y = 0 Then
    i = (i + 1)
    Cells(i, k).Activate
    Else
            z = 0
            ActiveCell.EntireRow.Copy
            Range(ActiveCell.Offset(y), ActiveCell.Offset(1)).EntireRow.Insert
            Do
                i = i + 1
                z = z + 1
                Cells(i, 2).Value = Cells(i, 2).Value + z
            Loop While z < (y + 1)
            Cells(i, k).Activate
            Application.CutCopyMode = False
    End If

Loop While i < x


End Sub

1 个答案:

答案 0 :(得分:1)

也许尝试从单元格的内容创建Date类型变量,即

如果Range("A1")20/01/2013,那么

dim myDate as Date
myDate = CDate(Range("A1"))

Cdate()将单元格中的任何内容转换为Date类型。因此,您不是依赖编译器来选择单元格内容的数据类型,而是明确告诉编译器将内容视为Date。

现在您可以使用DateAdd()功能

添加日期
myDate = DateAdd("d", 1, myDate)

并写回不同的单元格

Range("A2") = myDate

单线可能是

Cells(x,y).Offset(1,0) = DateAdd("d", 1, Cdate(Cells(x,y)))

可能更容易解决的问题是

Cells(x, y) = CDate(Cells(x,y)) + 1

但现在,至少你理解为什么如何