如何将for next循环中的日期放在excel的单元格中
Posted
技术标签:
【中文标题】如何将for next循环中的日期放在excel的单元格中【英文标题】:How to put dates from a for next loop in cells of excel 【发布时间】:2015-01-10 00:41:12 【问题描述】:我目前正在尝试在 excel 中做一个简单的 for next 循环。我正在处理日期,所以我声明了开始日期和结束日期。我只需要在不同的单元格中显示这两个日期中包含的日期。
我只使用整数得到了这个,但我还没有得到日期。
我用 MsgBox 进行了测试,它可以工作(按 Enter 键)直到到达最后一个日期(结束日期),但我无法将它放在一系列单元格中,可能解决方案很简单,但我花了很多时间在这... 请帮帮我
这在我的代码中
Sub looping()
Dim fecha_ini As Date
Dim fecha_fin As Date
Dim conteo As Date
Dim rango_inicio As Range
fecha_ini = #1/1/2015#
fecha_fin = #1/15/2015#
Set rango_inicio = Sheets("Sheet1").Range("a1")
For conteo = fecha_ini To fecha_fin
Range("A" & 1).Value = conteo
Next conteo
【问题讨论】:
【参考方案1】:试试这样的..
不要将 Range 设置为 A1,只需使用带有变量的 .Cells 循环而不是您当前使用的数字来设置值。 即 .Cells(row, col) 而不是 .Range("A" & 1)
sub Looping()
Dim lRow As Long
Dim fecha_str As String
Dim fecha_date As Date
For lRow = 1 to 15
fecha_str = "1/" & lRow & "/2015"
fecha_date = CDate(fecha_str)
Sheets("Sheet1").Cells(lRow, "A").Value = fecha_date
Next lRow
End Sub
【讨论】:
这应该提供一些循环和构建字符串的想法,它会起作用,但@Jeeped 提供的解决方案更符合目的。我留下这个答案是因为它可能会提供有用的信息。【参考方案2】:应该这样做:
Sub looping()
Dim fecha_ini As Date, fecha_fin As Date, conteo As Variant, rango_inicio As Range, i As Integer
fecha_ini = #1/1/2015#
fecha_fin = #1/15/2015#
i = 1
Set rango_inicio = Sheets("Sheet1").Range("a1")
For conteo = fecha_ini To fecha_fin
Cells(i, 1).Value = conteo
i = i + 1
Next conteo
End Sub
我添加了一个计数器“i”,并让 For 循环使用 Cells(row, column) 而不是 Range(...) 将值分配给单元格。
【讨论】:
【参考方案3】:'=============================================================
'using for each
Sub looping()
Dim fecha_ini As Date, fecha_fin As Date, conteo As Date
Dim rango_inicio As Range, D As Long
fecha_ini = #1/1/2015#
D = DateDiff("d", #1/1/2015#, #1/15/2015#) + 1
For Each rango_inicio In Range("A1:A" & D)
rango_inicio.Value = fecha_ini
fecha_ini = fecha_ini + 1
Next
End Sub
'=============================================================
'using while wend or do while loop
Sub looping2()
Dim fecha_ini As Date, fecha_fin As Date, conteo As Date
Dim D&, i&
fecha_ini = #1/1/2015#
D = DateDiff("d", #1/1/2015#, #1/15/2015#) + 2
i = 1
While i <> D
Cells(i, 1).Value = fecha_ini
fecha_ini = fecha_ini + 1
i = i + 1
Wend
End Sub
【讨论】:
【参考方案4】:如果日期是连续的,.DataSeries
会比循环更有效。
Sub no_looping()
Dim fecha_ini As Date, fecha_fin As Date
fecha_ini = #1/1/2015#
fecha_fin = #1/15/2015#
With Sheets("Sheet1").Range("A:A")
.Cells(1, 1) = fecha_ini
.DataSeries Rowcol:=xlColumns, Type:=xlChronological, _
Date:=xlDay, Step:=1, Stop:=fecha_fin, Trend:=False
End With
End Sub
.Cells(1, 1)
指的是您正在处理的任何范围内的第一个单元格。这需要播种第一个值以开始系列。如果您正在处理 Z99:Z999,那么 .Cells(1, 1)
将指代 Z99。
【讨论】:
我更喜欢这个而不是我的解决方案。这比通过将其与变量连接并将其转换为日期来构建字符串要好得多。这也更符合 OP 形式,看起来就像他的意图。以上是关于如何将for next循环中的日期放在excel的单元格中的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA:错误 Goto 语句在 For-Loop 中不起作用