標題:
[發問]
如何在多個excel檔中找出資料,然後在同一個檔中排序
[打印本頁]
作者:
eternal001
時間:
2011-8-1 20:49
標題:
如何在多個excel檔中找出資料,然後在同一個檔中排序
本帖最後由 eternal001 於 2011-8-1 20:57 編輯
假設有很多個excel檔
[attach]7232[/attach][attach]7233[/attach]
要在另一個檔案中找到這些檔案的總平均
每一個檔中
他們擁有的科目不一定一樣多
只是最後都會有一個總平均值
他們的名字就是檔名
然後在另一個檔排序他們的名次
[attach]7234[/attach]
因為資料有上千筆
所以不知要怎麼去抓資料排序
請高手幫忙解答
作者:
luhpro
時間:
2011-8-1 23:00
本帖最後由 luhpro 於 2011-8-1 23:01 編輯
回復
1#
eternal001
Private Sub cbLoad_Click()
Dim lRow As Long, lCount As Long
Dim sPath$, sFName$, sName$, sTheName$
Dim bTranFile As Boolean
Dim vSou
sPath = ThisWorkbook.Path ' 指定路徑為本檔案所在的的目錄
bTranFile = False ' 紀錄是否有讀到檔案
With Me ' 本 Sheet 即 Sheet1
.Cells.Clear ' 清資料
.Cells(1, 1) = "排名" ' 標題
.Cells(1, 2) = "人名"
.Cells(1, 3) = "總分"
lRow = 2 ' 從第二列開始放資料
lCount = 0 ' 讀取資料檔案數量
sTheName = Me.Parent.Name ' 本檔案的目錄
sFName = Dir(sPath & "\*.xls") ' 找尋第一個Excel檔案
Do While sFName <> "" ' 執行迴圈。
If sFName <> sTheName Then ' 跳過本檔案
bTranFile = True
sName = Left(sFName, Len(sFName) - 4) ' 截取人名
sFName = sPath & "\" & sFName ' 檔案全名
Workbooks.Open Filename:=sFName, ReadOnly:=True ' 開檔
Set vSou = ActiveWorkbook.Sheets(1) '設定 Sheet(1) 物件給 vSou
Workbooks(sTheName).Activate ' 焦點切回原Sheet
.Cells(lRow, 1) = lRow - 1 ' 排名
.Cells(lRow, 2) = sName '人名
.Cells(lRow, 3) = Round(vSou.Cells(vSou.Cells(1, 1). _
CurrentRegion.Find("總平均").Row, 2)) '總分
lRow = lRow + 1 ' 列號 + 1
lCount = lCount + 1 ' 讀取檔案數 + 1
End If
If sFName <> sTheName Then Workbooks(sName & ".xls").Close ' 關閉本檔案以外開啟的檔案
sFName = Dir ' 尋找下一個檔案
Loop
.Range(.Cells(2, 2), .Cells(lRow, 3)).Sort Key1:=.Cells(1, 3), order1:=xlDescending ' 以總分為鍵值做排序
End With
If Not bTranFile Then
MsgBox ("找不到任何資料檔案...")
Exit Sub
Else
MsgBox ("資料讀取完成, 共讀取 " & lCount & " 個檔案...")
Exit Sub
End If
End Sub
複製代碼
[attach]7241[/attach]
作者:
GBKEE
時間:
2011-8-2 17:09
回復
2#
luhpro
修改你的程序請參考參考
Sub Ex()
Dim Ar(), S As Integer, sPath As String, sFName As String
ReDim Ar(1, S)
sPath = ThisWorkbook.Path ' 指定路徑為本檔案所在的的目錄
sFName = Dir(sPath & "\*.xls") ' 找尋第一個Excel檔案
Do While sFName <> "" ' 執行迴圈。
If sFName <> ThisWorkbook.Name Then ' 開啟本檔案以外的檔案
ReDim Preserve Ar(1, S)
With Workbooks.Open(sPath & "\" & sFName) ' 開檔
With .Sheets(1).Cells.Find("總平均")
Ar(0, S) = Mid(sFName, 1, InStrRev(sFName, ".") - 1)
Ar(1, S) = Cells(1, 2)
End With
.Close
End With
S = S + 1
End If
sFName = Dir ' 尋找下一個檔案
Loop
Range("A:C") = ""
Range("A1:C1") = Array("排名", "人名", "總平均")
Range("B2").Resize(S, 2) = Ar
Range("A1").CurrentRegion.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlYes
With Range("A2:A" & Range("B2").End(xlDown).Row)
.Value = "ROW()-1"
.Value = .Value
End With
If S = 0 Then
MsgBox ("找不到任何資料檔案...")
Else
MsgBox ("資料讀取完成, 共讀取 " & S - 1 & " 個檔案...")
End If
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)