Nhập tự động dữ liệu từ file notepad sang Excel

Liên hệ QC

Trương Vô Kỵ

Thành viên mới
Tham gia
26/4/13
Bài viết
3
Được thích
0
Chào mọi người,
Đây là lần đầu tiên mình lên diễn đàn rất mong sự chỉ bảo của mọi người.
Việc là: mình chạy 1 cái thí nghiệm nó xuất kết quả dưới dạng file .txt. Có khoảng 1000 file như vậy. Mình phải copy từ mỗi file notepad đó 1 cột kết quả( các cột đó có cùng vị trí), cấu trúc các file notepad đó giống nhau, sang 1 file excel để sau đó vẽ biểu đồ. Nếu cứ mở các file notepad đó ra rồi copy thì phải làm 1000 lần, rất lâu.
Mọi người có thể chỉ cho mình cách làm ko cần phải mở file notepad đó ra mà vẫn copy các cột một cách tự động được ko?
Ví dụ: mình đính kèm 10 file txt mọi người giúp mình taọ 1 file excel có 10 cột, mỗi cột đó chính là các cột thứ ba trong file txt
Việc khá là gấp mong các cao thủ chỉ bảo
Cám ơn mọi người đã đọc bài
 

File đính kèm

  • New folder.rar
    577.1 KB · Đọc: 489
Chào mọi người,
Đây là lần đầu tiên mình lên diễn đàn rất mong sự chỉ bảo của mọi người.
Việc là: mình chạy 1 cái thí nghiệm nó xuất kết quả dưới dạng file .txt. Có khoảng 1000 file như vậy. Mình phải copy từ mỗi file notepad đó 1 cột kết quả( các cột đó có cùng vị trí), cấu trúc các file notepad đó giống nhau, sang 1 file excel để sau đó vẽ biểu đồ. Nếu cứ mở các file notepad đó ra rồi copy thì phải làm 1000 lần, rất lâu.
Mọi người có thể chỉ cho mình cách làm ko cần phải mở file notepad đó ra mà vẫn copy các cột một cách tự động được ko?
Ví dụ: mình đính kèm 10 file txt mọi người giúp mình taọ 1 file excel có 10 cột, mỗi cột đó chính là các cột thứ ba trong file txt
Việc khá là gấp mong các cao thủ chỉ bảo
Cám ơn mọi người đã đọc bài

Tức là mỗi file txt ta sẽ lấy cột 3 (tính từ dòng 3) rồi đưa vào 1 cột trên bảng tính ---> Vậy 1000 file txt sẽ tương ứng 1000 cột trên Excel, đúng không? Vậy chắc chắc phải dùng định dạng file Excel 2007 trở lên rồi?
Dùng thử code này xem:
Mã:
Sub Main()
  Dim vFile, txtFile, aCols, aRows, Arr
  Dim sAll As String, tmp As String
  Dim fso As Object
  Dim lR As Long, lC As Long, n As Long, t As Double
  On Error Resume Next
  vFile = Application.GetOpenFilename("Text Files, *.txt", , , , True)
  If TypeName(vFile) = "Variant()" Then
    t = Timer
    Set fso = CreateObject("Scripting.FileSystemObject")
    For Each txtFile In vFile
      With fso.OpenTextFile(txtFile, 1)
        sAll = .ReadAll
        .Close
      End With
      aRows = Split(sAll, vbCrLf)
      If Not IsArray(Arr) Then ReDim Arr(1 To UBound(aRows), 1 To UBound(vFile))
      lC = lC + 1: lR = 0
      For n = 2 To UBound(aRows)
        tmp = CStr(aRows(n))
        If Len(tmp) Then
          lR = lR + 1
          aCols = Split(tmp, vbTab)
          Arr(lR, lC) = aCols(2)
        End If
      Next
    Next
    Set fso = Nothing
    If lR Then
      Range("A1").Resize(lR, lC).Value = Arr
      MsgBox "Done!", , Format(Timer - t, "0.000000")
    End If
  End If
End Sub
Thí nghiệm thử vài chục file 1 lần cho chắc nha (vì không biết chạy 1 lần 1000 file có chậm lắm không?)
 
Vâng em dùng định dạng Excel 2007, cảm ơn anh/chú/bác đã rep nhanh cho. Tí nữa e sẽ chạy thử, chắc là ok, diễn đàn thật là hữu ích.
 
