簡體   English   中英

如何將多個工作簿中的數據復制、轉置和合並到原始活動工作簿中?

[英]How to copy, transposing and consolidate data from several workbooks to the original active workbook?

我是新手,開始在 VBA 中邁出第一步。 我想創建一個宏來打開 CSV 文件並要求從第一個文件中選擇一個范圍(我需要 select 一個列向量,並且該范圍將與宏相同),從該列向量中提取數據並將其粘貼為原始活動工作簿中的行向量(轉置數據)。 我已經嘗試了很多東西,但我認為我缺少一些知識。 我想也許我需要在數組中創建一個數組,因為A(i)有多個元素,它本身就是一個數組。 這是我寫的:

Option Explicit
Option Base 1

Sub x()

    Dim FileNames() As Variant, nw As Integer
    Dim i As Integer, A() As Variant
    Dim tWB As Workbook, aWB As Workbook
    
    Set tWB = ThisWorkbook
    
    Dim UserRange As Range

    FileNames = Application.GetOpenFilename("CSV Files (*.csv*),*.csv*", , , , True)
    nw = UBound(FileNames)
    
    Application.ScreenUpdating = False

    ReDim A(nw) As Variant

    Set UserRange = Application.InputBox("Select range", "Range Selection", , , , , , 8)
    
    For i = 1 To nw
         
        Workbooks.Open FileNames(i)
        Set aWB = ActiveWorkbook
        A(i) = aWB.Sheets(1).Range("UserRange")
        tWB.Activate
        tWB.Sheets(1).Range.Cells(i, 1) = WorksheetFunction.Transpose(A)
        aWB.Close SaveChanges:=False

    Next i

End Sub

謝謝你,我真的很感謝你的幫助

您的項目分為 4 個部分,從技術上講,需要 4 個問題,我不會在這里回答,因為在這個論壇中,一個線程應該只處理一個問題。

  1. 第一個主題:獲取文件名。 您將名稱加載到數組中的想法是正確的。 如果您的代碼允許您選擇多個文件,那是偶然的,而不是設計使然。 我建議您創建一個返回數組的 function。 如果用戶按下Cancel將沒有數組並且執行應該停止。 你可以問關於那個function的問題。
  2. 指定列。 你的想法行不通。 Range object 綁定到一個工作表。 您不能在每張工作表中指定“相同”范圍。 在調用 InputBox 時,您也沒有打開工作表。 可以為每張工作表指定相同的范圍地址,但不能從 InputBox 中獲取。 我懷疑您應該輸入一個列 ID(如“C”)或一個列號(如 3),或者最有可能的是一個列標題(如“APPL”),然后讓下一部分在每個打開的文件中查找該列。
  3. 打開文件。 使用Application.ScreenUpdating = False永遠不會看到打開的文件。 你不需要Activate任何東西。 事實上,您不需要變量aWB ,因為您使用的是ActiveWorkbook 但考慮指定一個工作表。 你的循環很好,但還沒有完成。 讓它運行,調試。在關閉之前打印每個工作簿/工作表的名稱,以便您可以在需要時提出問題。
  4. 從每張紙中提取數據。 一列有大約 100 萬行。 你需要幾個? 您的代碼對此靜音。 根據前面定義的列規范指定本節中的范圍。 然后使用Arr = UserRange.Value (其中Arr是 Variant - 不是A() ),然后tWB.Workheets(1).Cells(1, 1).Value = Application.Transpose(Arr) 這里沒有指定行。 您可能需要指定 A 列下的第一個空白單元格,這是第四個問題的主題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM