Tách dữ liệu ra thành các cột tương ứng

Liên hệ QC

quocphuoc88

Thành viên thường trực
Tham gia
29/11/10
Bài viết
299
Được thích
230
Nghề nghiệp
Kế toán - kiểm toán
Chào Anh/Chị/Thầy/Cô !
Hiện mình có dữ liệu thô khi đổ ra nó chỉ là 1 dòng duy nhất. Mong muốn của em là cho nó ra theo các cột tương ứng. Tuy nhiên đôi khi có những lúc các cột nó lại dính với nhau nên em không biết xử lý ra sao để tách nó ra.
Mong các Anh/Chị/Thầy/Cô có thể xem qua và giúp đỡ ạ.
Em xin cảm ơn !
 

File đính kèm

Chào Anh/Chị/Thầy/Cô !
Hiện mình có dữ liệu thô khi đổ ra nó chỉ là 1 dòng duy nhất. Mong muốn của em là cho nó ra theo các cột tương ứng. Tuy nhiên đôi khi có những lúc các cột nó lại dính với nhau nên em không biết xử lý ra sao để tách nó ra.
Mong các Anh/Chị/Thầy/Cô có thể xem qua và giúp đỡ ạ.
Em xin cảm ơn !
" 3 Hộp gió cấp giảm đểu 785x245/350x200 L500 tiêuâm trong dày 25mm + Khung giả TDC rộng 100mmCái1703.600 703.600"
Cơ sở chọn số lượng = 1 là thế nào bạn?
 
Upvote 0
" 3 Hộp gió cấp giảm đểu 785x245/350x200 L500 tiêuâm trong dày 25mm + Khung giả TDC rộng 100mmCái1703.600 703.600"
Cơ sở chọn số lượng = 1 là thế nào bạn?
Đây cũng là vấn đề nhức đầu của mình. Dữ liệu nguồn nó sẽ hiện riêng biệt số lượng 1 nhưng khi chuyển đổi vào excel thì nó lại dính vào cái đơn vi tính và số lượng. Mình cũng không biết cơ sở để làm sao biết được cái số 1 đó lấy ra như thế nào nên mới post bài hỏi cao kiến trên diễn đàn. Cái món này thì mình hay thấy mọi người dùng CreateObject("VBScript.RegExp") nhưng cái Parttern thì mình tịt ngòi.
Ý tưởng của mình thì mình sẽ đi ngược từ phải về trái.
Cái thành tiền thì có thể lấy được rồi mò mò tìm ra cái số lượng lại đơn giá nhưng không biết mò ra sao.
 
Upvote 0
Đây cũng là vấn đề nhức đầu của mình. Dữ liệu nguồn nó sẽ hiện riêng biệt số lượng 1 nhưng khi chuyển đổi vào excel thì nó lại dính vào cái đơn vi tính và số lượng. Mình cũng không biết cơ sở để làm sao biết được cái số 1 đó lấy ra như thế nào nên mới post bài hỏi cao kiến trên diễn đàn. Cái món này thì mình hay thấy mọi người dùng CreateObject("VBScript.RegExp") nhưng cái Parttern thì mình tịt ngòi.
Ý tưởng của mình thì mình sẽ đi ngược từ phải về trái.
Cái thành tiền thì có thể lấy được rồi mò mò tìm ra cái số lượng lại đơn giá nhưng không biết mò ra sao.
"100mmCái1703.600 703.600 "
Kẹt là phần bôi đậm đó bạn.
Nếu quy ước là đơn gíá luôn <1000000 thì giải quyết không khó.
 
Upvote 0
"100mmCái1703.600 703.600 "
Kẹt là phần bôi đậm đó bạn.
Nếu quy ước là đơn gíá luôn <1000000 thì giải quyết không khó.
Cái đơn giá thì có thể lớn hơn 1.000.000. Mình nghĩ từ cái chuỗi 1703.600 thì cái dãy số này đang có số 1 nó không thuộc định dạng theo kiểu số vì nếu đúng thì nó phải 1.703.600 tuy nhiên gặp tình huống 170.600 (với số lượng 1 và đơn giá 70.600 thì không biết xử lý ra sao )
 