Anh ơi có 1 vấn đề nữa là em mới phải xứ lý dữ liệu nên vẫn chưa biết dùng macro hay VBA nên dù có đoạn code quý giá kia vẫn chưa thể nào dùng được. A giúp e chi tiết thêm 1 chút nữa nhá, còn e sẽ học cách hiểu đoạn code kia sau. Giả sử e có 1 file có 10 file txt như e đính kèm trên kia, để ngoài destop với tên New folder, a chỉ cho e tuần tự các bước chi tiết để ra được 1 file như e đã nói được ko? Vì e ko có ai để hỏi trực tiếp cả nên chỉ có thể nhờ mọi người ở đây.
Cảm ơn mọi người rất nhiều
 
Anh ơi có 1 vấn đề nữa là em mới phải xứ lý dữ liệu nên vẫn chưa biết dùng macro hay VBA nên dù có đoạn code quý giá kia vẫn chưa thể nào dùng được. A giúp e chi tiết thêm 1 chút nữa nhá, còn e sẽ học cách hiểu đoạn code kia sau. Giả sử e có 1 file có 10 file txt như e đính kèm trên kia, để ngoài destop với tên New folder, a chỉ cho e tuần tự các bước chi tiết để ra được 1 file như e đã nói được ko? Vì e ko có ai để hỏi trực tiếp cả nên chỉ có thể nhờ mọi người ở đây.
Cảm ơn mọi người rất nhiều

- Khởi động Excel
- Bấm Alt + F11 để vào cửa sổ lập trình
- Trong cửa sổ lập trình, vào menu Insert, chọn Module để chèn một Module
- Copy code ở trên và paste vào cửa sổ bên phải của Module vừa chèn
- Bấm Alt + Q trở về bảng tính
- Bấm Alt + F8 để gọi cửa sổ Macro
- Trong cửa sổ Macro, dùng chuột chọn chữ "Main" (chính là tên của code) rồi bấm nút Run
- Một cửa sổ Open Files hiện ra, bạn duyệt đến thư mục chứa file txt, xong, dùng chuột chọn file đầu, bấm giữ phím Shift rồi chọn file cuối ---> Enter 1 phát rồi.. chờ
- Khi nào MsgBox hiện ra tức là code đã chạy xong ---> Kiểm tra lại dữ liệu trên bảng tính xem kết quả đã đúng chưa
-----------------
Với file Excel này, bạn muốn dùng lâu dài thì phải lưu nó thành định dạng XLSM nhé (nếu lưu thành XLSX thì code sẽ bị mất sạch)
 
- Khởi động Excel
- Bấm Alt + F11 để vào cửa sổ lập trình
- Trong cửa sổ lập trình, vào menu Insert, chọn Module để chèn một Module
- Copy code ở trên và paste vào cửa sổ bên phải của Module vừa chèn
- Bấm Alt + Q trở về bảng tính
- Bấm Alt + F8 để gọi cửa sổ Macro
- Trong cửa sổ Macro, dùng chuột chọn chữ "Main" (chính là tên của code) rồi bấm nút Run
- Một cửa sổ Open Files hiện ra, bạn duyệt đến thư mục chứa file txt, xong, dùng chuột chọn file đầu, bấm giữ phím Shift rồi chọn file cuối ---> Enter 1 phát rồi.. chờ
- Khi nào MsgBox hiện ra tức là code đã chạy xong ---> Kiểm tra lại dữ liệu trên bảng tính xem kết quả đã đúng chưa
-----------------
Với file Excel này, bạn muốn dùng lâu dài thì phải lưu nó thành định dạng XLSM nhé (nếu lưu thành XLSX thì code sẽ bị mất sạch)
Quá hay luôn. Thầy ơi em muốn hỏi code này có chuyển được dữ liệu từ word sang excell được không ạ. Có càn phải sửa lại code không ạ?
 
chào mọi người!
Mình có vấn đề này nhưng không giải quyết được mong mọi người trợ giúp:
Vấn đề là: Mình làm file báo cáo bằng excel và file ecxel đó phải lấy dữ liệu từ rất nhiều file text có cùng định dạng. Nếu mở từng file text để nhập vào bảng excel thi rất lâu, trong file text chỉ cần lấy một phần thông số của 3 dòng cuối, mình có đính kèm file text và file excel. Rất mong sự trợ giúp của mọi người!
 

