2011-12-19 218 views
-1

目前,我正在努力與以下內容: 我有兩個Excel文件。一個文件包含大量數據,另一個用於評估數據。 現在我需要高效地將數據從源文件複製到目標工作簿。源datapattern看起來類似於以下內容:Excel VBA - 如何有效地將多個單元格從一個文件複製到另一個文件?

x A B C D E F G H I 
1 Oct bla bla bla bla bla bla bla bla 
2    75    66 
3 Nov bla bla IMT Frm bla bla IMT Frm 

當喇嘛代表無趣的數據,A列表示月份(重要)和IMT是非常重要的數據,這就是爲什麼我這樣做的原因。此外,Frm表示單元格包含公式,而不是值,並且必須進行保存/恢復。 此外,目標文件的單元格格式必須保留(可以使用.PasteSpecial來實現)。

目標工作簿看起來完全一樣,省略了半空行「2」。

每一行都有大約10個有價值的條目。我如何才能最有效地將數據複製到第二個工作簿中? 請讓我知道,如果有更多的信息,我可以提供。 謝謝你的時間!

編輯:example screenshot 說明:該屏幕截圖顯示了源表單。重要的信息是在ss中選擇的信息。工作表像這樣繼續向右(直到BF)。我需要複製每六個條目。目標工作表看起來完全相同(省略半空中間行),除了所需的信息(在源代碼中是公式,但它需要是目標中的值)。 非常感謝您的幫助!

回答

1

下面是一個示例代碼,將讓你在正確的方向前進:

Public Sub CopyValues() 

Dim wb_src As Workbook, wb_dst As Workbook 
Dim ws_src As Worksheet, ws_dst As Worksheet 

Set wb_src = Workbooks.Open("....") 
Set wb_dst = Workbooks.Add() 

Set ws_src = wb_src.Sheets(1) 
Set ws_dst = wb_dst.Sheets(1) 

Dim data() As Variant 
Dim r_src As Range 
Dim r_dst As Range 

Set r_src = ws_src.Range("B4").Resize(1000, 100) 
Set r_dst = ws_dst.Range("B4").Resize(1000, 100) 

data = r_src.Value2 
r_dst.Value2 = data 

End Sub 
0

試試這個:

Option Explicit 
Sub test() 
    Dim wb As Workbook, wb2 As Workbook 
    Dim ws As Worksheet 
    Dim vFile As Variant 

    'Set source workbook 
    Set wb = ActiveWorkbook 
    'Open the target workbook 
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _ 
     1, "Select One File To Open", , False) 
    'if the user didn't select a file, exit sub 
    If TypeName(vFile) = "Boolean" Then Exit Sub 
    Workbooks.Open vFile 
    'Set targetworkbook 
    Set wb2 = ActiveWorkbook 

    'Copy data from a range in the first workbook to another range in the other workbook 
    wb2.Worksheets("Sheet2").Range("C3:D4").Value = wb.Worksheets("Sheet1").Range("A1:B2").Value 
End Sub 
+0

感謝您的幫助!然而上面的代碼要求我知道預先粘貼的範圍。然而,這取決於月份。我可以找到包含月份的單元格,並且知道偏移量。但我需要以某種方式遍歷它們才能到達我的目標單元格嗎? – replax 2011-12-19 06:27:51

+0

這對你有幫助嗎? http://msdn.microsoft.com/en-us/library/aa221353(v=office.11​​).aspx ...你必須在條件檢查月 – MacGyver 2011-12-19 06:29:43

+0

再次感謝,是的幫助!然而,由於沒有我通常可以用來過濾所需細胞的條件,是否有一種方法可以處理每個第三個細胞? – replax 2011-12-19 06:38:41

-2

因此以後有更多的研究,我想我已經找到了答案。 請改正或改進我,如果我的方法是/錯/不理想。 我正在使用一個循環,然後只是assingin值...我想知道,來自C++,如果這是做「最短」的方式?看起來像一個臃腫的循環...

Dim i As Integer 
For i = 6 To 55 
    targetSheetSal.Cells(ActiveCell.Row, i + 1).Value = sourceSheet.Cells(24, i).Value 
    i = i + 5 
Next i 

謝謝大家的時間,輸入和建議!

+1

-1請勿逐個單元格複製。查看其他示例並複製多個單元格的範圍。它快很多倍。示例:Range(「A2」)。Resize(300,20).Value'返回一個從單元格「A2」開始的'300' x'20'值的數組。您可以以類似的方式將數組分配給一個範圍。 – ja72 2011-12-20 05:01:21

+0

感謝您的意見。然而,如果沒有輸入每個單獨的列(可能有100多個),定義一個帶有「間隙」的範圍是可能的嗎?如每六個細胞一樣?可能使用偏移量()或你怎麼實現? – replax 2011-12-20 05:24:12

+0

是的,你可以。一種選擇是根據像Range(「B4:C9,E4:D9」)這樣的單元列表來選擇一個範圍。或者,您可以通過直接對陣列進行操作來在VBA中執行此操作。發佈另一個問題以獲得完整答案。 – ja72 2011-12-20 06:33:31

相關問題