Cách tách số và đơn vị theo sau trong chuỗi kí tự

Liên hệ QC

tranminhnguyet98

Thành viên mới
Tham gia
13/3/20
Bài viết
10
Được thích
0
1585816744053.png
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ạ!
 
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ạ!
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.
 
Upvote 0
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.
dạ cảm ơn bác, em xin đính kèm file ngay ạ!
Bài đã được tự động gộp:

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 đỡ ạ!
 

File đính kèm

  • nho_VBA_tach_gia_dien_tich.xlsx
    4.2 MB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
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 đỡ ạ!
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?

A_Loan_2.GIF

A_Loan_1.GIF
 
Lần chỉnh sửa cuối:
Upvote 0
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
em cũng có tìm một số tính chất như thế này ạ
1586058897845.png
 
Upvote 0
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.
...
Đâ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.
 
Upvote 0
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
 
Upvote 0
Đâ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.
Cảm ơn gợi ý của anh ạ, em cũng đang mò thêm code python xem sao ạ!
Bài đã được tự động gộp:

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
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 ạ :))
 
Upvote 0
Web KT
Back
Top Bottom