2016-06-22 23 views
0

我有用於從所有工作表中獲取特定列(此例中爲A列)最後一行值的代碼一張工作簿的圖紙「主人」。VBA從工作簿中的多個工作表中查找同一列中最後一行的行號或單元格地址

Sub CopyToMaster() 
ShtCount = ActiveWorkbook.Sheets.Count 
For i = 2 To ShtCount 
Worksheets(i).Activate 
LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 
Range("A" & LastRow).Select 
Selection.Copy 
Sheets("Master").Activate 
LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Select 
'Required after first paste to shift active cell down one 
Do While Not IsEmpty(ActiveCell) 
ActiveCell.Offset(1, 0).Select 
Loop 
Selection.PasteSpecial 
Next I 
End Sub 

現在我想的單元格地址(例如,工作表Sheet1!A98),或至少在細胞中而不是在單元格的值的行數。如果可能的話,我可以在一半的時間內完成我的工作。我無法找到一個解決方案,因爲我知道VB只通過最後一週的Google搜索;)希望儘快回覆。由於

+0

你有'LastRow'行和地址,你會使用'ActiveSheet.Cells(Rows.Count, 「A」)。完(xlUp)。地址' –

回答

0

我會建議使用.Address屬性並將其存儲在一個變量中,以將它粘貼到與其引用的工作表連接的單元格中。

編輯與Nathan_Sav的觀點,我添加RowAbsolute和ColumnAbsolute有一個更靈活的方法來引用不同的工作表中的單元格。

請注意,您必須使用工作表的.Name您有要引用的數據。

下面的代碼並不需要很大的改變:

Sub CopyToMaster() 

Dim LastRow as Long, a as String 

ShtCount = ActiveWorkbook.Sheets.Count 
For i = 2 To ShtCount 
    Worksheets(i).Activate 
    LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 
    Range("A" & LastRow).Select 

    'Storing the current location of the cell 
    a = Selection.Address(RowAbsolute:= False, ColumnAbsolute:= False) 

    Sheets("Master").Activate 
    LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Select 

    'Required after first paste to shift active cell down one 
    Do While Not IsEmpty(ActiveCell) 
     ActiveCell.Offset(1, 0).Select 
    Loop 

    ' Pasting in a formula the corresponding workbook it references to and the cell's position 
    Selection.Formula = "='" & Worksheets(i).Name & "'!" & a 
Next i 

End Sub 

希望這個排序了這一點。

+1

Pierre Chevallier - 您可以通過使用Address中的參數來關閉鎖定$,無需替換。 –

+0

有趣我不知道,我將在未來注意到這一點,並編輯上面的代碼。 –

+0

完美的作品。正是我想要的。 :) – Okfarooq

0

要檢索的單元格地址,你可以簡單地做到以下幾點:

Dim sAddress as String 

For i = 2 to ShtCount 
    'No need to select a sheet 
    sAddress = Worksheets(i).Cells(Rows.Count, "A").End(xlUp).Address 
Next i 

難道這就是你要找的人?

0

這應該工作

Dim master_book As Workbook, ref_book As Workbook 
Dim sh_cnt As Long, i As Long 
Dim sheet As Worksheet 

Set ref = ThisWorkbook 
' set the master workbook 

sh_cnt = ref_book.Sheets.Count 
For i = 1 To sh_cnt 
    Set sheet = ref_book.Sheets(1) 
    master_book.Sheets(1).Range("A" & i) = sheet.Range("A" & sheet.Cells.CurrentRegion.Rows.Count) 
Next 
相關問題