Excel 循环日期以复制特定列
我整理数据以查看同事的工作班次。Excel 循环日期以复制特定列,excel,vba,Excel,Vba,我整理数据以查看同事的工作班次。 表1中有一张显示班次的表格。制定了这些轮班时间。我正在尝试根据今天的日期复制和粘贴班次数据作为值 例如,如果今天是2020年12月31日,则复制范围C3:F10并粘贴为值(即此日期之前的数据)。当日期更改为第二天时,范围从C3:F10更改为C3:G10。我将有一个连续的专栏(一年中的每一天) 这就是我目前所拥有的。我需要一些指导 Private子测试() 对于i=c1至h1 如果工作表(“Sheet1”).Cells(i,1).Value这就是您要尝试的吗?我
表1中有一张显示班次的表格。制定了这些轮班时间。我正在尝试根据今天的日期复制和粘贴班次数据作为值 例如,如果今天是2020年12月31日,则复制范围C3:F10并粘贴为值(即此日期之前的数据)。当日期更改为第二天时,范围从C3:F10更改为C3:G10。我将有一个连续的专栏(一年中的每一天) 这就是我目前所拥有的。我需要一些指导
Private子测试()
对于i=c1至h1
如果工作表(“Sheet1”).Cells(i,1).Value这就是您要尝试的吗?我已经对代码进行了注释,所以您在理解它时应该不会有问题。但如果你这么做了,那就直接问吧
代码:
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim i As Long
Dim lCol As Long
Dim lRow As Long
Dim rng As Range
'~~> Change this to the relevant sheet
Set ws = Sheet1
With ws
'~~> Find last column which has data in row 1
lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
'~~> Find last row which has data in Col A
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Loop through the dates
For i = 3 To lCol
'~~> Check if the date is less than today's date
If .Cells(1, i).Value2 < Date Then
'~~> identify your range
If rng Is Nothing Then
'~~> Row 3 to last row
Set rng = .Range(.Cells(3, i), .Cells(lRow, i))
Else
'~~> Joining ranges
Set rng = Union(rng, .Range(.Cells(3, i), .Cells(lRow, i)))
End If
Else
Exit For
End If
Next i
'~~> Convert to values in one go
If Not rng Is Nothing Then rng.Value = rng.Value
End With
End Sub
选项显式
子样本()
将ws设置为工作表
我想我会坚持多久
暗淡的lCol尽可能长
暗淡的光线和长的一样
变暗rng As范围
“~~>将其更改为相关的工作表
设置ws=Sheet1
与ws
“~~>查找第1行中有数据的最后一列
lCol=.Cells(1,.Columns.Count).End(xlToLeft).Column
“~~>查找A列中有数据的最后一行
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
“~~>循环浏览日期
对于i=3至lCol
“~~>检查日期是否小于今天的日期
如果.Cells(1,i).Value2<日期,则
“~~>确定您的范围
如果rng不算什么,那么
“~~~>第3行到最后一行
设置rng=.Range(.Cells(3,i),.Cells(lRow,i))
其他的
“~~>连接范围
设置rng=Union(rng,.Range(.Cells(3,i),.Cells(lRow,i)))
如果结束
其他的
退出
如果结束
接下来我
“~~>一次性转换为值
如果Not rng为空,则rng.Value=rng.Value
以
端接头
正在运行:
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim i As Long
Dim lCol As Long
Dim lRow As Long
Dim rng As Range
'~~> Change this to the relevant sheet
Set ws = Sheet1
With ws
'~~> Find last column which has data in row 1
lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
'~~> Find last row which has data in Col A
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Loop through the dates
For i = 3 To lCol
'~~> Check if the date is less than today's date
If .Cells(1, i).Value2 < Date Then
'~~> identify your range
If rng Is Nothing Then
'~~> Row 3 to last row
Set rng = .Range(.Cells(3, i), .Cells(lRow, i))
Else
'~~> Joining ranges
Set rng = Union(rng, .Range(.Cells(3, i), .Cells(lRow, i)))
End If
Else
Exit For
End If
Next i
'~~> Convert to values in one go
If Not rng Is Nothing Then rng.Value = rng.Value
End With
End Sub
我创建了一个示例文件来测试上述代码
因此,如果要为i
循环执行,则需要使用列编号而不是字母,因为它不会执行您在此处尝试的操作。因此,对于C:H,对于i=3到8,它将是,因为C是第3列,H是第8列。否则,您可以为每个循环执行一次操作:针对工作表(“Sheet1”)中的每个单元格。范围(“C1:H1”)
。。。你的另一件大事是粘贴。您需要指定在图纸中粘贴的位置,而不仅仅是图纸名称。所以ActiveSheet.Range(“A1”).PasteSpecial xlPasteValues
这非常有效,非常感谢。评论很好,我现在也可以修改我的其他文章了!