Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Excel 如何循环代码块并对非连续列进行操作?_Excel_Vba - Fatal编程技术网

Excel 如何循环代码块并对非连续列进行操作?

Excel 如何循环代码块并对非连续列进行操作?,excel,vba,Excel,Vba,我在几个不同的网站上研究过这个问题,但没有明确的方法来实现我的目标: 我有一个电子表格,有68对从“B”到“EG”的列,在“a”中有一列数据。 我想创建一个新的工作表,并将其命名为每对列的第一列的标题,然后将“a”中的数据列和这对列复制到新工作表中,并对随后的每对列执行相同的操作。我可以从现有电子表格数据创建新工作表,但不确定如何命名新工作表以匹配标题字段 下面的代码将创建一个新的工作表并复制数据,但它不会命名工作表,我必须为后续的每对列创建68个单独的块!有人能建议代码使用mod来循环遍历列并

我在几个不同的网站上研究过这个问题,但没有明确的方法来实现我的目标:

我有一个电子表格,有68对从“B”到“EG”的列,在“a”中有一列数据。 我想创建一个新的工作表,并将其命名为每对列的第一列的标题,然后将“a”中的数据列和这对列复制到新工作表中,并对随后的每对列执行相同的操作。我可以从现有电子表格数据创建新工作表,但不确定如何命名新工作表以匹配标题字段

下面的代码将创建一个新的工作表并复制数据,但它不会命名工作表,我必须为后续的每对列创建68个单独的块!有人能建议代码使用mod来循环遍历列并执行我想要的操作吗?生成的代码如下!任何真正的帮助都将不胜感激

谢谢你,迈克

代码:

大概是这样的:

Sub testcopy()

Dim shtSrc As Worksheet, sht As Worksheet
Dim i As Long, rngA As Range, rngTwo As Range

Set rngA = ActiveSheet.Range("A5:A17")
Set rngTwo = ActiveSheet.Range("B5:C17")

    For i = 1 To 68

        Set sht = Sheets.Add(After:=Sheets(Sheets.Count))
        sht.Name = rngTwo.Cells(1).Value

        Application.Union(rngA, rngTwo).Copy
        sht.Range("A5").PasteSpecial Paste:=xlPasteValues

        Set rngTwo = rngTwo.Offset(0, 2)

    Next i

End Sub

您是否熟悉在VBA中为循环编写
?另外,要命名一个新工作表,您需要
sheets.add(在:=sheets(sheets.Count)之后)。name=“worksheetname”
你好,蒂姆,非常感谢!这是完美的作品,并完全符合我想做的!!!还有一个问题-我如何才能最好地学习如何进行Excel宏/vba编码?开始时我更喜欢一本书:我从与本书相当的XL95开始:嗨,蒂姆,你棒极了!!!我使用了你的代码,并在代码创建的每个新工作表上添加了几行创建图表,一切都很好!!!我将得到这本书,并希望学习做这个神奇的东西!!!谢谢你对这本书的帮助和建议!
Sub testcopy()

Dim shtSrc As Worksheet, sht As Worksheet
Dim i As Long, rngA As Range, rngTwo As Range

Set rngA = ActiveSheet.Range("A5:A17")
Set rngTwo = ActiveSheet.Range("B5:C17")

    For i = 1 To 68

        Set sht = Sheets.Add(After:=Sheets(Sheets.Count))
        sht.Name = rngTwo.Cells(1).Value

        Application.Union(rngA, rngTwo).Copy
        sht.Range("A5").PasteSpecial Paste:=xlPasteValues

        Set rngTwo = rngTwo.Offset(0, 2)

    Next i

End Sub