Hỗ trợ tách chuỗi -theo độ dài ký tự bằng VBA

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Tình nghĩa giang hồ

Thanh sơn bất cải, lục thủy trường lưu
Tham gia
29/9/20
Bài viết
319
Được thích
421
Chào anh chị em có trường hợp ví dụ về tách chuỗi ký tự như hình.
Mục đích của bài này không phải giải bài trong hình của em. Vì bài này dùng Replace, hoặc Mid là ra rồi.
Mục đích của em là tách chuỗi bằng số ký tự.
Em cũng có một đoạn code tách chuỗi ký tự rồi. Nhưng đoạn code này nó mất đi tính linh động.
Theo như đoạn code bên dưới em tách chuỗi 12 ký tự thì được, nhưng nếu 15 ký tự, hoặc 20 ký tự, thì em phải sửa lại trong code số 12 thành 15, hoặc 20.

Mong muốn của em là:
=Tachchuoi(A2,12) dùng công thức này sẽ tách chuỗi có 12 ký tự.
=Tachchuoi(A2,15) dùng công thức này sẽ tách chuỗi có 15 ký tự
Tức là công thức mong muốn của em
=Tachchuoi(chuỗi, số ký tự)

Trường hợp của em thì đoạn code bên dưới sửa lại như thế nào vậy anh chị ?
Nhờ anh chị hỗ trợ giúp em trường hợp này. Em cảm ơn anh chị.

Mã:
Public Function Tachchuoi(ByVal Txt As Range) As String
Dim Tmp, J As Long
Tmp = Split(Txt, " ")
For J = 0 To UBound(Tmp)
If Len(Tmp(J)) = 12 Then
Tachchuoi = Trim(Tachchuoi & " " & Tmp(J))
End If
Next J
End Function
 

File đính kèm

  • tách chuỗi.PNG
    tách chuỗi.PNG
    311.1 KB · Đọc: 24
  • Tách ký tự.xlsb
    14.6 KB · Đọc: 15
Lần chỉnh sửa cuối:
Chào anh chị em có trường hợp ví dụ về tách chuỗi ký tự như hình.
Mục đích của bài này không phải giải bài trong hình của em. Vì bài này dùng Replace, hoặc Mid là ra rồi.
Mục đích của em là tách chuổi ký tự.
Em cũng có một đoạn code tách chuổi ký tự rồi. Nhưng đoạn code này nó mất đi tính linh động.
Theo như đoạn code bên dưới em tách chuổi 12 ký tự thì được, nhưng nếu 15 ký tự, hoặc 20 ký tự, thì em phải sửa lại trong code số 12 thành 15, hoặc 20.

Mong muốn của em là:
=Tachchuoi(A2,12) dùng công thức này sẽ tách chuổi có 12 ký tự.
=Tachchuoi(A2,15) dùng công thức này sẽ tách chuổi có 15 ký tự
Tức là công thức mong muốn của em
=Tachchuoi(chuỗi, số ký tự)

Trường hợp của em thì đoạn code bên dưới sửa lại như thế nào vậy chị ?
Nhờ anh chị hỗ trợ giúp em trường hợp này. Em cảm ơn anh chị.

Mã:
Public Function Tachchuoi(ByVal Txt As Range) As String
Dim Tmp, J As Long
Tmp = Split(Txt, " ")
For J = 0 To UBound(Tmp)
If Len(Tmp(J)) = 12 Then
Tachchuoi = Trim(Tachchuoi & " " & Tmp(J))
End If
Next J
End Function
Đầu tiên bạn nên sửa từ "chuổi" thành "chuỗi" đã nhỉ.
 
Upvote 0
Chào anh chị em có trường hợp ví dụ về tách chuỗi ký tự như hình.
Mục đích của bài này không phải giải bài trong hình của em. Vì bài này dùng Replace, hoặc Mid là ra rồi.
Mục đích của em là tách chuổi ký tự.
Em cũng có một đoạn code tách chuổi ký tự rồi. Nhưng đoạn code này nó mất đi tính linh động.
Theo như đoạn code bên dưới em tách chuổi 12 ký tự thì được, nhưng nếu 15 ký tự, hoặc 20 ký tự, thì em phải sửa lại trong code số 12 thành 15, hoặc 20.

Mong muốn của em là:
=Tachchuoi(A2,12) dùng công thức này sẽ tách chuổi có 12 ký tự.
=Tachchuoi(A2,15) dùng công thức này sẽ tách chuổi có 15 ký tự
Tức là công thức mong muốn của em
=Tachchuoi(chuỗi, số ký tự)

Trường hợp của em thì đoạn code bên dưới sửa lại như thế nào vậy chị ?
Nhờ anh chị hỗ trợ giúp em trường hợp này. Em cảm ơn anh chị.

