Tách dữ liệu mã số đơn vị và tên đơn vị ra 02 cột bằng VBA (1 người xem)

Liên hệ QC

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

Tham gia
30/7/06
Bài viết
423
Được thích
383
Nghề nghiệp
GTVT
Hiện mình có cột dữ liệu D2: D & Lr mình muốn tách dữ liệu cột này thành 02 cột kế tiếp.
Rất mong anh chị hỗ trợ vì đối tượng phân cách bởi phím Alt+enter.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Hiện mình có cột dữ liệu D2: D & Lr mình muốn tách dữ liệu cột này thành 02 cột kế tiếp
Rất mông anh chị hỗ trợ vì đối tượng phân cách bới phím Alt+enter
Chạy thử xem sao
Mã:
Option Explicit

Sub xxx()
Dim Nguon
Dim Kq
Dim rws
Dim i, j, k

Nguon = Sheet1.Range("D2", Sheet1.Range("D2").End(xlDown))
rws = UBound(Nguon)
ReDim Kq(1 To rws, 1 To 2)

With CreateObject("VbScript.RegExp")
    .Pattern = "\d\D"
    For i = 1 To rws
        If .test(Nguon(i, 1)) Then
            k = .Execute(Nguon(i, 1))(0).firstindex
            Kq(i, 1) = Left(Nguon(i, 1), k + 1)
            Kq(i, 2) = Mid(Nguon(i, 1), k + 1, 1000000)
        End If
    Next i
End With

With Sheet1
    .Range("F2").Resize(rws, 2).Clear
    .Range("F2").Resize(rws, 2).NumberFormat = "@"
    .Range("F2").Resize(rws, 2) = Kq
    .Range("F2").Resize(rws, 2).Columns.AutoFit
End With

End Sub
 
Chạy thử xem sao
Mã:
Option Explicit

Sub xxx()
Dim Nguon
Dim Kq
Dim rws
Dim i, j, k

Nguon = Sheet1.Range("D2", Sheet1.Range("D2").End(xlDown))
rws = UBound(Nguon)
ReDim Kq(1 To rws, 1 To 2)

With CreateObject("VbScript.RegExp")
    .Pattern = "\d\D"
    For i = 1 To rws
        If .test(Nguon(i, 1)) Then
            k = .Execute(Nguon(i, 1))(0).firstindex
            Kq(i, 1) = Left(Nguon(i, 1), k + 1)
            Kq(i, 2) = Mid(Nguon(i, 1), k + 1, 1000000)
        End If
    Next i
End With

With Sheet1
    .Range("F2").Resize(rws, 2).Clear
    .Range("F2").Resize(rws, 2).NumberFormat = "@"
    .Range("F2").Resize(rws, 2) = Kq
    .Range("F2").Resize(rws, 2).Columns.AutoFit
End With

End Sub
Nhờ bạn sữa giúp hiện chạy code tại cột G dư 1 số đứng đầu của dữ liệu 1716300191012.png
 
Thử thay dòng: Kq(i, 2) = Mid(Nguon(i, 1), k + 1, 1000000)

Bằng: Kq(i, 2) = Mid(Nguon(i, 1), k + 2) ' hàm MID của VBA khi không có đối số thứ ba, nó sẽ lấy đến hết chuỗi.

hoặc: Kq(i, 2) = Mid(Nguon(i, 1), k + 3) ' Loại bỏ thêm char(10) , Alt+enter.
 
Thử thay dòng: Kq(i, 2) = Mid(Nguon(i, 1), k + 1, 1000000)

Bằng: Kq(i, 2) = Mid(Nguon(i, 1), k + 2) ' hàm MID của VBA khi không có đối số thứ ba, nó sẽ lấy đến hết chuỗi.

hoặc: Kq(i, 2) = Mid(Nguon(i, 1), k + 3) ' Loại bỏ thêm char(10) , Alt+enter.
Vẫn đang bị đơn vị Chi nhánh hoặc số có chữ ở giữa 1716302753144.png
 
Vẫn đang bị đơn vị Chi nhánh hoặc số có chữ ở giữa
Tách theo char(10) thử dùng code sau:

Mã:
Sub xyz()
Dim Nguon
Dim Kq
Dim rws&
Dim i&, arr

Nguon = Sheet1.Range("D2", Sheet1.Range("D2").End(xlDown))
rws = UBound(Nguon)
ReDim Kq(1 To rws, 1 To 2)

    For i = 1 To rws
        arr = Split(Nguon(i, 1) & ChrW(10), ChrW(10))
            Kq(i, 1) = arr(0)
            Kq(i, 2) = arr(1)
    Next i


