tìm các cặp ký tự giống nhau và xoá bớt chúng trong cell

Liên hệ QC

viettuan49a

Thành viên mới
Tham gia
16/7/10
Bài viết
39
Được thích
3
tôi có một ô excell A1 có dạng như sau:
MI,LI,MN,NN,MI,NN,MI (có thể có nhiều cặp ký tự hơn)
tôi muốn xoá các cặp ký tự giống nhau và cho ra ô A2: MI,LI,MN,NN.
nhờ các cao nhân chỉ giáo
 
Đây là file dữ liệu
Kết quả mong muốn như trong file

Gì vậy?
Không phải bạn không biết dùng hàm TRIM chứ trời?
-------------
Nghĩ được công thức này :
PHP:
=SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(C16," ","#"),"."," "))," ","."),"#"," ")
<-------------+-+-+-+
Giải thuật chính là như vậy:
Có điều bạn nên thay khoảng trắng thành 1 ký tự đặc biệt nào đó, 1 ký tự mà người dùng không thể tự gõ được, chẳng hạn là CHAR(1)
 
Upvote 0
Đúng là nhiều khi không rõ. Sorry cấc bác
Giờ em có chuỗi sau dạng như sau:
12.234.567.809.09.09
Em muốn tách nó thành (Dúng VBA)
12.23.34.56.67.80.09.09.09
Cám ơn !
 
Upvote 0
Đúng là nhiều khi không rõ. Sorry cấc bác
Giờ em có chuỗi sau dạng như sau:
12.234.567.809.09.09
Em muốn tách nó thành (Dúng VBA)
12.23.34.56.67.80.09.09.09
Cám ơn !
Bạn dùng hàm tự tạo sau cho dạng dữ liệu mẫu của bạn (không đúng cho các dạng miêu tả khác)
Dữ liệu chuẩn là: các cặp số 2 hoặc 3 (không có ngoại lệ) ngăn cách bằng dấu ".". Tách các cặp số 3 thành 2 cặp như ví dụ của bạn
Mã:
Function SplitDot(Str As String)
With CreateObject("VBscript.RegExp")
    .Global = True
    .Pattern = "\d{3}"
    For Each Match In .Execute(Str)
        Str = Replace(Str, Match, Left(Match, 2) & "." & Right(Match, 2))
    Next
    SplitDot = Str
End With
End Function
 
Upvote 0
Bạn dùng hàm tự tạo sau cho dạng dữ liệu mẫu của bạn (không đúng cho các dạng miêu tả khác)
Dữ liệu chuẩn là: các cặp số 2 hoặc 3 (không có ngoại lệ) ngăn cách bằng dấu ".". Tách các cặp số 3 thành 2 cặp như ví dụ của bạn
Mã:
Function SplitDot(Str As String)
With CreateObject("VBscript.RegExp")
    .Global = True
    .Pattern = "\d{3}"
    For Each Match In .Execute(Str)
        Str = Replace(Str, Match, Left(Match, 2) & "." & Right(Match, 2))
    Next
    SplitDot = Str
End With
End Function

Đằng nào cũng phải For.. Next
Bài này cứ dùng Split (dấu phân cách là dấu chấm) rồi For.. Next bình thường thôi... Đâu phải thuộc dạng bài "siêu độc" mà phải RegExp chứ?
 
Upvote 0
Bạn dùng hàm tự tạo sau cho dạng dữ liệu mẫu của bạn (không đúng cho các dạng miêu tả khác)
Dữ liệu chuẩn là: các cặp số 2 hoặc 3 (không có ngoại lệ) ngăn cách bằng dấu ".". Tách các cặp số 3 thành 2 cặp như ví dụ của bạn

theo mình đã dùng Regx thì có thể không cần dùng vòng lặp , mình viết như sau :
PHP:
Function GPE(str$) As String    
      With CreateObject("Vbscript.Regexp")       
              .Global = True       
              .Pattern = "(\d)(\d)(\d)"       
               GPE = .Replace(str, "$1$2.$2$3")   
       End With
End Function
 
Upvote 0
theo mình đã dùng Regx thì có thể không cần dùng vòng lặp , mình viết như sau :
PHP:
Function GPE(str$) As String    
      With CreateObject("Vbscript.Regexp")       
              .Global = True       
              .Pattern = "(\d)(\d)(\d)"       
               GPE = .Replace(str, "$1$2.$2$3")   
       End With
End Function

Hoặc đơn giản hơn và ít tốn "điện nuớc " có thể viết kiểu backref như sau :

[GPECODE=vb]
Function GPE(str$) As String
With CreateObject("Vbscript.Regexp")
.Global = True
.Pattern = "\B(\d)\B"
GPE = .Replace(str, "$1.$1")
End With
End Function
[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Khi chuỗi đầu vào có sư thay đổi thành
12. 234. 567. 809. 09 .09 x 5000
Em muốn tách nó thành (Dúng VBA) giá trị lưu ở hai ô
12.23.34.56.67.80.09.09.09
5000
 
Upvote 0
Web KT
Back
Top Bottom