Mình cần xin hàm tự tạo SubstituteNew giúp thay thế ký tự ở nhiều lần xuất hiện khác nhau trong chuỗi

Liên hệ QC

ManhDuc1382

Supreme Сasual Dating - Verified Maidens
Tham gia
5/3/20
Bài viết
46
Được thích
16
Giới tính
Nam
Nghề nghiệp
Health
Chào các bạn, mình muốn xin hàm tự tạo SubstituteNew giúp thay thế ký tự ở nhiều lần xuất hiện khác nhau theo như mô tả trong file đính kèm của mình nhé, mình cảm ơn :D
Công thức
=SubstituteNew(Chuỗi ban đầu , old text , new text , lần xuất hiện thứ mấy cần thay thế)
Trong đó tham số lần xuất hiện thứ mấy cần thay thế có thể là một hoặc nhiều vị trí khác nhau
Ví dụ: ô E4 chứa chuỗi abcDbhDmpDrhDqpal
Công thức: =SubtituteNew(E4,"D","K",2,4) sẽ cho ra kết quả là abcDbhKmpDrhKqpal
 

File đính kèm

Mắc mớ gì phải lập hàm tự tạo? Tự uyển chuyển không được sao?
=SUBSTITUTE(SUBSTITUTE($E$4,"D", "K", 2),"D", "K", 3)
3 tức là 4-1, vì vị trí 2 đã bị đổi rồi cho nên 4 trở thành 3

Tôi chỉ mách cho các bạn có tư tưởng tương tự. Chứ tôi biết thớt có hằng trăm cớ để biện hộ tính lười gõ, ngồi chờ hàm tự tạo copy về khoẻ hơn.
Cái hàm tự tạo này nó lẩn thẩn quá. Không xứng đáng động não. Nhường cho quý vị tập code.
 
Upvote 0
Chào các bạn, mình muốn xin hàm tự tạo SubstituteNew giúp thay thế ký tự ở nhiều lần xuất hiện khác nhau theo như mô tả trong file đính kèm của mình nhé, mình cảm ơn :D
Công thức
=SubstituteNew(Chuỗi ban đầu , old text , new text , lần xuất hiện thứ mấy cần thay thế)
Trong đó tham số lần xuất hiện thứ mấy cần thay thế có thể là một hoặc nhiều vị trí khác nhau
Ví dụ: ô E4 chứa chuỗi abcDbhDmpDrhDqpal
Công thức: =SubtituteNew(E4,"D","K",2,4) sẽ cho ra kết quả là abcDbhKmpDrhKqpal
Các bạn giúp mình với nhé :D :D :D
 
Upvote 0
Code Function đầu tiên của mình là dạng nầy nhưng phức tạp hơn, viết cho "mazda C++"
bạn giúp mình viết code hàm mình cần với nhé, tại là trong VBA không có hàm Substitute, còn cái Replace của VBA không làm được như mình mong muốn, mình cảm ơn :D :D :D
 
Upvote 0
Em tập tọe tí nhé -\\/.
PHP:
Function SubtituteNew(ByVal Text As String, ByVal old_text, ByVal new_text, _
        ParamArray Args() As Variant) As String
    Dim I As Long, Idx As Long, Str As String
    Dim Tmp, Delimiter As String, N As Long
Tmp = Split(Text, old_text)
For I = LBound(Tmp) To UBound(Tmp)
    N = LBound(Args)
    For Idx = N To UBound(Args)
        If I + 1 = Args(Idx) Then
            Delimiter = new_text:   N = Idx + 1: Exit For
        Else
            Delimiter = old_text
        End If
    Next Idx
    If I = UBound(Tmp) Then Delimiter = ""
    Str = IIf(Len(Str), Str & Tmp(I) & Delimiter, Tmp(I) & Delimiter)
Next I
SubtituteNew = Str
End Function
 

File đính kèm

Upvote 0
Thì thử "tập toẹ" đi.

Code căn bản substitute chỉ như vầy:
chinhLech = 0
For Each a in Arg
Text = Application.Substitute(Text, olText, nuText, a - chinhLech)
chinhLech = chinhLech + 1
Next a
Cuối cùng cũng không thoát được kiếp ngứa tay, gặp bài kiểu thế này rửa tay gác kiếm cho đẹp.
 
Upvote 0
Em tập tọe tí nhé -\\/.
PHP:
Function SubtituteNew(ByVal Text As String, ByVal old_text, ByVal new_text, _
        ParamArray Args() As Variant) As String
    Dim I As Long, Idx As Long, Str As String
    Dim Tmp, Delimiter As String, N As Long
Tmp = Split(Text, old_text)
For I = LBound(Tmp) To UBound(Tmp)
    N = LBound(Args)
    For Idx = N To UBound(Args)
        If I + 1 = Args(Idx) Then
            Delimiter = new_text:   N = Idx + 1: Exit For
        Else
            Delimiter = old_text
        End If
    Next Idx
    If I = UBound(Tmp) Then Delimiter = ""
    Str = IIf(Len(Str), Str & Tmp(I) & Delimiter, Tmp(I) & Delimiter)
Next I
SubtituteNew = Str
End Function
Hì hì, anh không quan tâm code của em có phải là tối ưu không nhưng anh chấm cho em 100/10 điểm vì sự nhiệt tình nhé ^^ :1a::1a::1a: chúng ta nên có tinh thần giúp đỡ đồng đội như em ^^ thank you em :D
 
Upvote 0
Cuối cùng cũng không thoát được kiếp ngứa tay, gặp bài kiểu thế này rửa tay gác kiếm cho đẹp.
Ngứa miệng chứ không phải ngứa tay đâu. Nếu thực sự ngứa tay thì tôi đã cho từ a đến z, không có một đoạn như thế.
Thớt không đủ kiên nhẫn để đem nó vào đúng chỗ mà xài đâu.
 
Upvote 0
Code replace này không cần phải for từng ký tự đâu. Mình cũng có viết 1 hàm để thay thế replace trong vba
 
Upvote 0
Code replace này không cần phải for từng ký tự đâu. Mình cũng có viết 1 hàm để thay thế replace trong vba
Ở bài #5 tôi có nói là dịp để "biểu diễn thuật toán" mờ.

Bổ sung thêm cho cái chuyện thuật toán:
thực ra ở bài #2, và tiếp sau đó code minh hoạ ở bài #13 là tôi dùng thuật toán xuôi cho nó dễ hiểu. Nếu dùng thuật toán ngược thì không phải chỉnh độ lệch.
 
Upvote 0
Ở bài #5 tôi có nói là dịp để "biểu diễn thuật toán" mờ.

Bổ sung thêm cho cái chuyện thuật toán:
thực ra ở bài #2, và tiếp sau đó code minh hoạ ở bài #13 là tôi dùng thuật toán xuôi cho nó dễ hiểu. Nếu dùng thuật toán ngược thì không phải chỉnh độ lệch.
Thế bác đã tính tới chuyện đổi "D" thành "KD" chưa?
 
Upvote 0
Web KT

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

Back
Top Bottom