Nhập tự động dữ liệu từ file notepad sang Excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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

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

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

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
 
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
Code cho bạn:
PHP:
Public Sub ImportTxt_ToExcel_sheetOut()
    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), lR As Long
    
    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(3): 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
        lR = Sheet31.Range("A" & Rows.Count).End(xlUp).Row + 1
        Sheet31.Range("A" & lR).Resize(K, 4).Value = sArr
    End If
    MsgBox "Done!"
    Application.ScreenUpdating = True
End Sub
 
Code cho bạn:
PHP:
Public Sub ImportTxt_ToExcel_sheetOut()
    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), lR As Long
   
    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(3): 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
        lR = Sheet31.Range("A" & Rows.Count).End(xlUp).Row + 1
        Sheet31.Range("A" & lR).Resize(K, 4).Value = sArr
    End If
    MsgBox "Done!"
    Application.ScreenUpdating = True
End Sub

Thank you very much , bro

Have a nice day
 
Cảm ơn bạn đã nhắc nhở

Mình xin rút kinh nghiệm

Mình còn chút thắc mắc bạn hướng dẫn giúp minhg nhé :

_ mình muốn trích xuát thêm nhiều thông tin tu file text vào file exel ( ko chỉ có 4 cột như file exel đã làm ) thì mình cần chỉnh trong code như thế nào ?

Bạn hướng dẫn đc ko ?
 
Cảm ơn bạn đã nhắc nhở

Mình xin rút kinh nghiệm

Mình còn chút thắc mắc bạn hướng dẫn giúp minhg nhé :

_ mình muốn trích xuát thêm nhiều thông tin tu file text vào file exel ( ko chỉ có 4 cột như file exel đã làm ) thì mình cần chỉnh trong code như thế nào ?

Bạn hướng dẫn đc ko ?
Bạn không nói rõ là thêm các thông tin nào thì không thể giúp được.
Nếu có thông tin rồi thì bạn có biết về VBA không? Nếu bạn biết thì chắc tôi sẽ hướng dẫn được.
 
Chào mọi người!
Mình là dân mới tập tọe, m đang có phần chạy nhập SL, nhưng hiện đang làm rất thủ công. Mình muốn nhờ mọi người giúp mình đưa file notepad vào excel theo mẫu m đã gửi. Với mỗi một file notepad thì tương ứng với một sheet đã được đặt tên tương ứng trong excel. Vì m có rất nhiều file notepad cần phải đưa vào để chạy chương trình. Xin cảm ơn và mong hồi âm của mọi người ạ
 

File đính kèm

Thân chào các anh chị trên diễn đàn!

Em muốn copy dữ liệu từ nhiều file (khoảng 20 file mỗi lần ạ) xxx.log vào cột A của file excel với điều kiện như sau:
1. chỉ copy những dòng có dòng chữ: link-down Blocking (như em bôi đỏ trong file kết quả mong muốn cho dễ nhìn ấy ạ)
2. Hết mỗi file đến file khác thì để 1 dòng để tên của cái file log ạ, mục đích là phân ra để dễ check cái file nay ạ (như dòng 1 và dòng 48 ạ)
Nhờ các anh chị xem file em đính kèm và giúp đỡ ạ.

Em cảm ơn.
 

File đính kèm

Lần chỉnh sửa cuối:
.
Không ai làm thế cả. Sai chuẩn cấu trúc dữ liệu rồi.

Chí ít thế này.

View attachment 270861

Phần nội dung ở cột B lý ra phải tách ra vài cột nữa.
Dạ, như file anh/chị gửi cũng được ạ (vì phần nội dung đó có người khác làm cái cấu trúc nó có thể không giống vầy ạ, phần thời gian đầu mỗi dòng ko có ạ, nên không biết là có tách được ko ạ).
Em chỉ mong check được cái port nào bị: link-down Blocking la được ạ.
Em cảm ơn ạ.
 
Lần chỉnh sửa cuối:
Thân chào các anh chị trên diễn đàn!

Em muốn copy dữ liệu từ nhiều file (khoảng 20 file mỗi lần ạ) xxx.log vào cột A của file excel với điều kiện như sau:
1. chỉ copy những dòng có dòng chữ: link-down Blocking (như em bôi đỏ trong file kết quả mong muốn cho dễ nhìn ấy ạ)
2. Hết mỗi file đến file khác thì để 1 dòng để tên của cái file log ạ, mục đích là phân ra để dễ check cái file nay ạ (như dòng 1 và dòng 48 ạ)
Nhờ các anh chị xem file em đính kèm và giúp đỡ ạ.

