標題:
[發問]
如何取出文字檔指定行的資料
[打印本頁]
作者:
luke
時間:
2013-3-27 22:00
標題:
如何取出文字檔指定行的資料
各位先進
執行目錄下有很多的資料夾, 若只想取出文字檔中的第1-3行資料, VBA該如何寫?
如附檔說明
[attach]14470[/attach]
煩請先進指導, 謝謝!
作者:
GBKEE
時間:
2013-3-28 16:24
回復
1#
luke
試試看
Option Explicit
Sub Ex()
Dim S As Object, F As Object, AR, I As Integer
Application.ScreenUpdating = False
'ScreenUpdating
'如果螢幕更新功能是開啟的則為 True。讀/寫 Boolean。
'關閉螢幕更新可加快巨集的執行速度。這樣將看不到巨集的執行程序,但巨集的執行速度加快了。
'請注意,當巨集結束時,設定的ScreenUpdating 屬性會傳回 True。
With CreateObject("Scripting.FileSystemObject").GETFolder(ThisWorkbook.Path)
'FileSystemObject 物件 描述 提供對電腦檔案系統的存取。
I = 2 '第二列開始
For Each S In .SubFolders
'SubFolders 屬性 描述 傳回包含所有資料夾的一個 Folders 集合物件,這些資料夾包含在某個特定的資料夾中,包括設定了隱藏和系統檔屬性的那些資料夾。
For Each F In S.Files
'Files 集合物件 描述 在一個資料夾內的所有 File 物件的集合物件。
With Workbooks.Open(F)
AR = .Sheets(1).[A1:A3]
.Close 0 '檔案關閉 不存檔
End With
'***Cells 沒指定工作表->作用中的工作表
Cells(I, "A") = S.Name '資料夾名稱
Cells(I, "G").Resize(1, 3) = Application.WorksheetFunction.Transpose(AR)
'TRANSPOSE 語法 TRANSPOSE(array)
'Array 是工作表或巨集表中您所要轉置的矩陣。陣列的轉置是以 陣列的第一列作為新陣列的第一欄,而陣列的第 2 列則為新陣列的第 2 欄,依此類推。
I = I + 1 '第二列開始 往下加一列
Next
Next
With Range("G:I") '***Range 沒指定工作表->作用中的工作表
.Cells.Replace ";", "", LookAt:=xlPart 'Replace:替換字串
.EntireColumn.AutoFit
End With
End With
Application.ScreenUpdating= True
'當巨集結束時,設定的ScreenUpdating 屬性會傳回 True。
End Sub
複製代碼
作者:
luke
時間:
2013-3-28 19:44
回復
2#
GBKEE
謝謝超版答覆
當資料夾內有其他檔案格式如「0001112」資料夾有*.log或*.txt檔
如何只篩選出csv檔如附件說明
[attach]14477[/attach]
[attach]14478[/attach]
作者:
GBKEE
時間:
2013-3-28 20:02
回復
3#
luke
Option Explicit
Sub Ex()
Dim S As Object, F As Object, AR, I As Integer
Application.ScreenUpdating = False
'ScreenUpdating
'如果螢幕更新功能是開啟的則為 True。讀/寫 Boolean。
'關閉螢幕更新可加快巨集的執行速度。這樣將看不到巨集的執行程序,但巨集的執行速度加快了。
'請注意,當巨集結束時,設定的ScreenUpdating 屬性會傳回 True。
With CreateObject("Scripting.FileSystemObject").GETFolder(ThisWorkbook.Path)
'FileSystemObject 物件 描述 提供對電腦檔案系統的存取。
I = 2 '第二列開始
For Each S In .SubFolders
'SubFolders 屬性 描述 傳回包含所有資料夾的一個 Folders 集合物件,這些資料夾包含在某個特定的資料夾中,包括設定了隱藏和系統檔屬性的那些資料夾。
For Each F In S.Files
'Files 集合物件 描述 在一個資料夾內的所有 File 物件的集合物件。
If UCase(F) Like "*.CSV" Then '檔名(大寫)有 "*.CSV"
'Like 運算子 用來比較兩個字串
With Workbooks.Open(F)
AR = .Sheets(1).[A1:A3]
.Close 0 '檔案關閉 不存檔
End With
'***Cells 沒指定工作表->作用中的工作表
Cells(I, "A") = S.Name '資料夾名稱
Cells(I, "G").Resize(1, 3) = Application.WorksheetFunction.Transpose(AR)
'TRANSPOSE 語法 TRANSPOSE(array)
'Array 是工作表或巨集表中您所要轉置的矩陣。陣列的轉置是以 陣列的第一列作為新陣列的第一欄,而陣列的第 2 列則為新陣列的第 2 欄,依此類推。
I = I + 1 '第二列開始 往下加一列
End If
Next
Next
With Range("G:I") '***Range 沒指定工作表->作用中的工作表
.Cells.Replace ";", "", LookAt:=xlPart 'Replace:替換字串
.EntireColumn.AutoFit
End With
End With
Application.ScreenUpdating = True
'當巨集結束時,設定的ScreenUpdating 屬性會傳回 True。
End Sub
複製代碼
作者:
luke
時間:
2013-3-29 12:00
回復
4#
GBKEE
謝謝超版回覆
假如取文字檔中非連續的第1行, 第3行和第5行
應如何修改AR = .Sheets(1).[A1:A3]語法
作者:
GBKEE
時間:
2013-3-29 12:09
回復
5#
luke
Dim AR(1 To 3)
''
''
''
AR(1) = .Sheets(1).[A1]
AR(2) = .Sheets(1).[A3]
AR(3) = .Sheets(1).[A5]
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)