With Sheet1
    .Range("F2").Resize(rws, 2).Clear
    .Range("F2").Resize(rws, 2).NumberFormat = "@"
    .Range("F2").Resize(rws, 2) = Kq
    .Range("F2").Resize(rws, 2).Columns.AutoFit
End With

End Sub
 
Tách theo char(10) thử dùng code sau:

Mã:
Sub xyz()
Dim Nguon
Dim Kq
Dim rws&
Dim i&, arr

Nguon = Sheet1.Range("D2", Sheet1.Range("D2").End(xlDown))
rws = UBound(Nguon)
ReDim Kq(1 To rws, 1 To 2)

    For i = 1 To rws
        arr = Split(Nguon(i, 1) & ChrW(10), ChrW(10))
            Kq(i, 1) = arr(0)
            Kq(i, 2) = arr(1)
    Next i


With Sheet1
    .Range("F2").Resize(rws, 2).Clear
    .Range("F2").Resize(rws, 2).NumberFormat = "@"
    .Range("F2").Resize(rws, 2) = Kq
    .Range("F2").Resize(rws, 2).Columns.AutoFit
End With

End Sub
Cám ơn bạn rất nhiều Code như mong muốn
 
Đối với bài toán của bạn, bạn có thể đặt hai Function như sau:
PHP:
Function GetCompanyCode(TgStr As String, TgChar As String) As String
Dim iPosition As Integer: iPosition = InStr(TgStr, TgChar)
If iPosition > 0 Then GetCompanyCode = Left(TgStr, iPosition)
End Function



PHP:
Function GetCompanyName(TgStr As String, TgChar As String) As String
Dim iPosition As Integer: iPosition = InStr(TgStr, TgChar)
If iPosition > 0 Then GetCompanyName = Right(TgStr, Len(TgStr) - iPosition)
End Function

Sau đó, có thể dùng tuỳ biến trên sheet, như data hiện có của bạn thì mình thấy ký tự ngăn cách là Char(10) (tương đương Alt+Enter), thì cú pháp là
PHP:
= GetCompanyCode(D2,Char(10))
= GetCompanyName(D2,Char(10))

Trong trường hợp data bạn dùng ký tự khác ngăn cách thì thay Char(10) bằng ký tự ngăn cách đó. Ví dụ:

PHP:
D2="3100771234-CÔNG TY TNHH DỊCH VỤ THƯƠNG MẠI ĐIỆN TỬ VATOTA"
B2 = GetCompanyCode(D2,"-")
C2 = GetCompanyName(D2,"-")
 
Lần chỉnh sửa cuối:
Đối với bài toán của bạn, bạn có thể đặt hai Function như sau:
PHP:
Function GetCompanyCode(TgStr As String, TgChar As String) As String
Dim iPosition As Integer: iPosition = InStr(TgStr, TgChar)
If iPosition > 0 Then GetCompanyCode = Left(TgStr, iPosition)
End Function



PHP:
Function GetCompanyName(TgStr As String, TgChar As String) As String
Dim iPosition As Integer: iPosition = InStr(TgStr, TgChar)
If iPosition > 0 Then GetCompanyName = Right(TgStr, Len(TgStr) - iPosition)
End Function

Sau đó, có thể dùng tuỳ biến trên sheet, như data hiện có của bạn thì mình thấy ký tự ngăn cách là Char(10) (tương đương Alt+Enter), thì cú pháp là
PHP:
= GetCompanyCode(D2,Char(10))
= GetCompanyName(D2,Char(10))

Trong trường hợp data bạn dùng ký tự khác ngăn cách thì thay Char(10) bằng ký tự ngăn cách đó. Ví dụ:

PHP:
D2="3100771234-CÔNG TY TNHH DỊCH VỤ THƯƠNG MẠI ĐIỆN TỬ VATOTA"
B2 = GetCompanyCode(D2,"-")
C2 = GetCompanyName(D2,"-")
Cám ơn bạn nhiều mình dùng Function của bạn chạy chính xác theo mong muốn
 
Có thể dùng Textsplit, textbefore, hoặc filterxml,... cũng được mà :D Mình thử text to colum cũng ổn, tách mã số thuế đó rồi tên đơn vị subtitute
 
Sử dụng hàm con thì phải biết viết code theo lối cấu trúc:
Đối với bài toán dùng hàm co code gần gión nhau, người ta có thể đặt hai Function con như sau:

Function GetCompanyCode(TgStr As String, TgChar As String) As String
GetCompanyCode = Trim(CompanyCodeandName(0))
End Function

Function GetCompanyName(TgStr As String, TgChar As String) As String
GetCompanyCode = Trim(CompanyCodeandName(1))
End Function

Function CompanyCodeandName(TgStr As String, TgChar As String) As Variant
CompanyCodeandName = Split(tgStr, TgChar)
End Function
 
Web KT

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

Back
Top Bottom