我正在开展一个项目,我将销售数据分解为几个季度。我需要做的是在每一列的前面插入属于该季度的三个月。我从一个选择案例陈述开始,但后来意识到这可能不是最好的方法。我想要做的是让它是一个可变范围(可以粘贴1 - 10年的任何东西)所以我把它设置为搜索InStr“Q1”,“Q2”,然后插入行和正确的月份标题。我还没有插入月份标题,因为我想首先插入行,但是如果你有一个关于如何做到这一点的建议,而没有指定单元格值,那也很棒!值得一提的是,这个数据插入从U列开始,每次都会。感谢您提供任何帮助或建议!
Sub InsertMonths()
If cell.value = InStr(1, cell, "Q1", 1) Then
Dim y As String
y = InStr(1, cell, "Q1", 1)
If y = "" Then Exit Sub
Dim x As Long
For x = Cells(Columns.Count, 1).End(xlUp).Column To 1 Step -1
If Cells(x, 18).value = y Then
Columns(x + 3).Resize(1).Insert
End If
Next x
Else cell.value = InStr(1, cell, "Q2", 1) Then
Dim y As String
y = InStr(1, cell, "Q2", 1)
If y = "" Then Exit Sub
Dim x As Long
For x = Cells(Columns.Count, 1).End(xlUp).Column To 1 Step -1
If Cells(x, 18).value = y Then
Columns(x + 3).Resize(1).Insert
End If
Next x
Else InStr(1, cell, "Q3", 1) then
Dim y As String
y = InStr(1, cell, "Q3", 1)
If y = "" Then Exit Sub
Dim x As Long
For x = Cells(Columns.Count, 1).End(xlUp).Column To 1 Step -1
If Cells(x, 18).value = y Then
Columns(x + 3).Resize(1).Insert
End If
Next x
Else InStr(1, cell, "Q4", 1) then
Dim y As String
y = InStr(1, cell, "Q4", 1)
If y = "" Then Exit Sub
Dim x As Long
For x = Cells(Columns.Count, 1).End(xlUp).Column To 1 Step -1
If Cells(x, 18).value = y Then
Columns(x + 3).Resize(1).Insert
End If
Next x
End If
End Sub
答案 0 :(得分:0)
在确切情况下没有详细说明,这里有几个循环与你的条件相同。它准备好处理所需数量的单元格(字母和整数)。
Sub InsertMonths()
Dim startInt, endInt, totLetters, lettersCount, curInt As Integer
Dim allLetters(10), curLetter, curCell As String
totLetters = 1
allLetters(1) = "Q"
startInt = 1
endInt = 4
lettersCount = 0
Do
lettersCount = lettersCount + 1
curLetter = allLetters(lettersCount)
curInt = startInt - 1
Do
curInt = curInt + 1
curCell = curLetter & CStr(curInt)
If cell.Value = InStr(1, cell, curCell, 1) Then
Dim y As String
y = InStr(1, cell, curCell, 1)
If y = "" Then Exit Sub
Dim x As Long
For x = Cells(Columns.Count, 1).End(xlUp).Column To 1 Step -1
If Cells(x, 18).Value = y Then
Columns(x + 3).Resize(1).Insert
End If
Next x
End If
Loop While (curInt < endInt)
Loop While (curLetter < totLetters)
End Sub
答案 1 :(得分:0)
在您的代码中,您要在单元格中设置值来保存月份,请输入以下公式而不是值
Cells(x, y).value = "=(MID($D2,2,1) - 1) * 3 + 1"
第二栏将是
Cells(x, y).value = "=(MID($D2,2,1) - 1) * 3 + 2"
第三个是
Cells(x, y).value = "=(MID($D2,2,1) - 1) * 3 + 3"
在上述所有情况中,$ D2应引用您找到的包含“Q#”的单元格。公式基本上采用了季度的数字部分并计算了本季度的第1个月,第2个月和第3个月。
另请注意,这会为您提供月份编号。如果你想要这个名字,你应该能够弄明白。