Excel宏将行/列解析为新工作表

时间:2014-06-30 16:44:47

标签: excel vba excel-vba

我目前有一张包含多行(Excel最大值)的大张(Sheet1),我想将其解析为276行/列的集合到带有标题的单独图纸上。

Sheet2的标题来自A列(重复276次,因此只需要选择一次),而数据则在C和D中。

我尝试使用VBA录制宏,但我没有编辑循环所有行的知识。

这似乎有帮助,但它并不完全存在。 https://sites.google.com/a/madrocketscientist.com/jerrybeaucaires-excelassistant/parse-functions/columns-to-sheets

我记录的宏:

    Sub snp()
    '
    ' snp Macro
    ' transpose snp
    '
    ' Keyboard Shortcut: Ctrl+q
    '
        Sheets("Sheet1").Select
        Range("C24566").Select
        Application.Goto Reference:="R24566C3:R24841C4"
        Selection.Copy
        Sheets("Sheet2").Select
        ActiveSheet.Paste
        Sheets("Sheet1").Select
        ActiveWindow.SmallScroll Down:=252
        Range("A24841").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Sheet2").Select
        Range("FX1").Select
        ActiveSheet.Paste
    End Sub

但是这个宏一遍又一遍地做同样的事情(因为我没有任何宏知识知道如何让它跳到下一组276 ......)。

帮助?谢谢!

1 个答案:

答案 0 :(得分:1)

以下代码做了一些假设:

  1. 除了“Sheet1”
  2. 之外,您没有其他工作表
  3. 可以将所有未来的工作表称为“SheetX”
  4. 仅复制A列
  5. 关于复制了其他空白的最后一张纸并不重要
  6. 一旦你运行一次,你将不需要再次运行它(它不会再次运行)
  7. 您在源表格(sheet1)或其复制到的任何工作表上没有标题
  8. 根据您的需要调整此项,但这应该可以帮助您开始

    Sub Parse()
    
    Dim SheetNum As Integer
    Dim Par As Range
    SheetNum = 2
    
    Do While Sheets("Sheet1").Range("A1") <> ""
    
    Sheets.Add.Name = "Sheet" & SheetNum
    
    X = Sheets("Sheet1").Range("A1").Offset(256, 0).Address
    
    Sheets("Sheet1").Range("A1:" & X).Copy
    
    Sheets("Sheet" & SheetNum).Range("A1").PasteSpecial
    
    Sheets("Sheet1").Rows("1:256").Delete
    
    SheetNum = SheetNum + 1
    
    Loop
    
    
    End Sub
    

    我只是想我会扩展这个答案,这样你就可以学习一些东西,并培养你的VBA技能:

    Do While Sheets("Sheet1").Range("A1") <> "" 这将从loop开始,条件是loop将一直运行,直到表单1中的范围为Empty

    Sheets.Add.Name = "Sheet" & SheetNum添加一张带有工作表编号

    的新工作表
    X = Sheets("Sheet1").Range("A1").Offset(256, 0).Address
    
    Sheets("Sheet1").Range("A1:" & X).Copy
    
    Sheets("Sheet" & SheetNum).Range("A1").PasteSpecial
    
    Sheets("Sheet1").Rows("1:256").Delete
    

    X设置为地址然后复制,然后将新创建的工作表粘贴到复制的单元格中。然后删除原始单元格。

    SheetNum = SheetNum + 1在到达loop命令之前将工作表编号递增1并继续循环,直到设置了条件。