Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
使用宏将3个以上Excel工作表合并到一个工作簿中_Excel_Vba - Fatal编程技术网

使用宏将3个以上Excel工作表合并到一个工作簿中

使用宏将3个以上Excel工作表合并到一个工作簿中,excel,vba,Excel,Vba,我正在尝试将工作表合并到一个工作簿中。我有一本20多页的工作手册。我想创建一个宏,将工作表合并到一个单独的工作簿中(取决于它们的名称) 到目前为止,这是我得到的代码:它将工作簿中的所有工作表合并在一起,但我想按名称合并它们 Sub mergedata() Sheets(1).Activate lastrow = ActiveSheet.UsedRange.Rows.Count For Each Sheet In Sheets If Sheet.Index <> 1

我正在尝试将工作表合并到一个工作簿中。我有一本20多页的工作手册。我想创建一个宏,将工作表合并到一个单独的工作簿中(取决于它们的名称)

到目前为止,这是我得到的代码:它将工作簿中的所有工作表合并在一起,但我想按名称合并它们

Sub mergedata()
  Sheets(1).Activate
  lastrow = ActiveSheet.UsedRange.Rows.Count
  For Each Sheet In Sheets
    If Sheet.Index <> 1 Then
      RowCount = Sheet.UsedRange.Rows.Count
      Sheet.UsedRange.Copy Destination:=Sheets(1).Cells(lastrow + 1, 1)
      lastrow = lastrow + RowCount
      Sheet.UsedRange.Clear
    End If
  Next Sheet
End Sub
子合并数据()
第(1)页。激活
lastrow=ActiveSheet.UsedRange.Rows.Count
每一张中的每一张
如果是表索引1,则
RowCount=Sheet.UsedRange.Rows.Count
Sheet.UsedRange.Copy目标:=工作表(1).单元格(lastrow+1,1)
lastrow=lastrow+RowCount
Sheet.UsedRange.Clear
如果结束
下一页
端接头

您需要在循环中添加一个额外的if语句。这可能是这样的:

'.....
For Each Sheet In Sheets
    If Sheet.Index <> 1 Then
        If Sheet.Name = "NameOfSheet" or Sheet.Name = "NameIsCaseSensitive" then
            RowCount = Sheet.UsedRange.Rows.Count
            Sheet.UsedRange.Copy Destination:=Sheets(1).Cells(lastrow + 1, 1)
            lastrow = lastrow + RowCount
            Sheet.UsedRange.Clear
        end if
    End If
Next Sheet
'....
“。。。。。
每一张中的每一张
如果是表索引1,则
如果Sheet.Name=“NameOfSheet”或Sheet.Name=“NameIsCaseSensitive”,则
RowCount=Sheet.UsedRange.Rows.Count
Sheet.UsedRange.Copy目标:=工作表(1).单元格(lastrow+1,1)
lastrow=lastrow+RowCount
Sheet.UsedRange.Clear
如果结束
如果结束
下一页
'....

如果您需要相同但水平的(就像我一样)(不升级名称)

Sub-mergedata_-horizontal()
第(1)页。激活
lastcol=ActiveSheet.UsedRange.Columns.Count
每一张中的每一张
如果是表索引1,则
ColCount=Sheet.UsedRange.Columns.Count
Sheet.UsedRange.Copy目标:=工作表(1)。单元格(1,lastcol+1)
lastcol=lastcol+ColCount
Sheet.UsedRange.Clear
如果结束
下一页
端接头

谢谢,这非常有效。我有没有办法修改它,使这些工作表合并在一个单独的工作簿中打开?对不起,我没有收到你的评论问题,你能澄清一下吗?如果“这很好用”,你为什么要删除你的答案?
Sub mergedata_horizontal()
  Sheets(1).Activate
  lastcol = ActiveSheet.UsedRange.Columns.Count
  For Each Sheet In Sheets
    If Sheet.Index <> 1 Then
      ColCount = Sheet.UsedRange.Columns.Count
      Sheet.UsedRange.Copy Destination:=Sheets(1).Cells(1, lastcol + 1)
      lastcol = lastcol + ColCount
      Sheet.UsedRange.Clear
    End If
  Next Sheet
End Sub