標題:
合併多個工作表內資料於新增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
Sub nn()
Dim iI%, iRowEnd%, iTarRow%
Dim sGroup$
Dim vMer
Set vMer = Sheets("合併")
iTarRow = 2
For iI = 1 To Sheets.Count
With Sheets(iI)
If .Name <> vMer.Name Then
sGroup = .Name
iRowEnd = .Cells(Rows.Count, 1).End(xlUp).Row
.Range(.Cells(2, 1), .Cells(iRowEnd, 2)).Copy
With vMer
.Paste Destination:=.Cells(iTarRow, 1)
.Cells(iRowEnd + iTarRow - 2, 3) = sGroup
.Range(.Cells(iTarRow, 3), .Cells(iRowEnd + iTarRow - 2, 3)).FillUp
End With
iTarRow = iRowEnd + iTarRow - 1
End If
End With
Next iI
End Sub
複製代碼
作者:
Happkkevin
時間:
2011-7-5 23:59
感謝luhpro的協助,測試符合需求
正在研究您的語法應用於需求中,
但以我的功力與時間,還需要一些時間,若有問題再向您討教
相信一定能功能大增,感恩
作者:
GBKEE
時間:
2011-7-6 08:52
簡化一下
Sub Ex()
Dim Sh As Worksheet, i%, iRowEnd%, Ar()
With Sheets("合併")
.Move Sheets(1) '工作表移到最前面
.UsedRange.Offset(1).ClearContents '使用範圍第2列開始清除
For i = 2 To Sheets.Count '工作表索引2開始的迴圈
iRowEnd = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
Ar = Sheets(i).Range("A2:B" & iRowEnd).Value '取得資料
.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(Ar), 2) = Ar '置入資料
.Range("C" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(Ar), 1) = Sheets(i).Name '置入工作表名稱
Next
End With
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)的含義與用法為何?
Resize 屬性
請參閱請參閱請參閱請參閱調整指定的範圍。傳回 Range 物件,該物件代表調整後的範圍。
expression.Resize(RowSize, ColumnSize)
expression 必選。該運算式傳回要調整大小的 Range 物件。
RowSize 選擇性的 Variant。新範圍中所包含的列數。如果省略此引數,範圍中的列數保持不變。
ColumnSize 選擇性的 Variant。新範圍中所包含的欄數。如果省略此引數,範圍中的欄數保持不變。
範例
此範例調整 Sheet1 中選擇範圍的大小,使之增加一列和一欄。
Worksheets("Sheet1").Activate
numRows = Selection.Rows.Count
numColumns = Selection.Columns.Count
Selection.Resize(numRows + 1, numColumns + 1).Select
此範例假設在 Sheet1 中有一個包含標題列的表格。此範例選定該表格,但不選定標題列。執行此範例之前,現用儲存格必須處於該表格中。
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
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/)