Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在季度之前插入月份列_Vba_Excel - Fatal编程技术网

Vba 在季度之前插入月份列

Vba 在季度之前插入月份列,vba,excel,Vba,Excel,我正在做一个项目,在这个项目中,我把销售数据分解成几个季度。我需要做的是在每一列前面插入属于该季度的三个月。我从一个select case语句开始,但后来意识到这可能不是最好的方法。我想做的是让它成为一个可变范围,可以粘贴1-10年的任何内容,因此我将其设置为搜索InStr的Q1、Q2,然后插入行和适当的月份标题。我还没有插入月份标题,因为我想先插入行,但是如果你有一个不指定单元格值的建议,那也太棒了!还值得一提的是,这种数据插入从U列开始,每次都会。谢谢你的帮助和建议 Sub InsertMo

我正在做一个项目,在这个项目中,我把销售数据分解成几个季度。我需要做的是在每一列前面插入属于该季度的三个月。我从一个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

在不涉及太多细节的具体情况下,这里有两个循环,与您的条件集做相同的事情。它准备处理所需字母和整数的任意多个单元格

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

在代码中,如果要在单元格中设置值以保存月份,请使用以下公式代替该值

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的单元格。公式基本上取季度的数字部分,并计算季度的第一、第二和第三个月


还请注意,这将为您提供月份编号。如果您想要名称,您应该能够计算出来。

您需要将月份分为单独的列,还是只需要一列,但以逗号分隔?单独的列,我们试图将数量与月份组织的同一时间相关联。好的,您使用的是.NET还是vba?你有两个tags.VBA,我把vb.net取下来。只是习惯于使用它,所以我不假思索地给它贴上标签。我的错!太棒了,谢谢!这几个月来肯定会奏效……现在我只需要找出如何正确地循环它。我已经试着简化了一点,但这肯定让我朝着正确的方向前进。我只需要搜索最上面一行,那就是Qx所在的位置。我不能很好地理解它,但似乎我会创建一个变量,然后用行变量替换cell.value,如果cell.value=InStr1,cell,curCell,1,那么Dim x2,只要x2=CellsColumns.Count,1.EndxlUp.Column到1步骤-1,如果Cells1,x.value=curCell然后Columnsx-3.Resize1.Insert End If Next x2我不确定你要找的到底是什么,第一行应该包含什么,但我觉得你过于复杂了。了解单元格的值非常容易:RangeA1.Value或Cells1,1.Value您可以创建一个简单的循环,遍历列Q检查值并获取具有目标值的单元格的行号。你也可以依赖。查找函数,但在你的情况下,我最好先学会使用循环和正确地读取单元格,然后再转向更复杂的函数。是的,你知道他们说什么。熟能生巧。谢谢你的帮助!我想道歉,我懒得发这个问题。我所做的只是用季度来替换所有的FY,这使它变得更容易。再次感谢,如果我打扰了你,很抱歉。没问题。虽然问题越不清楚,但给出解决方案就越困难。您可以继续,然后选择您认为更有用的答案作为正确答案。