tìm các cặp ký tự giống nhau và xoá bớt chúng trong cell (1 người xem)

Liên hệ QC

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

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
 
Upvote 0
anh ơi
em có một dãy các ký tự như sau:
: MI,LI,DI,MN,XI,DI,MI,LI
nếu dùng công thức anh hướng dẫn không ra được kết quả mong muốn,em muốn ra như này:
: MI,LI,DI,MN,XI
anh xem lại hộ em được không.
 
Upvote 0
anh ơi
em có một dãy các ký tự như sau:
: MI,LI,DI,MN,XI,DI,MI,LI
nếu dùng công thức anh hướng dẫn không ra được kết quả mong muốn,em muốn ra như này:
: MI,LI,DI,MN,XI
anh xem lại hộ em được không.
Áp dụng không được để cứ đưa nguyên file lên đây (bao gồm cả công thức mà bạn nói không được ấy)
 
Upvote 0
khong ra duoc ket qua nhu mong muon

anh xem hộ em.em không sửa được
 

File đính kèm

Upvote 0
Function xoatrung(Text As String, Optional Sep) As String
Dim i As Long, Temp
On Error Resume Next
If IsMissing(Sep) Then
xoatrung = Left(Text, 1)
For i = 1 To Len(Text)
If InStr(xoatrung, Mid(Text, i, 1)) = 0 Then xoatrung = xoatrung & Mid(Text, i, 1)
Next i
Else
Temp = Split(WorksheetFunction.Trim(Replace(Text, CStr(Sep), " ")), " ")
With CreateObject("Scripting.Dictionary")
For i = 0 To UBound(Temp)
.Add Temp(i), ""
Next i
xoatrung = Join(.Keys, Sep)
End With
End If
End Function
 
Upvote 0

File đính kèm

Upvote 0
em cám ơn anh.
Anh cho em hỏi một điều nữa:
em có một bảng data, em dùng lệnh vlookup để xuất dữ liệu theo ngày, dưới cùng có một hàng tổng
do các ngày số liệu không giống nhau, nên số hàng của bảng xuất không giống nhau
hiện em đang phải để khoảng 100 dòng rồi đến dòng tổng, ngày nào cũng phải hide để in ra.ngày hôm sau lại show rồi lại hide để in
có cách nào giúp tự ẩn các dòng có ký tự "" đi không
 
Upvote 0
em cám ơn anh.
Anh cho em hỏi một điều nữa:
em có một bảng data, em dùng lệnh vlookup để xuất dữ liệu theo ngày, dưới cùng có một hàng tổng
do các ngày số liệu không giống nhau, nên số hàng của bảng xuất không giống nhau
hiện em đang phải để khoảng 100 dòng rồi đến dòng tổng, ngày nào cũng phải hide để in ra.ngày hôm sau lại show rồi lại hide để in
có cách nào giúp tự ẩn các dòng có ký tự "" đi không
Hỏi 1 câu chẳng liên quan đến nội dung Topic ---> Có thể bài này sẽ bị xóa mất thôi
Mở topic khác mà hỏi tiếp nhé
 
Upvote 0
Giờ mình muốn xóa ký tự như sau:
Ký tự gốc: 12.3.....3.5.....3...6...
Kết quả muốn: 12.3.3.5.3.6
Nghĩa là nếu có nhiều hơn 1 ký tự "." liên tiếp sẽ xóa đi để lại 1 ký tự thôi
Cám ơn !
 
Upvote 0
Giờ mình muốn xóa ký tự như sau:
Ký tự gốc: 12.3.....3.5.....3...6...
Kết quả muốn: 12.3.3.5.3.6
Nghĩa là nếu có nhiều hơn 1 ký tự "." liên tiếp sẽ xóa đi để lại 1 ký tự thôi
Cám ơn !

Cái này quá dễ. Quy trình như sau:
- Biến dấu chấm thành khoảng trắng (dùng hàm SUBSTITUTE)
- Trim kết quả
- Cuối cùng biến khoảng trắng thành dấu chấm
 
Upvote 0
Cái này quá dễ. Quy trình như sau:
- Biến dấu chấm thành khoảng trắng (dùng hàm SUBSTITUTE)
- Trim kết quả
- Cuối cùng biến khoảng trắng thành dấu chấm
Nhưng nếu trường hợp dấu chấm được thay bằng dấu Space thì có vẻ không ổn bác ah ?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Nhưng nếu trường hợp dấu chấm được thay bằng dấu Space thì có vẻ không ổn bác ah ?

ý bạn nói đến trường hợp : "1.2.3.. 24... 4.. 4. 4.--> thì bạn vẫn muốn giữ khoảng trắng trong các số đúng không ?
Nếu vậy tham khảo hàm này xem :
PHP:
Function TrimDots(Str$) As String    
   With CreateObject("VBscript.Regexp")        
       .Global = True        
      .Pattern = "\.+"        
       TrimDots = .Replace(Str, ".")   
    End With
End Function
 
Upvote 0
Ví dụ sau: 2 3 5 3 6 7
Kết quá: 2 3 5 3 6 7

Vậy đầu vào và đầu ra khác nhau chổ nào?
Bạn cứ đưa file dữ liệu lên đây, ghi rõ kết quả bạn cần cho dễ... Vì coi chừng càng mô tả càng hổng hiểu
----------------
ý bạn nói đến trường hợp : "1.2.3.. 24... 4.. 4. 4.--> thì bạn vẫn muốn giữ khoảng trắng trong các số đúng không ?
Nếu vậy tham khảo hàm này xem :
Dù là như vậy cũng chả cần đến code. Công thức thường cũng làm được, bạn tin không?
 
Upvote 0
Vậy đầu vào và đầu ra khác nhau chổ nào?
Bạn cứ đưa file dữ liệu lên đây, ghi rõ kết quả bạn cần cho dễ... Vì coi chừng càng mô tả càng hổng hiểu
----------------

Dù là như vậy cũng chả cần đến code. Công thức thường cũng làm được, bạn tin không?
Đây là file dữ liệu
Kết quả mong muốn như trong file
 

File đính kèm

Upvote 0
Anh nói như vậy chắc chắn là dùng được công thức excel, để em suy ngẫm, anh đừng đưa ra đáp án vội nhé!:-=

Nghĩ được công thức này :
PHP:
=SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(C16," ","#"),"."," "))," ","."),"#"," ")
<-------------+-+-+-+
 
Upvote 0
Đâ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

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

Back
Top Bottom