Upvote 0
gặp tình huống 170.600 (với số lượng 1 và đơn giá 70.600 thì không biết xử lý ra sao )
Nếu SL là 1 thì Thành tiền cuối cùng là 70.600 (sẽ khác với 170.600)
"Mò" ra được hết các kiểu "lu xu bu" của dữ liệu ban đầu để ra được kết quả như yêu cầu của bạn là cả một "kỳ công".
 
Upvote 0
Nếu SL là 1 thì Thành tiền cuối cùng là 70.600 (sẽ khác với 170.600)
"Mò" ra được hết các kiểu "lu xu bu" của dữ liệu ban đầu để ra được kết quả như yêu cầu của bạn là cả một "kỳ công".
Dạ không. Khi đó thành tiền nó sẽ cũng phải 70.600 á anh !
 
Upvote 0

File đính kèm

Upvote 0
Cái đơn giá thì có thể lớn hơn 1.000.000. Mình nghĩ từ cái chuỗi 1703.600 thì cái dãy số này đang có số 1 nó không thuộc định dạng theo kiểu số vì nếu đúng thì nó phải 1.703.600 tuy nhiên gặp tình huống 170.600 (với số lượng 1 và đơn giá 70.600 thì không biết xử lý ra sao )
Có lẽ lấy thành tiền dò ngược lại sẽ ra đơn giá
 
Upvote 0
Mình gửi Full dữ liệu khi đổ vào excel !
Có lẽ tốt nhất là bạn nên yêu cầu bên cấp số liệu điều chỉnh lại đầu vào.
Code dưới đây viết cho bài 11. Nếu mẫu thay đổi, code phải điều chỉnh lại
Mã:
Sub TachChuoi()
Dim Nguon
Dim Mang, So, Stt
Dim Kq
Dim i, j, k, x, z, t
Nguon = Sheet1.Range("A6", Sheet1.Range("A6").End(xlDown))
ReDim Kq(1 To UBound(Nguon), 1 To 6)
With CreateObject("VbScript.RegExp")
    .Global = True
    .Pattern = ".*([A-Z]\D+)(\d*)"
    For i = 1 To UBound(Nguon)
        Nguon(i, 1) = WorksheetFunction.Trim(Replace(Nguon(i, 1), ".", ""))
        Mang = Split(Nguon(i, 1))
        If IsNumeric(Mang(0)) = True Then
            Stt = Stt + 1
            Kq(Stt, 1) = Mang(0)
            Mang(0) = ""
            k = UBound(Mang)
            If IsNumeric(Mang(k)) = True Then
                Kq(Stt, 6) = CLng(Mang(k))
                Mang(k) = ""
                If IsNumeric(Mang(k - 1)) = True Then
                    Kq(Stt, 5) = Mang(k - 1)
                    Mang(k - 1) = ""
                    If IsNumeric(Mang(k - 2)) Then
                        Kq(Stt, 4) = Mang(k - 2)
                        Mang(k - 2) = ""
                        Kq(Stt, 3) = .Replace(Mang(k - 3), "$1")
                        Mang(k - 3) = Left(Mang(k - 3), InStr(Mang(k - 3), Kq(Stt, 3)) - 1)
                    Else
                        If .test(Mang(k - 2)) Then
                            Kq(Stt, 4) = .Replace(Mang(k - 2), "$2")
                            Kq(Stt, 3) = .Replace(Mang(k - 2), "$1")
                            Mang(k - 2) = Left(Mang(k - 2), InStr(Mang(k - 2), Kq(Stt, 3)) - 1)
                        End If
                    End If
                Else
                    If .test(Mang(k - 1)) Then
                        So = .Replace(Mang(k - 1), "$2")
                        j = Len(So)
                        For x = 1 To Len(So) - 1
                            z = Int(So / 10 ^ (j - x))
                            t = So - 10 ^ (j - x)
                            If z * t = Kq(Stt, 6) Then
                                Kq(Stt, 5) = t
                                Kq(Stt, 4) = z
                                Kq(Stt, 3) = .Replace(Mang(k - 1), "$1")
                                Mang(k - 1) = Left(Mang(k - 1), InStr(Mang(k - 1), Kq(Stt, 3)) - 1)
                                Exit For
                            End If
                        Next x
                    End If
                End If
            End If
            Kq(Stt, 2) = WorksheetFunction.Trim(Join(Mang))
        Else
            Kq(Stt, 2) = Kq(Stt, 2) & " " & Trim(Nguon(i, 1))
        End If
    Next i
