2013-10-03 101 views
1

我有一個電子表格,其中包含默認表格大小和佈局,該表格由另一個電子表格中的信息填充。該表總是具有相同的列數,但行中的條目數量可能會有所不同。我想選擇表格中的所有數據,並將其粘貼到另一個表格中,而不復制任何空行。從默認表格大小VBA中選擇所有數據Excel

我的初步嘗試參與下面的代碼:

Set rightcell = Range("B9").End(x1Right) 
Set bottomcell = Range(rightcell).End(x1Down) 

定義右下角應該是什麼,所以我可以引用整個表所示:

Range("B9", bottomcell).Select 

或複製或什麼。當我運行它時,它給了我一個「用戶定義或對象定義的錯誤」,我不知道爲什麼。我把代碼輸入爲一個更大的子集的一部分,我已經將我的變量定義爲範圍和變體,以嘗試使其發揮作用。我花了很多時間在互聯網上搜索解決方案,但到目前爲止,我發現的信息並未明確與我的問題相關,也沒有類似的解決方案。

有誰知道這是什麼適當的編碼,或者如果我正在做一些小的錯誤,拋出一切關閉?我記得在大學的一個項目中遇到同樣的問題,但在我的生活中,我無法回想起解決方案。這非常令人沮喪。

另外,如果我太模糊或者您需要更多關於任務的說明,請不要猶豫。先謝謝您的幫助!

編輯:我忽略了一個重要的注意事項,即我想從中提取數據的表格是在多頁其他表格的中間,我不想與之交互。

回答

1

如果該表將永遠是在工作表上的相同位置,您可以執行類似以下操作來複制整個表格:

'Modify this to any cell in your table (like the top left hand cell): 
Range("B9").CurrentRegion.Copy Sheets("TheSheetYouWantToPasteTo").Range("A1") 

即使表格在工作表上的位置發生更改,只要您知道表格中的某個單元格,就仍然可以使用上述代碼複製表格。

如果你想保持你盡力了同樣的方法,試試這個來代替:

Dim rightcell As Long 
Dim bottomcell As Long 

'Finds the furthest column to the right: 
rightcell = Cells(5, Columns.Count).End(xlToLeft).Column 

'Finds the bottom most row in the table (will stop at the first non-blank cell it finds.) 
bottomcell = Range("B:B").Find("*", Range("B9"), searchdirection:=xlPrevious).Row 

'Reference the variables like this: 
Range(Cells(9, 2), Cells(bottomcell, rightcell)).copy _ 
Sheets("TheSheetYouWantToPasteTo").Range("A1") 
+0

謝謝,這個解決方案几乎完美。 我不知道爲什麼,但我不得不將底部搜索行更改爲不同的列以便實際查找最後一行。該功能是從電子表格頂部還是從指定範圍(本例中爲B9)搜索? – user2844154

+0

好,我很高興它適合你的目的!這裏的'.Find'功能從底部到頂部搜索工作表;最高的是B9。因此,如果表格下方的表格試圖複製,那麼'.Find'函數將在該表格處停止。 (*符號正在尋找單元格中的任何字符。) – ARich

+0

雖然'.Find'更加健壯(IMO),您可以使用它:'bottomcell = Range(「B9」)。End(xlDown).Row' 。 – ARich

0

這是我用

Public Function last_row() As Long 
    Dim i As Integer 
    Dim l_row As Long 
    'my sheet has 35 columns change this number to fit your 
    For i = 1 To 35 
     If Sheet1.Cells(Rows.Count, i).End(xlUp).Row > l_row Then 
      l_row = Sheet1.Cells(Rows.Count, i).End(xlUp).Row 
     End If 
    Next i 
    last_row = l_row 
End Function 

然後用

Dim l_row As Long 
l_row = last_row 
'Again since you know the last column change 35 here to your value 
'or use the String i.e. "AI" 
Range("B9", Cells(l_row,35)).Select 

這將着眼於每列,以確定最後一行包含數據

+0

感謝您的幫助。我忘了添加一個關鍵的細節:我忽略了一個重要的注意事項,那就是我想從中提取數據的表格位於包含多個其他表格的中間,我不想與其交互。 – user2844154

相關問題