0

我正在做一个项目,我将销售数据分成几个季度。我需要做的是在每列的前面插入属于该季度的三个月。我从一个 select case 语句开始,但后来意识到这可能不是最好的方法。我想做的是让它成为一个可变范围(可以粘贴 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
4

2 回答 2

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
于 2013-06-25T18:49:41.443 回答
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 个月。

另请注意,这会为您提供月份编号。如果你想要这个名字,你应该能够弄清楚。

于 2013-06-25T18:55:20.103 回答