End With
With Sheet1
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)).Clear
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)) = Kq
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)).Columns.AutoFit
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)).Borders.LineStyle = 1
End With
End Sub
 
Upvote 0
Có lẽ tốt nhất là bạn nên yêu cầu bên cấp số liệu điều chỉnh lại đầu vào.
Code dưới đây viết cho bài 11. Nếu mẫu thay đổi, code phải điều chỉnh lại
Mã:
Sub TachChuoi()
Dim Nguon
Dim Mang, So, Stt
Dim Kq
Dim i, j, k, x, z, t
Nguon = Sheet1.Range("A6", Sheet1.Range("A6").End(xlDown))
ReDim Kq(1 To UBound(Nguon), 1 To 6)
With CreateObject("VbScript.RegExp")
    .Global = True
    .Pattern = ".*([A-Z]\D+)(\d*)"
    For i = 1 To UBound(Nguon)
        Nguon(i, 1) = WorksheetFunction.Trim(Replace(Nguon(i, 1), ".", ""))
        Mang = Split(Nguon(i, 1))
        If IsNumeric(Mang(0)) = True Then
            Stt = Stt + 1
            Kq(Stt, 1) = Mang(0)
            Mang(0) = ""
            k = UBound(Mang)
            If IsNumeric(Mang(k)) = True Then
                Kq(Stt, 6) = CLng(Mang(k))
                Mang(k) = ""
                If IsNumeric(Mang(k - 1)) = True Then
                    Kq(Stt, 5) = Mang(k - 1)
                    Mang(k - 1) = ""
                    If IsNumeric(Mang(k - 2)) Then
                        Kq(Stt, 4) = Mang(k - 2)
                        Mang(k - 2) = ""
                        Kq(Stt, 3) = .Replace(Mang(k - 3), "$1")
                        Mang(k - 3) = Left(Mang(k - 3), InStr(Mang(k - 3), Kq(Stt, 3)) - 1)
                    Else
                        If .test(Mang(k - 2)) Then
                            Kq(Stt, 4) = .Replace(Mang(k - 2), "$2")
                            Kq(Stt, 3) = .Replace(Mang(k - 2), "$1")
                            Mang(k - 2) = Left(Mang(k - 2), InStr(Mang(k - 2), Kq(Stt, 3)) - 1)
                        End If
                    End If
                Else
                    If .test(Mang(k - 1)) Then
                        So = .Replace(Mang(k - 1), "$2")
                        j = Len(So)
                        For x = 1 To Len(So) - 1
                            z = Int(So / 10 ^ (j - x))
                            t = So - 10 ^ (j - x)
                            If z * t = Kq(Stt, 6) Then
                                Kq(Stt, 5) = t
                                Kq(Stt, 4) = z
                                Kq(Stt, 3) = .Replace(Mang(k - 1), "$1")
                                Mang(k - 1) = Left(Mang(k - 1), InStr(Mang(k - 1), Kq(Stt, 3)) - 1)
                                Exit For
                            End If
                        Next x
                    End If
                End If
            End If
            Kq(Stt, 2) = WorksheetFunction.Trim(Join(Mang))
        Else
            Kq(Stt, 2) = Kq(Stt, 2) & " " & Trim(Nguon(i, 1))
        End If
    Next i
End With
With Sheet1
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)).Clear
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)) = Kq
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)).Columns.AutoFit
    .Range("M6").Resize(UBound(Kq), UBound(Kq, 2)).Borders.LineStyle = 1
End With
End Sub
Cảm ơn bạn. Để mình thử nhé !
 
Upvote 0
Web KT

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

Back
Top Bottom