Mã:
Public Function Tachchuoi(ByVal Txt As Range) As String
Dim Tmp, J As Long
Tmp = Split(Txt, " ")
For J = 0 To UBound(Tmp)
If Len(Tmp(J)) = 12 Then
Tachchuoi = Trim(Tachchuoi & " " & Tmp(J))
End If
Next J
End Function
Trong function khai báo thêm 1 biến nữa rồi lôi nó ra dùng trong câu lệnh if của bạn là xong mà.

Public Function Tachchuoi(ByVal Txt As Range, SKT as Long) As String

If Len(Tmp(J)) = SKT Then
Bài đã được tự động gộp:

Đầu tiên bạn nên sửa từ "chuổi" thành "chuỗi" đã nhỉ.
Bạn này chắc quê ở Thanh Hóa, hay bị nhầm dấu ~ thành ?. Những lỗi chính tả do ngôn ngữ vùng thì nên xem xét bỏ qua đi bạn.
 
Upvote 0
Trường hợp của em thì đoạn code bên dưới sửa lại như thế nào vậy chị ?
Nhờ anh chị hỗ trợ giúp em trường hợp này. Em cảm ơn anh chị.
Sửa vậy đi. Không cần tham số thứ 2
Mã:
Public Function Tachchuoi(ByVal Txt As Range) As String
    Dim Tmp, J As Long
    Tmp = Split(Txt, " ")
    For J = 0 To UBound(Tmp)
    If Tmp(J) Like "*/*/*/*" Then
        Tachchuoi = Trim(Tmp(J))
        Exit For
    End If
    Next J
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Những lỗi chính tả do ngôn ngữ vùng thì nên xem xét bỏ qua đi bạn.
Mình nghĩ thói quen này nếu có điều kiện nên sửa vì khi tìm kiếm hoặc lọc dữ liệu gì đó thì ảnh hưởng khá nhiều. Nhất là về nhân sự có những người chỉ vì những lỗi như thế hoặc tương tự mà có khi không rơi vào danh sách trúng tuyển, đề bạt ... Đến khi phát hiện ra và khiếu nại thì ván đã đóng thuyền.
(Dân trí) - Do cán bộ xã viết sai dấu hỏi và ngã trong giấy tờ khai sinh, hơn 1.000 người ở Vĩnh Long phải chỉnh lại thông tin. Nhiều người chấp nhận dùng tên sai đến lúc qua đời.
 
Lần chỉnh sửa cuối:
Upvote 0
Sửa vậy đi. Không cần tham số thứ 2
Mã:
Public Function Tachchuoi(ByVal Txt As Range) As String
    Dim Tmp, J As Long
    Tmp = Split(Txt, " ")
    For J = 0 To UBound(Tmp)
    If Tmp(J) Like "*/*/*/*" Then
        Tachchuoi = Trim(Tmp(J))
        Exit For
    End If
    Next J
End Function
Giải đáp "không cần tham số thứ 2" này sai. Nó không đáp ứng yêu cầu về "tính chất linh động" của chính chủ
Lọc 1/2/3/4 thì được nhưng lúc cần phải lọc 5/6/7 thì bó tay.
Vả lại, code chưa xác định. Gặp 1/2/3/4/5/6 nó cũng lấy tuốt.
 
Upvote 0
Giải đáp "không cần tham số thứ 2" này sai. Nó không đáp ứng yêu cầu về "tính chất linh động" của chính chủ
Lọc 1/2/3/4 thì được nhưng lúc cần phải lọc 5/6/7 thì bó tay.
Vả lại, code chưa xác định. Gặp 1/2/3/4/5/6 nó cũng lấy tuốt.
Còn nữa:
12/34/56/78
123/34/456/789
369/246/456/5678
 
Upvote 0
Xin hỏi nếu tạo hàm tách chuỗi ví dụ =tachchuoi(chuoicantach), thì trả kết quả trả c,h,u,o,i,c,a,n,t,a,c,h thì có thể viết hàm ra sao, trong đó chuoicantach không chứa dấu tiếng việt, cảm ơn các bạn
 
Upvote 0
Xin hỏi nếu tạo hàm tách chuỗi ví dụ =tachchuoi(chuoicantach), thì trả kết quả trả c,h,u,o,i,c,a,n,t,a,c,h thì có thể viết hàm ra sao, trong đó chuoicantach không chứa dấu tiếng việt, cảm ơn các bạn
Trong VBA thì cứ lặp FOR, rồi trong lệnh FOR thì dùng mid theo i và 1 ký tự ... là được
bạn thử sức xem, kiểu thế này
For i=1 t to len(chuoikytu)
cần lấy mid(chuoikytu,i,1) -> nối vào nhau, hoặc cho mảng sau join
next
 
