2016-07-07 153 views
-1

我對VBA非常新穎,大多數時候我通過簡單的陪審團來操縱別人的代碼來滿足我的需求 - 有時候我也會找到我正在尋找的東西回答其他人的問題。但現在看來我無法弄清楚如何解決這個問題(我試着在其他的Excel論壇上詢問,但沒有結果)。VBA在彙總表中複製/粘貼一個動態範圍

我正在處理非常大的數據輸出文件,這些文件在多個工作簿中提供了我需要分散在工作表中的所有變量。爲了統計分析這些數據文件,我們經常需要將輸出數據重新排列成更具統計友好的格式。 我想要編寫的代碼是我需要分析的每個工作簿的摘要新工作表,這些工作簿將使用從每個工作表複製的動態範圍進行填充,並將其粘貼到另一個工作簿的下方。

困難在於範圍不固定的事實:在列「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」,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")上述有我的老朋友複製/粘貼完成它的工作與我要求的範圍內?

+2

您的frankenstein公式的輸出是什麼? – gizlmo

+0

如果你有兩個單元格引用,你可以使用'Range(reference1,reference2)'。引用可以是字符串或範圍對象。 – arcadeprecinct

+0

@gizlmeier它是一個行號 – xanadu

回答

0

如果輸出是行號,只是在組合使用Cells()Range()

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

其中ROW NUMBER是你的怪人的輸出和COLUMN NUMBER顯然是列數。 ROW NUMBER2是您最後一行的行號

相關問題