需要使用vba从动态工作表中选择包含动态数据的行并在excel中合并到新工作表中的帮助吗
我是VBA新手,对它一无所知。所以问题是,我有一个动态表格和数据的excel。所有工作表中的数据格式相似。所有工作表中的数据数量将更改,工作表将更改为。有人能帮我吗。如果你帮我的话,我会非常感激你的 编码我这样做的目的需要使用vba从动态工作表中选择包含动态数据的行并在excel中合并到新工作表中的帮助吗,excel,vba,Excel,Vba,我是VBA新手,对它一无所知。所以问题是,我有一个动态表格和数据的excel。所有工作表中的数据格式相似。所有工作表中的数据数量将更改,工作表将更改为。有人能帮我吗。如果你帮我的话,我会非常感激你的 编码我这样做的目的 Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(What:="*", _ After:=sh.Ra
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).row
On Error GoTo 0
End Function
Function LastCol(sh As Worksheet)
On Error Resume Next
LastCol = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function
Sub CopyRangeFromMultiWorksheets()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim CopyRng As Range
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
' Delete the summary sheet if it exists.
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("RDBMergeSheet").Delete
On Error GoTo 0
Application.DisplayAlerts = True
' Add a new summary worksheet.
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "RDBMergeSheet"
' Loop through all worksheets and copy the data to the
' summary worksheet.
For Each sh In ActiveWorkbook.Worksheets
If sh.Name <> DestSh.Name Then
' Find the last row with data on the summary worksheet.
Last = LastRow(DestSh)
' Specify the range to place the data.
Set CopyRng = sh.Range("A1:b60")
' Test to see whether there are enough rows in the summary
' worksheet to copy all the data.
If Last + CopyRng.Rows.count > DestSh.Rows.count Then
MsgBox "There are not enough rows in the " & _
"summary worksheet to place the data."
GoTo ExitTheSub
End If
' This statement copies values and formats from each
' worksheet.
CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
' Optional: This statement will copy the sheet
' name in the H column.
DestSh.Cells(Last + 1, "H").Resize(CopyRng.Rows.count).Value = sh.Name
End If
Next
ExitTheSub:
Application.Goto DestSh.Cells(1)
' AutoFit the column width in the summary sheet.
DestSh.Columns.AutoFit
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
函数LastRow(sh作为工作表)
出错时继续下一步
LastRow=sh.Cells.Find(内容:=“*”_
之后:=sh.Range(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
错误转到0
端函数
函数LastCol(sh作为工作表)
出错时继续下一步
LastCol=sh.Cells.Find(内容:=“*”_
之后:=sh.Range(“A1”)_
看:=xlPart_
LookIn:=xl公式_
SearchOrder:=xlByColumns_
搜索方向:=xlPrevious_
MatchCase:=False)。列
错误转到0
端函数
多工作表()的子副本范围
将sh设置为工作表
将DestSh设置为工作表
持续时间一样长
暗拷贝As范围
应用
.ScreenUpdate=False
.EnableEvents=False
以
'删除汇总表(如果存在)。
Application.DisplayAlerts=False
出错时继续下一步
ActiveWorkbook.Worksheets(“RDBMergeSheet”)。删除
错误转到0
Application.DisplayAlerts=True
'添加新的摘要工作表。
设置DestSh=ActiveWorkbook.Worksheets.Add
DestSh.Name=“RDBMergeSheet”
'循环浏览所有工作表并将数据复制到
'摘要工作表。
对于ActiveWorkbook.工作表中的每个sh
如果sh.Name DestSh.Name那么
'查找摘要工作表上包含数据的最后一行。
最后一行=最后一行(DestSh)
'指定放置数据的范围。
设置CopyRng=sh.Range(“A1:b60”)
'测试以查看摘要中是否有足够的行
'工作表以复制所有数据。
如果Last+CopyRng.Rows.count>DestSh.Rows.count,则
MsgBox“&_
“用于放置数据的摘要工作表。”
下地狱
如果结束
'此语句从每个
“工作表。
复制,复制
带目标单元格(最后+1,“A”)
.Paste特殊XLPaste值
.Paste特殊XLPaste格式
Application.CutCopyMode=False
以
'可选:此语句将复制工作表
'名称在H列中。
DestSh.Cells(Last+1,“H”).Resize(CopyRng.Rows.count).Value=sh.Name
如果结束
下一个
退出主题:
应用程序。转到DestSh。单元格(1)
'自动调整汇总表中的列宽。
DestSh.Columns.AutoFit
应用
.ScreenUpdate=True
.EnableEvents=True
以
端接头
根据您的评论,要动态设置范围,您可以采用以下方法:
Dim LastRow As Long
Dim r As Range
LastRow = Cells(Rows.Count, "a").End(xlUp).Row
Set r = Range("A1:b" & LastRow)
LastRow
是一个long,它存储在列a
的最后一个数据行中。只需确保列中的字母,您可以确保它始终具有数据,以使其正常工作
说明:
Dim lastrow as long
:这告诉VBA创建一个长数据类型(long是4字节大小的数据类型,范围从-2147483648到2147483647)。变量名为lastrow
Dim r As Range
:告诉VBA创建范围对象。希望你知道什么是射程LastRow=单元格(Rows.Count,“a”).End(xlUp).行
。我们可以这样看:
单元格(Rows.count,“a”)
将返回一个范围对象,该范围对象由行号Rows.count
(工作表中的整个行数)和列a
分隔
.End(xlup)
是上述范围的属性。它将返回另一个范围对象,但这次是非空单元格的范围Xlup
是该属性的参数,它基本上意味着该属性将从下向上读取单元格,因此是向上方向。这意味着它将在包含下面数据的第一个单元格处停止.Row
属性将返回该对象中的实际行数LastRow
现在将收到该号码Set r=range(“A1:B”和lastrow)
告诉vba将r对象的值设置为范围从“A1”
到“B”和lastrow”
的范围内的范围对象
现在有了一个称为r的动态范围你到底需要什么?我会给出文档和我需要的格式。你能开发代码从中收集数据吗?欢迎首先使用Stack OverFlow!我们是一个QA社区,喜欢帮助人们。尽管如此,如果你能在提出要求之前花点力气并尝试编写解决问题的代码,我们将不胜感激。对于ActiveWorkbook.worksheet中的每个sh如果sh.Name DestSh.Name然后Last=LastRow(DestSh)设置CopyRng=sh.Range(“A1:b60”)CopyRng.Copy与DestSh.Cells一起复制(Last+1,“A”).PasteSpecial xlPasteValues.PasteSpecial xlPasteFormats Application.CutCopyMode=False End WithNow此代码具有指定的范围。但我需要它来拾取