首页 文章

VBA在摘要表中复制/粘贴动态范围

提问于
浏览
-1

我对VBA很新,而且大多数时候我通过简单的陪审团来操纵我的需求 - 操纵其他人的代码 - 有时我也会找到我在寻找其他人的问题的答案 . 但是现在似乎我无法弄清楚如何解决这个问题(我试过在其他excel论坛上询问,但没有结果) .

我正在处理非常大的数据输出文件,这些文件在多个工作簿中显示我需要分析分散在工作表中的所有变量 . 为了统计分析这些数据文件,我们经常需要将输出数据重新排列为更加统计友好的格式 . 我正在尝试编写的是我需要分析的每个工作簿的摘要新工作表,其中将填充从每个工作表复制的动态范围并将其粘贴到另一个工作簿之下 .

困难在于范围不固定:具有变量起点作为“A”列中的行,以及可变长度(因此是变量终点,但总是在列“F”中) .

所以我需要调整一个简单的复制/粘贴代码,就像我多年来一直使用的那样

Sub SummurizeSheets()
Dim ws As Worksheet

Application.ScreenUpdating = False
Sheets("Summary").Activate

For Each ws In Worksheets
    If ws.Name <> "Summary" Then
        ws.Range("A1:A2").Copy
        ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    End If
Next ws
End Sub

动态范围从以下开始:列"A",行=(MATCH(摘要!$ M $ 1; [SheetName]!A:A; 0)并从范围 - 起点开始的最后一个非空白单元格结束(这是实际上属于摘要列M1中描述的变量范围内的最后一个填充单元格

这最后一部分看起来像弗兰肯斯坦的怪物:MATCH(TRUE; INDEX(ISBLANK(间接(CONCATENATE(CONCATENATE(“A”; MATCH)(摘要!$ M $ 1; [SheetName]!A:A; 0));“:” ;“A100”))); 0; 0); 0)行(间接(CONCATENATE(“A”; MATCH(摘要!$ M $ 1; [SheetName]!A:A; 0)))) - 1

它基本上寻找任意自定义范围内的第一个空白单元格,从上述起点到A100,一旦找到,就将行号偏移(-1) .

最后,问题是:我如何将这两个单元格引用转换为上面的ws.Range(“xx:xx”),让我的旧pal复制/粘贴在我需要的范围内完成它的工作?

1 回答

  • 0

    如果输出是行号,只需将 Cells()Range() 组合使用:

    Range(Cells(ROW NUMBER, COLUMN NUMBER), Cells(ROW NUMBER2, COLUMN NUMBER2))
    

    其中 ROW NUMBER 是你的frankenstein的输出, COLUMN NUMBER 显然是列的编号 . ROW NUMBER2 是最后一行的行号

相关问题