我正在尝试找到一种基于日期自动插入列的方法。以下是一些背景信息:
到目前为止,这是我用来遍历顶行并查看日期是在10月之前但是在9月之后。日期从单元格I1开始。虽然代码执行没有任何错误,但实际上并没有做任何事情。我们所能提供的任何帮助将不胜感激。
With Sheets("Sheet1")
Range("I1").Select
Do Until IsEmpty(ActiveCell)
If ActiveCell.Value < DateValue("2015/10/1") And ActiveCell.Offset(0, 1).Value > DateValue("2015/9/28") Then
Range(ActiveCell).EntireColumn.Insert
End If
ActiveCell.Offset(0, 1).Select
Loop
End With
答案 0 :(得分:1)
我认为你的方法开局良好。您应该能够检查一个月中的某一天是否小于或等于7.这应该表明一个月中的第一周。如果该月份为4或10,请插入一列。如果它是1或7,请插入两个。
Dim r As Range
Set r = Range("I1")
Do Until IsEmpty(r)
If Day(r) <= 7 Then
Select Case Month(r)
Case 4, 10
r.EntireColumn.Insert
Case 1, 7
r.Resize(1, 2).EntireColumn.Insert
End Select
End If
Set r = r.Offset(0, 1)
Loop
答案 1 :(得分:0)
严格按照标题行中两个单元格的月份变化进行更改可能是最简单的逻辑。
Sub insert_quarter_halves()
Dim c As Long
With Worksheets("Sheet8") 'set this worksheet reference properly!
For c = .Cells(1, Columns.Count).End(xlToLeft).Column To 2 Step -1
If (Month(.Cells(1, c - 1).Value2) = 3 And Month(.Cells(1, c).Value2) = 4) Or _
(Month(.Cells(1, c - 1).Value2) = 9 And Month(.Cells(1, c).Value2) = 10) Then
.Cells(1, c).EntireColumn.Insert
ElseIf (Month(.Cells(1, c - 1).Value2) = 6 And Month(.Cells(1, c).Value2) = 7) Or _
(Month(.Cells(1, c - 1).Value2) = 12 And Month(.Cells(1, c).Value2) = 1) Then
.Cells(1, c).Resize(1, 2).EntireColumn.Insert
End If
Next c
End With
End Sub
插入列时,始终从右向左行进,否则您可能会跳过向前推进的条目。