File đính kèm

  • test.rar
    37.8 KB · Đọc: 63
Tức là mỗi file txt ta sẽ lấy cột 3 (tính từ dòng 3) rồi đưa vào 1 cột trên bảng tính ---> Vậy 1000 file txt sẽ tương ứng 1000 cột trên Excel, đúng không? Vậy chắc chắc phải dùng định dạng file Excel 2007 trở lên rồi?
Dùng thử code này xem:
Mã:
Sub Main()
  Dim vFile, txtFile, aCols, aRows, Arr
  Dim sAll As String, tmp As String
  Dim fso As Object
  Dim lR As Long, lC As Long, n As Long, t As Double
  On Error Resume Next
  vFile = Application.GetOpenFilename("Text Files, *.txt", , , , True)
  If TypeName(vFile) = "Variant()" Then
    t = Timer
    Set fso = CreateObject("Scripting.FileSystemObject")
    For Each txtFile In vFile
      With fso.OpenTextFile(txtFile, 1)
        sAll = .ReadAll
        .Close
      End With
      aRows = Split(sAll, vbCrLf)
      If Not IsArray(Arr) Then ReDim Arr(1 To UBound(aRows), 1 To UBound(vFile))
      lC = lC + 1: lR = 0
      For n = 2 To UBound(aRows)
        tmp = CStr(aRows(n))
        If Len(tmp) Then
          lR = lR + 1
          aCols = Split(tmp, vbTab)
          Arr(lR, lC) = aCols(2)
        End If
      Next
    Next
    Set fso = Nothing
    If lR Then
      Range("A1").Resize(lR, lC).Value = Arr
      MsgBox "Done!", , Format(Timer - t, "0.000000")
    End If
  End If
End Sub
Thí nghiệm thử vài chục file 1 lần cho chắc nha (vì không biết chạy 1 lần 1000 file có chậm lắm không?)
thầy ơi e muốn lấy luôn cột thứ 2 thì phải làm sao ạ
 
Thưa các Thầy.
Em có một dự án nhỏ được giao như sau:
có 1 Phần mềm bên ngoài xuất ra file "Dữ liệu" đuôi ".xls" với nhiều nhiều file ứng với nhiều mốc thời gian khác nhau
Việc cần làm là nhập tự động cột A và B trong file "Dữ liệu" sang file Tổng hợp để có được số không cần can thiệp copy từ con người.
Rất mong các Thầy giúp đỡ.
Em cảm ơn trước ạ.
 

File đính kèm

  • Nhập dữ liệu.zip
    567 KB · Đọc: 36
Thưa các Thầy.
Em có một dự án nhỏ được giao như sau:
có 1 Phần mềm bên ngoài xuất ra file "Dữ liệu" đuôi ".xls" với nhiều nhiều file ứng với nhiều mốc thời gian khác nhau
Việc cần làm là nhập tự động cột A và B trong file "Dữ liệu" sang file Tổng hợp để có được số không cần can thiệp copy từ con người.
Rất mong các Thầy giúp đỡ.
Em cảm ơn trước ạ.
Chào Thannv,

Có vài ý với bạn như thế này.
1/ Lý do gì mà bạn đặt tên file là chữ tiếng Việt có dấu (theo quan điểm cá nhân tôi thì không nên).
2/ File "Dữ liệu" của bạn không phải có "đuôi" là .xls, mà đúng phải là .xml
(Bạn đã thay đổi nó thành .xls?)
3/ Bạn có thể tạo một topic riêng cho yêu cầu này của bạn vì topic này đã lâu và nó cũng hơi khác chút là không phải lấy dữ liệu từ Notepad.
 
