我对VBA很陌生,大多数时候我通过简单的陪审团操纵其他人的代码来满足我的需求 - 有时候我也能找到我在寻找其他人的答案中的确切内容&# 39;问题。但是现在我似乎无法弄清楚如何解决这个问题(我试过在其他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
动态范围从:
专栏&#34; A&#34;, row =(MATCH(Summary!$M$1;[SheetName]!A:A;0)
并从范围起始点开始的最后一个非空白单元格结束(实际上是属于摘要列M1中描述的变量的范围内的最后一个填充单元格)
这最后一部分看起来像弗兰肯斯坦的怪物:
MATCH(TRUE;INDEX(ISBLANK(INDIRECT(CONCATENATE(CONCATENATE("A";MATCH(Summary!$M$1
; [SheetName]!A:A;0));":";"A100")));0;0);0)+ROW(INDIRECT(CONCATENATE("A";MATCH(Summary!$M$1;[SheetName]!A:A;0))))-1
的
基本上查找任意自定义范围内的第一个空白单元格,从上述起点到A100,一旦找到,将行号偏移(-1)。
最后,问题是:如何将这两个单元格引用转换为上面的 ws.Range("xx:xx")
,让我的旧朋友复制/粘贴在我需要的范围内完成它的工作?
答案 0 :(得分:0)
如果输出是行号,请与Cells()
组合使用Range()
:
Range(Cells(ROW NUMBER, COLUMN NUMBER), Cells(ROW NUMBER2, COLUMN NUMBER2))
其中ROW NUMBER
是frankenstein的输出,COLUMN NUMBER
显然是列的编号。 ROW NUMBER2
是您最后一行的行号