Em cảm ơn.
Bạn thử code này:
Mã:
Sub FilterTextFiles()
Const sPattern As String = "*link-down  Blocking*"
Dim i As Long, k As Long, FileNum As Long, sLine As String, bCheck As Boolean
Dim aResult(1 To 100000, 1 To 1)
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Filters.Clear
    .Filters.Add "Log files", "*.log"
    If .Show Then
        For i = 1 To .SelectedItems.Count
            FileNum = FreeFile()
            Open .SelectedItems(i) For Input As #FileNum
            bCheck = False
            Do While Not EOF(FileNum)
                Line Input #FileNum, sLine
                If sLine Like sPattern Then
                    If Not bCheck Then
                        bCheck = True
                        k = k + 1
                        aResult(k, 1) = Mid(.SelectedItems(i), InStrRev(.SelectedItems(i), "\") + 1)
                    End If
                    k = k + 1
                    aResult(k, 1) = sLine
                End If
            Loop
            Close FileNum
        Next
    End If
End With
Range("A1:A" & Range("A100000").End(xlUp).Row).ClearContents
If k > 0 Then Range("A1:A" & k).Value = aResult
End Sub
 
Bạn thử code này:
Mã:
Sub FilterTextFiles()
Const sPattern As String = "*link-down  Blocking*"
Dim i As Long, k As Long, FileNum As Long, sLine As String, bCheck As Boolean
Dim aResult(1 To 100000, 1 To 1)
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Filters.Clear
    .Filters.Add "Log files", "*.log"
    If .Show Then
        For i = 1 To .SelectedItems.Count
            FileNum = FreeFile()
            Open .SelectedItems(i) For Input As #FileNum
            bCheck = False
            Do While Not EOF(FileNum)
                Line Input #FileNum, sLine
                If sLine Like sPattern Then
                    If Not bCheck Then
                        bCheck = True
                        k = k + 1
                        aResult(k, 1) = Mid(.SelectedItems(i), InStrRev(.SelectedItems(i), "\") + 1)
                    End If
                    k = k + 1
                    aResult(k, 1) = sLine
                End If
            Loop
            Close FileNum
        Next
    End If
End With
Range("A1:A" & Range("A100000").End(xlUp).Row).ClearContents
If k > 0 Then Range("A1:A" & k).Value = aResult
End Sub
Code chạy được rồi ạ, em cảm ơn ạ.
 
Kính chào các Thầy cô và các anh chị,
Chúc mọi người đầu năm May Mắn - Manh Khỏe - Phát Tài - Phát Lộc - Gia Đình Bình An

Em có việc cần mọi người giup
Hàng ngày em lấy dữ liệu từ các file txt do chường tình xuất ra rất nhiều ngày (15-20 ngày), nên khi tìm dữ liệu ngày nào thì phải mở file ngày đó lên và tìm sau đó paste vào excel (tổng)
nên e cần làm 20 file txt bỏ và 1 folder sau đó mở 1 file excel new chạy VBA tất cả 20 txt sẻ được bỏ vào đậy (lây luôn cả tiêu đề)
vd: file thứ nhât (D:\test.txt) có 3 dòng 3 cột thì khi chép vào file excel (new) là
côt A1, A2, A3 điều ghi là D:\test.txt và các dữ liêu sẽ được chép vào cột B trở đi
.dong A4 là file kế tiếp thực hiện như trên cho đến file cuối cùng.

Nhờ các Thầy cô và các anh chị em giúp đỡ, e xin cảm ơn rất nhiều.
 

File đính kèm

Kính chào các Thầy cô và các anh chị,
Chúc mọi người đầu năm May Mắn - Manh Khỏe - Phát Tài - Phát Lộc - Gia Đình Bình An

Em có việc cần mọi người giup
Hàng ngày em lấy dữ liệu từ các file txt do chường tình xuất ra rất nhiều ngày (15-20 ngày), nên khi tìm dữ liệu ngày nào thì phải mở file ngày đó lên và tìm sau đó paste vào excel (tổng)
nên e cần làm 20 file txt bỏ và 1 folder sau đó mở 1 file excel new chạy VBA tất cả 20 txt sẻ được bỏ vào đậy (lây luôn cả tiêu đề)
vd: file thứ nhât (D:\test.txt) có 3 dòng 3 cột thì khi chép vào file excel (new) là
côt A1, A2, A3 điều ghi là D:\test.txt và các dữ liêu sẽ được chép vào cột B trở đi
.dong A4 là file kế tiếp thực hiện như trên cho đến file cuối cùng.

Nhờ các Thầy cô và các anh chị em giúp đỡ, e xin cảm ơn rất nhiều.

Chào các anh chị em, sau thời gian mò mẵm sao chép (ăn cắp hihihi) trên mạng, tuy không đúng theo yêu cầu, nhưng cũng đáp ứng được công việc của e, nên e xin phép đưa lên, để mọi người tham khảo.
Ghi chú: chỉ áp cho file txt ko có dấu thôi, vì có dấu nó sẽ bị lỗi font.
 

File đính kèm

Chào các anh chị em, sau thời gian mò mẵm sao chép (ăn cắp hihihi) trên mạng, tuy không đúng theo yêu cầu, nhưng cũng đáp ứng được công việc của e, nên e xin phép đưa lên, để mọi người tham khảo.
Ghi chú: chỉ áp cho file txt ko có dấu thôi, vì có dấu nó sẽ bị lỗi font.
Bác đã lấy được dữ liệu rồi có thể dùng chức năng text to column để tách ra theo ý mình hoặc có thể xử lí thêm để đạt được mong muốn của bản thân là được
 
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 cho e hỏi e muốn nhập dữ liệu từ file txt chuyển sang file excel vào các cột và dòng theo ý mình thì có làm được không ạ
 

Bài viết mới nhất

Back
Top Bottom