tranminhnguyet98
Thành viên mới

- Tham gia
- 13/3/20
- Bài viết
- 10
- Được thích
- 0
Góp ý cho bạn:em có cột "nội dung" và cần lọc ra các số, đơn vị tính giống như cột " Thông tin cần lấy"
Các cao nhân chỉ giáo giúp em cách làm với ạ,
Đa tạ đa tạ!
dạ cảm ơn bác, em xin đính kèm file ngay ạ!Góp ý cho bạn:
1/ Nhờ giúp thì nên đính kèm File chứ không ai lại đưa cái hình lên thì giúp bằng niềm tin à.
2/ Cấu trúc File không hợp lý: Nên có cột địa bàn (phường, quận), kích thước, diện tích, giá để tra cứu nhanh theo yêu cầu của khách hàng.
Cái File loạn cào cào thế này mà bài 1 bạn chỉ đưa mỗi cái hình tôi cũng bó tay với cách hỏi của bạn luôn.dạ cảm ơn bác, em xin đính kèm file ngay ạ!
Hiện tại em đã tìm thấy một số dấu hiệu có thể tách, tuy nhiên còn đang kém VBA, nên mong được các bác giúp đỡ ạ!
em cũng có tìm một số tính chất như thế này ạCái File loạn cào cào thế này mà bài 1 bạn chỉ đưa mỗi cái hình tôi cũng bó tay với cách hỏi của bạn luôn.
Góp ý thêm cho bạn:
1/ File này hình như được xuất từ phần mềm ra, nhưng cách nhập liệu không có một trình tự nhất định dẫn đến khó phân tích dữ liệu.
2/ File này có hơn 34 ngàn dòng nếu sử dụng hàm thì kham không nổi, với VBA thì cũng rất khó vì nó không có một quy luật nào cả nên cũng khó sơi. Trong một số Cell lại đến 2 diện tích (như hình) thì muốn lấy cái nào hay lấy cả hai?
3/ Tôi cũng có thể làm được nhưng phải thêm một thời gian nữa vì phải nghiên cứu để nắm được quy tắc.
4/ Bạn chờ các thành viên khác xem có giúp được không hoặc có ý kiến gì khác không?
View attachment 234774
View attachment 234775
Đây là hình thức Data Mining. Phần mềm cào lấy dữ liệu đổ về một file csv/excel. Người sử dụng mò lấy tin tức cần thiết.Cái File loạn cào cào thế này mà bài 1 bạn chỉ đưa mỗi cái hình tôi cũng bó tay với cách hỏi của bạn luôn.
Góp ý thêm cho bạn:
1/ File này hình như được xuất từ phần mềm ra, nhưng cách nhập liệu không có một trình tự nhất định dẫn đến khó phân tích dữ liệu.
...
Sub tach_dulieu()
Dim I, J, Pos, Lrow, Dai As Long
Dim Text As String
Lrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
For I = 1 To Lrow
If InStr(1, Cells(I, 1), ",") Then
Cells(I, 1) = Replace(Cells(I, 1).Value, ",", " ")
End If
If InStr(1, Cells(I, 1), "=") Then
Cells(I, 1) = Replace(Cells(I, 1).Value, "=", " ")
End If
If InStr(1, Cells(I, 1), ".") Then
Cells(I, 1) = Replace(Cells(I, 1).Value, ".", " ")
End If
If InStr(1, Cells(I, 1), "M2") Then
Cells(I, 1) = Replace(Cells(I, 1).Value, "M2", "m2")
End If
Cells(2, 3) = I & "/" & Lrow
Next
For I = 2 To Lrow
If InStr(1, Cells(I, 1), "m2") Then
Pos = InStr(1, Cells(I, 1), "m2") 'vi tri co "m2"
Dai = Len(Cells(I, 1))
For J = Pos To 1 Step -1
If Mid(Cells(I, 1), J, 1) = " " Then
For k = Pos To Dai Step 1
If Mid(Cells(I, 1), k, 1) = " " Then
Cells(I, 2) = Mid(Cells(I, 1), J + 1, k - J - 1)
Exit For
End If
If Pos + 1 = Dai Then
Cells(I, 2) = Right(Cells(I, 1), Dai - J)
Exit For
End If
Next
Exit For
Else
For k = Pos To Dai Step 1
If Mid(Cells(I, 1), k, 1) = " " Then
Cells(I, 2) = Left(Cells(I, 1), k - 1)
Exit For
End If
Next
End If
Next
Else
Cells(I, 2) = "-"
End If
Cells(2, 4) = I & "/" & Lrow
Cells(2, 5) = I / Lrow
Next
With ActiveSheet.Range("A2:B" & Lrow)
.ClearFormats
End With
End Sub
Cảm ơn gợi ý của anh ạ, em cũng đang mò thêm code python xem sao ạ!Đây là hình thức Data Mining. Phần mềm cào lấy dữ liệu đổ về một file csv/excel. Người sử dụng mò lấy tin tức cần thiết.
Cái này là công việc của các ngôn ngữ chuyên duyệt chuỗi (điển hình Grep hay Perl của Unix). Bảo VBA làm thì có hơi miễn cưỡng.
Về sau này, những ngôn ngữ thông dụng và có nhiều thư viện phổ biến như Python cũng tiện cho công việc này.
Em cảm ơn anh nhiều ạ, công nhận là dữ liệu lớn và đa dạng khó có thể xử lý được 100%, nhiều cái em cũng chấp nhận bỏ hoặc dùng AI cơm thôi ạBài này e có thấy bạn đăng trên Facebook, nhưng mà nói thật là dữ liệu loạn như vầy thì làm khó người lấy quá. Thay vì trả lời trên đó thì e đem lên đây thảo luận luôn. Đoạn code này chỉ lấy được từ nào có chữ "M2" hoặc "m2" thôi ạ.
Mã:Sub tach_dulieu() Dim I, J, Pos, Lrow, Dai As Long Dim Text As String Lrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row For I = 1 To Lrow If InStr(1, Cells(I, 1), ",") Then Cells(I, 1) = Replace(Cells(I, 1).Value, ",", " ") End If If InStr(1, Cells(I, 1), "=") Then Cells(I, 1) = Replace(Cells(I, 1).Value, "=", " ") End If If InStr(1, Cells(I, 1), ".") Then Cells(I, 1) = Replace(Cells(I, 1).Value, ".", " ") End If If InStr(1, Cells(I, 1), "M2") Then Cells(I, 1) = Replace(Cells(I, 1).Value, "M2", "m2") End If Cells(2, 3) = I & "/" & Lrow Next For I = 2 To Lrow If InStr(1, Cells(I, 1), "m2") Then Pos = InStr(1, Cells(I, 1), "m2") 'vi tri co "m2" Dai = Len(Cells(I, 1)) For J = Pos To 1 Step -1 If Mid(Cells(I, 1), J, 1) = " " Then For k = Pos To Dai Step 1 If Mid(Cells(I, 1), k, 1) = " " Then Cells(I, 2) = Mid(Cells(I, 1), J + 1, k - J - 1) Exit For End If If Pos + 1 = Dai Then Cells(I, 2) = Right(Cells(I, 1), Dai - J) Exit For End If Next Exit For Else For k = Pos To Dai Step 1 If Mid(Cells(I, 1), k, 1) = " " Then Cells(I, 2) = Left(Cells(I, 1), k - 1) Exit For End If Next End If Next Else Cells(I, 2) = "-" End If Cells(2, 4) = I & "/" & Lrow Cells(2, 5) = I / Lrow Next With ActiveSheet.Range("A2:B" & Lrow) .ClearFormats End With End Sub