Upvote 0
Vấn đề này ở đây (GPE) đã có vài bài giải rồi. Chịu khó tìm.
 
Upvote 0
@hongphuong1997 bình tĩnh, không viết cảm xúc cá nhân lên đây. Có người thì code sẵn cho xài, có người chỉ hướng dẫn, và cũng có người chỉ vạch lối đi.
 
Upvote 0
Xin hỏi nếu tạo hàm tách chuỗi ví dụ =tachchuoi(chuoicantach), thì trả kết quả trả c,h,u,o,i,c,a,n,t,a,c,h thì có thể viết hàm ra sao, trong đó chuoicantach không chứa dấu tiếng việt, cảm ơn các bạn
Tự nhiên bạn lại đăng bài dưới bài của mình.
Đáng lẽ là phải đăng bài mới. Mà thôi, người mua điện thoại mà lỡ không có ai gọi cho mình thì cũng buồn.
Bài viết mà không có tương tác thì cũng không có vui............
Gửi bạn code:
Mã:
Function Tach_chuoi_dau_phay(Du_lieu As String) As String
    Dim result As String
    Dim i As Integer
    
    result = ""
    
    For i = 1 To Len(Du_lieu)
        result = result & Mid(Du_lieu, i, 1)
        If i < Len(Du_lieu) Then
            result = result & ","
        End If
    Next i
    
    Tach_chuoi_dau_phay = result
End Function
Cách sử dụng:
=Tach_chuoi_dau_phay(dữ liệu)
VD:
Mã:
=Tach_chuoi_dau_phay(A1)
 
Upvote 0
Upvote 0
Chuỗi của người hỏi có khẳng định "không có dấu tiếng Việt" nên có thể coi như là chuỗi ASCII thuần. Có nhiều cách gọn gàng, hiệu quả hơn.
Chịu khó tìm diễn đàn này đã có nhiều bài rồi.
Bác oi bác, hàm này cháu có từ nâu "Lâu" rùi nhé mà 2 từ "Nâu" và "Lâu" cháu không hiểu từ nào đúng hở bác?
Hàm đó cũng cóa người viết cho cháu thoi bác oi.
Còn cháu thì chỉ có ăn hại. (Tại sao VBA phức tạp với cháu quá)
 
Upvote 0
Nêu chịu khó tìm những bài tôi nói thì sẽ học thêm được những gì người ta bàn về các giải thuật.

mà 2 từ "Nâu" và "Lâu" cháu không hiểu từ nào đúng hở bác?
Nâu là một loại củ, ăn được. Nghèo đói quá thì ăn. Người Bắc cũng dùng củ này để nhuộm quần áo. Trong ngữ cảnh công nghệ thì có lẽ từ "nâu" dùng tương tự như "khoai"
Lâu theo tiếng hán là cái gác. Chắc trong ngữ cảnh công nghệ thì nó có nghĩa là cao cấp (trái với khoai)
 
Lần chỉnh sửa cuối:
Upvote 0
Nêu chịu khó tìm những bài tôi nói thì sẽ học thêm được những gì người ta bàn về các giải thuật.
Em thấy anh hay bảo là chịu khó tìm kiếm
Nhưng trong mục Lập Trình với Excel này thì em thấy: hơn 224 ngàn bài viết, nhìn tiêu đề thì có 1164 trang.
Em gõ từ khóa: tách chuỗi + giaiphapexcel, thêm chuỗi, thêm dấu các kiểu............thì tìm không thấy

Google cũng có hướng dẫn tìm kiếm, các mẹo tìm kiếm.
Trường hợp này, thì mình có mẹo nào để tìm kiếm bài viết trong diễn đàn này không anh.
Bài đã được tự động gộp:

Em thấy hình như là bài này:
 
Upvote 0
Em thấy anh hay bảo là chịu khó tìm kiếm
Nhưng trong mục Lập Trình với Excel này thì em thấy: hơn 224 ngàn bài viết, nhìn tiêu đề thì có 1164 trang.
Em gõ từ khóa: tách chuỗi + giaiphapexcel, thêm chuỗi, thêm dấu các kiểu............thì tìm không thấy
...
Rại vì quý vị lười biếng "tìm kiếm" cho nên diễn đàn khong có "cơ hội" cải tiến chức năng này.
Nếu quý vị dùng nhiều, phản ánh nhiều thì tự diễn đàn cải tiến. Chức năng của Admin là vậy chứ đâu phải là để "xin Ad gúp em giải bài này..."
 
Upvote 0
Web KT
Back
Top Bottom