Chào mọi người, cám ơn mọi người đã chia sẻ code để thực hiện chuyển dữ liệu từ file .txt sang excel, hiện mình đã đọc lại cả đoạn code và cố gắng hiểu (mình chưa từng học VBA :( ) để tìm cách chuyển đổi phù hợp với file txt của mình nhưng không thành công. Nay mình up file lên đây mong mọi người chỉ giúp mình cách chỉnh sửa lại code để đưa dữ liệu vào trong excel, mình có khá nhiều file txt với format giống nhau cần đưa vào excel. Mong mọi người đi qua biết vào chỉ bảo giúp mình, cám ơn.
 

File đính kèm

  • 86158549_0517_AU_1.txt
    798 bytes · Đọc: 30
  • mau chuyen du lieu.xlsx
    10.3 KB · Đọc: 35
Chào mọi người,
Em có 1 vấn đề cần nhờ giúp đỡ ạ?
Em có 1 file excel chứa 1 cột data dữ liệu là các cell barcode của hàng,
Em muốn tạo vba excel có mục đích: tự động copy từ data excel qua phần mềm quản lý hàng hóa của công ty?
Có làm được không ạ?
Em xin cảm ơn~
 
Mình cũng cùng vấn đề như bạn trên , có bác nào biêt cách giải quyết thì ra tay trợ giúp với ạ
các file text sẽ nằm trong 2 foder IN / Out dạng như file attached , minh muốn tự động copy dữ liệu trong file text vào exel theo các cột
thanks
 

File đính kèm

  • DATAINOUT.xlsx
    332.9 KB · Đọc: 46
  • 12677.txt
    6.3 KB · Đọc: 43
  • QVW0238-1.txt
    6.5 KB · Đọc: 38
Mình cũng cùng vấn đề như bạn trên , có bác nào biêt cách giải quyết thì ra tay trợ giúp với ạ
các file text sẽ nằm trong 2 foder IN / Out dạng như file attached , minh muốn tự động copy dữ liệu trong file text vào exel theo các cột
Cảm ơn
Bạn có tiêu chí nào để quy định file *.txt nào thì lấy dữ liệu vào Sheets("IN") hay Sheets("OUT") không?
 
Bạn có tiêu chí nào để quy định file *.txt nào thì lấy dữ liệu vào Sheets("IN") hay Sheets("OUT") không?
cảm ơn bạn đã view

về sheet IN mình sẽ lấy file text trong forder IN /sheet OUT mình sẽ lấy file text trong forder OUT

Trong forder IN/Out sẽ có nhieuf file text ( đc đặt tên theo DN , ví dụ với nhập 12677 / xuất Qvw...

Thanks
 
cảm ơn bạn đã view

về sheet IN mình sẽ lấy file text trong forder IN /sheet OUT mình sẽ lấy file text trong forder OUT

Trong forder IN/Out sẽ có nhieuf file text ( đc đặt tên theo DN , ví dụ với nhập 12677 / xuất Qvw...

Cảm ơn
Code này dùng cho Sheets("IN"):
PHP:
Public Sub ImportTxt_ToExcel()
    Dim Fso As Object, TextSource As Object, TotalLines, Item, Tmp
    Dim K As Long, I As Long, J As Long, sArr(1 To 500000, 1 To 4)
    
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Application.ScreenUpdating = False
    
    MsgBox "Chon File TXT Import" & Chr(10) & "(Co the chon Nhieu File de Import)"
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Filters.Add "TXT File", "*.txt", 1
        If Not .Show = -1 Then
            MsgBox "Ban chua chon File", vbInformation, "----Mr.GPE----"
            Exit Sub
        End If
    On Error Resume Next
    For Each Item In .SelectedItems
        Set TextSource = Fso.OpenTextFile(Item, 1, , -2)
            TotalLines = Split(TextSource.ReadAll, vbCrLf)
            
            For I = 0 To UBound(TotalLines)
                If Len(TotalLines(I)) Then
                Tmp = Split(TotalLines(I), ",")
                    K = K + 1: sArr(K, 1) = Tmp(7)
                    sArr(K, 2) = Tmp(6): sArr(K, 4) = Right(sArr(K, 1), 3)
                    sArr(K, 3) = DateSerial(Left(Tmp(0), 4), Mid(Tmp(0), 5, 2), Right(Tmp(0), 2))
                End If
            Next
    Next
    End With
    If K Then
        Sheet2.Range("A1").CurrentRegion.Offset(1).ClearContents
        Sheet2.Range("A2").Resize(K, 4).Value = sArr
    End If
    MsgBox "Done!"
    Application.ScreenUpdating = True
End Sub
Đối với Sheets("OUT") bạn chỉ cần sửa 1 chút là được.
 
Code này dùng cho Sheets("IN"):
PHP:
Public Sub ImportTxt_ToExcel()
    Dim Fso As Object, TextSource As Object, TotalLines, Item, Tmp
    Dim K As Long, I As Long, J As Long, sArr(1 To 500000, 1 To 4)
   
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Application.ScreenUpdating = False
   
    MsgBox "Chon File TXT Import" & Chr(10) & "(Co the chon Nhieu File de Import)"
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Filters.Add "TXT File", "*.txt", 1
        If Not .Show = -1 Then
            MsgBox "Ban chua chon File", vbInformation, "----Mr.GPE----"
            Exit Sub
        End If
    On Error Resume Next
    For Each Item In .SelectedItems
        Set TextSource = Fso.OpenTextFile(Item, 1, , -2)
            TotalLines = Split(TextSource.ReadAll, vbCrLf)
           
            For I = 0 To UBound(TotalLines)
                If Len(TotalLines(I)) Then
                Tmp = Split(TotalLines(I), ",")
                    K = K + 1: sArr(K, 1) = Tmp(7)
                    sArr(K, 2) = Tmp(6): sArr(K, 4) = Right(sArr(K, 1), 3)
                    sArr(K, 3) = DateSerial(Left(Tmp(0), 4), Mid(Tmp(0), 5, 2), Right(Tmp(0), 2))
                End If
            Next
    Next
    End With
    If K Then
        Sheet2.Range("A1").CurrentRegion.Offset(1).ClearContents
        Sheet2.Range("A2").Resize(K, 4).Value = sArr
    End If
    MsgBox "Done!"
    Application.ScreenUpdating = True
End Sub
Đối với Sheets("OUT") bạn chỉ cần sửa 1 chút là được.
Cảm ơn bạn rất nhiều , mình đã nhập được data auto
Bạn có thể viết giúp mình cho phần out được ko ạ ?
Đòng thời có 1 chút khó khăn về phần input data này :
File exel mình sẽ nhập các file data text liên tục , vì vậy sẽ bị ghi đè , mình muốn nhập nối tiếp được không bạn ? Bạn giúp mình case này nhé

thanks
 
Cảm ơn bạn rất nhiều , mình đã nhập được data auto
Bạn có thể viết giúp mình cho phần out được ko ạ ?
Đòng thời có 1 chút khó khăn về phần input data này :
File exel mình sẽ nhập các file data text liên tục , vì vậy sẽ bị ghi đè , mình muốn nhập nối tiếp được không bạn ? Bạn giúp mình case này nhé

Cảm ơn
Vẫn là code ở bài #17, bạn thêm 1 dòng khai báo biến.
PHP:
Dim lR as Long
Sửa lại đoạn sau:
Từ:
PHP:
If K Then
   Sheet2.Range("A1").CurrentRegion.Offset(1).ClearContents
   Sheet2.Range("A2").Resize(K, 4).Value = sArr
End If
Thành:
PHP:
If K Then
   lR=Sheet2.Range("A"&Rows.count).End(xlup).row+1
   Sheet2.Range("A"&lR).Resize(K, 4).Value = sArr
End If

Đối với Sheets("OUT") bạn làm cũng tương tự như vậy chỉ cần thay đổi sheet đầu ra cuối cùng từ Sheet2 thành Sheet31 là được.
 
Vẫn là code ở bài #17, bạn thêm 1 dòng khai báo biến.
PHP:
Dim lR as Long
Sửa lại đoạn sau:
Từ:
PHP:
If K Then
   Sheet2.Range("A1").CurrentRegion.Offset(1).ClearContents
   Sheet2.Range("A2").Resize(K, 4).Value = sArr
End If
Thành:
PHP:
If K Then
   lR=Sheet2.Range("A"&Rows.count).End(xlup).row+1
   Sheet2.Range("A"&lR).Resize(K, 4).Value = sArr
End If

Đối với Sheets("OUT") bạn làm cũng tương tự như vậy chỉ cần thay đổi sheet đầu ra cuối cùng từ Sheet2 thành Sheet31 là được.

Dear bạn

cảm ơn b , tớ giải quyết được vấn đề cho sheet IN rồi

Tuy nhiên còn sheet OUt tớ ko hiểu lắm , bạn giải thích giúp t được ko ?

Đồng thời , với file text xuất , định dạng các cột trong file ko giống so với file text IN , nên theo tớ nghĩ code cho OUT sẽ khác chứ bạn ?

thank for support
 
Web KT
Back
Top Bottom