Sau khi được sự trợ giúp của mọi người ở bài #1 tôi đã hoàn thành được bước một công việc của mình.
Để khỏi loãng topic tôi xin gửi lên đây dữ liệu tiếp theo mà trước đó thầy siwtom và bạn hungpecc1 đã giúp tôi hoàn thành
Vì dữ liệu lần này lớn hơn nên tôi chỉ lấy ID của 4 trạm "<!bth1;<!bth2;<!bth3;<!cdc1;".
Yêu cầu lọc dữ liệu như sau:
1.Thống kê bằng excel ở cột bên cạnh trạm bth1,bth2... có bao nhiêu số thuê bao?
2.Thống kê có bao nhiêu dịch vụ tbo-1 và tbo-2 ở trong trạm đó.
Mong mọi người hướng dẫn và trợ giúp. Xin cảm ơn.
Sau đây là file đính kèm:
Bài này cấu trúc dữ liệu là hoàn toàn khác bài trước, đúng không?
Lần sau bạn nhớ miêu tả dữ liệu. Mình nói vài câu thì người khác không phải đoán, chỉ làm mà không cần suy nghĩ.
Bạn nói: tính số thuê bao. Vậy dữ liệu của mỗi thuê bao bắt đầu bằng cái gì và kết thúc bằng gì? Mỗi trạm bắt đầu bằng gì và kết thúc bằng gì?
Tôi làm với cách hiểu như sau:
1. Mỗi trạm, trừ trạm cuối, bắt đầu bằng <!xyz; và kết thúc khi gặp <!xyz; tiếp theo. Trạm cuối bắt đầu bằng <!xyz; và kết thúc khi dữ liệu kết thúc
2. Trong mỗi trạm thì mỗi thuê bao bắt đầu bằng <suscp:snb= và kết thúc bằng END
---------------
Bạn hãy kiểm tra lại. Code trả về 16 kết quả (A2

!bth1; Thuê bao 1980
!bth2; Thuê bao 1789
code trả về
!bth1; Thuê bao 1982
!bth2; Thuê bao 1795
Tôi ngại kiểm tra quá
Mã:
Sub DoSomething()
Dim fso As Object, re As Object, Match As Object, oMatches As Object
Dim FileName, Arr(), i As Long, s As String
FileName = Application.GetOpenFilename()
If FileName <> "False" Then
Set fso = CreateObject("Scripting.FileSystemObject")
With fso.OpenTextFile(FileName)
s = .ReadAll
.Close
End With
Set fso = Nothing
Set re = CreateObject("VBScript.RegExp")
With re
.Global = True
.Pattern = "<(!.+;)(?:\n|.)+?(?=(?:<!.+;|$))"
Set Match = .Execute(s)
If Not Match Is Nothing Then
ReDim Arr(1 To Match.count, 1 To 4)
For i = 0 To Match.count - 1
Arr(i + 1, 1) = Match(i).SubMatches(0)
.Pattern = "\d{9}\s"
Set oMatches = .Execute(Match(i))
If Not oMatches Is Nothing Then Arr(i + 1, 2) = oMatches.count
.Pattern = "\sTBO-1\s"
Set oMatches = .Execute(Match(i))
If Not oMatches Is Nothing Then Arr(i + 1, 3) = oMatches.count
.Pattern = "\sTBO-2\s"
Set oMatches = .Execute(Match(i))
If Not oMatches Is Nothing Then Arr(i + 1, 4) = oMatches.count
Next
[A2].Resize(UBound(Arr), 4) = Arr
End If
End With
End If
End Sub
File đính kèm
Lần chỉnh sửa cuối: