需要使用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

我是VBA新手,对它一无所知。所以问题是,我有一个动态表格和数据的excel。所有工作表中的数据格式相似。所有工作表中的数据数量将更改,工作表将更改为。有人能帮我吗。如果你帮我的话,我会非常感激你的

编码我这样做的目的

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此代码具有指定的范围。但我需要它来拾取