Board logo

標題: 合併多個工作表內資料於新增1工作表 [打印本頁]

作者: Happkkevin    時間: 2011-6-29 22:14     標題: 合併多個工作表內資料於新增1工作表

需要合併多個工作表內資料於新增1工作表
且依工作表標籤統一呈現於新增的工作表中的某一欄
目前以VBA匯入多文字資料但分屬不同檔案
合併數據-1、合併數據-2、合併數據-3
但希望匯入資料呈現如 附件中的 合併數據 .xls
匯入資料處理方面還 OK且資料多,就依需求簡化成附件中的資料
不知是否能以VBA 方式減少目前手動方式處理作業,
煩請是否高手可協助處理解決,感恩!!

[attach]6877[/attach]
作者: luhpro    時間: 2011-7-5 23:22

  1. Sub nn()
  2.   Dim iI%, iRowEnd%, iTarRow%
  3.   Dim sGroup$
  4.   Dim vMer
  5.   
  6.   Set vMer = Sheets("合併")
  7.   iTarRow = 2
  8.   
  9.   For iI = 1 To Sheets.Count
  10.     With Sheets(iI)
  11.       If .Name <> vMer.Name Then
  12.         sGroup = .Name
  13.         iRowEnd = .Cells(Rows.Count, 1).End(xlUp).Row
  14.         .Range(.Cells(2, 1), .Cells(iRowEnd, 2)).Copy
  15.         With vMer
  16.           .Paste Destination:=.Cells(iTarRow, 1)
  17.           .Cells(iRowEnd + iTarRow - 2, 3) = sGroup
  18.           .Range(.Cells(iTarRow, 3), .Cells(iRowEnd + iTarRow - 2, 3)).FillUp
  19.         End With
  20.         iTarRow = iRowEnd + iTarRow - 1
  21.       End If
  22.     End With
  23.   Next iI
  24. End Sub
複製代碼

作者: Happkkevin    時間: 2011-7-5 23:59

感謝luhpro的協助,測試符合需求
正在研究您的語法應用於需求中,
但以我的功力與時間,還需要一些時間,若有問題再向您討教
相信一定能功能大增,感恩
作者: GBKEE    時間: 2011-7-6 08:52

簡化一下
  1. Sub Ex()
  2.     Dim Sh As Worksheet, i%, iRowEnd%, Ar()
  3.     With Sheets("合併")
  4.         .Move Sheets(1)                      '工作表移到最前面
  5.         .UsedRange.Offset(1).ClearContents   '使用範圍第2列開始清除
  6.         For i = 2 To Sheets.Count            '工作表索引2開始的迴圈
  7.             iRowEnd = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
  8.             Ar = Sheets(i).Range("A2:B" & iRowEnd).Value                                            '取得資料
  9.             .Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(Ar), 2) = Ar                 '置入資料
  10.             .Range("C" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(Ar), 1) = Sheets(i).Name     '置入工作表名稱
  11.         Next
  12.     End With
  13. End Sub
複製代碼

作者: Happkkevin    時間: 2011-7-8 00:44

差點都忘記回來看看自己的問題,想不到還有其他方式
研究中,GBKEE版大後面還又加註解,對於學習中的我了解應該會快些
放假時研究,有問題再討教,感恩
作者: Happkkevin    時間: 2011-7-12 21:03

學習中,對於語法懂得不多,煩請  GBKEE版大指導一下
iRowEnd = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
的意義為何?
關於  Ar = Sheets(i).Range("A2:B" & iRowEnd).Value 中的 Range ("A2:B" & iRowEnd)的意思是?
一下子要從基本VBA認知跳到看得懂版大的語法,怎麼"說明"與工具書都失效囉!!
作者: GBKEE    時間: 2011-7-13 09:25

本帖最後由 GBKEE 於 2011-7-13 09:28 編輯

回復 6# Happkkevin
iRowEnd = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row的意義為何?
A: iRowEnd =Sheets(i).A65536往上到有資料儲存格的列號
i  ->工作表的索引值
Rows.Count  列的計數(總數)    2003為 65536   
End 屬性      傳回 Range 物件,該物件代表包含來源範圍之區域結尾處的儲存格。等於按 END+向上鍵(XlUp)、END+向下鍵(XlDown)、END+向左鍵    (XlToLeft)或 END+向右鍵(XlToRight)。唯讀 Range 物件。
Row
->列號

關於  Ar = Sheets(i).Range("A2:B" & iRowEnd).Value 中的 Range ("A2:B" & iRowEnd)的意思是?
A: 如  iRowEnd=100     Range ("A2:B" & iRowEnd) -> Range ("A2:B100")
作者: Happkkevin    時間: 2011-7-15 21:38

Dim Ar()
GBKEE 發表於 2011-7-6 08:52

Ar() 為宣告為陣列的縮寫嗎?

Resize(UBound(Ar), 2)
GBKEE 發表於 2011-7-6 08:52

學習 Resize應用,節錄 說明檔順道貼上供參考
但其中 UBound(Ar)的含義與用法為何?
  1. Resize 屬性
  2. 請參閱請參閱請參閱請參閱調整指定的範圍。傳回 Range 物件,該物件代表調整後的範圍。

  3. expression.Resize(RowSize, ColumnSize)
  4. expression     必選。該運算式傳回要調整大小的 Range 物件。

  5. RowSize     選擇性的 Variant。新範圍中所包含的列數。如果省略此引數,範圍中的列數保持不變。

  6. ColumnSize     選擇性的 Variant。新範圍中所包含的欄數。如果省略此引數,範圍中的欄數保持不變。

  7. 範例
  8. 此範例調整 Sheet1 中選擇範圍的大小,使之增加一列和一欄。

  9. Worksheets("Sheet1").Activate
  10. numRows = Selection.Rows.Count
  11. numColumns = Selection.Columns.Count
  12. Selection.Resize(numRows + 1, numColumns + 1).Select
  13.                
  14. 此範例假設在 Sheet1 中有一個包含標題列的表格。此範例選定該表格,但不選定標題列。執行此範例之前,現用儲存格必須處於該表格中。

  15. Set tbl = ActiveCell.CurrentRegion
  16. tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
  17.     tbl.Columns.Count).Select
複製代碼

作者: GBKEE    時間: 2011-7-16 07:38

回復 8# Happkkevin
UBound 函數   傳回 Long值,表示指定陣列某維最大可使用的陣列索引。
Dim A(1 To 100, 0 To 3, -3 To 4)   
陳述式 傳回值
UBound(A, 1) -> UBound(A) -> 100
UBound(A, 2)  ->3
UBound(A, 3)  ->4




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)