Hỏi Hàm xóa dữ liệu trùng nhau trong chuỗi (1 người xem)

Liên hệ QC

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

toantinhte87

Thành viên chính thức
Tham gia
2/3/14
Bài viết
62
Được thích
3
Ví dụ ở ô A1 có dữ liệu: qazazaq mình muốn xóa hết ký tự thừa khi nhấn vào một nút bấm để trả về dữ liệu là: qaz
 
Tiếng Việt hay tiếng Anh?
Hai cái này dùng kỹ thuật khác nhau!
 
Upvote 0
Bạn nên đưa dữ liệu thật lên đi 1 phần cũng được(Để mọi người biết mặt mũi nó ra sao) cứ viết code mò hộ bạn chốc phải sửa ngại lắm.
Tôi có chỗ chưa hiểu lắm. Ví dụ ô A1 dữ liệu là: Nguyễn Văn Anh thì chữ n sẽ bị xóa hết chỉ để lại 1 chữ hay sao????

Vấn đề không phải ở chỗ xoá bao nhiêu "n", mà là xoá bao nhiêu " "
"Nguyễn Văn Anh" ===> "Nguyễn VăAh" (ví dụ phân biệt hoa và thường)

Đây là bài tập tìm các ký tự khác nhau trong một chuỗi. Tại chủ thớt diễn tả theo chiều hướng khó hiểu.
 
Upvote 0
Cái mình cần cụ thể là xóa tất cả các ký tự trùng nhau đó. Bằng tiếng anh đó các bạn:
qweqqqqqqqeeeeee = qwe
sdddsssdddsdsdsdsdsdsdsdsd = sd
qw211212 = qw21
......
 
Upvote 0
Tiếng Anh thì rất dễ. Bởi vì nó chỉ có 255 ký tự nên có thể dùng mảng để đếm. Nếu là tiếng Việt thì phải sử dụng tới con số mấy chục ngàn, cũng dùng mảng được nhưng hơi tốn bộ nhớ một chút.

Mã:
' hàm lọc các ký tự duy nhất trong một chuỗi
' hàm này chỉ dùng được cho chuỗi tiếng Anh
' muoons dùng cho tiếng Việt thì phải nới rộng thêm
Function KyTuTrongChuoi(ByVal chuoi As String)
Dim kt(1 To 255) As Integer ' mảng, mỗi phần tử tượng trưng cho một ký tự
' (ascii của lý tự là chỉ số phần tử trên mảng)
Dim i As Integer
For i = 1 To Len(chuoi)
    If kt(Asc(Mid(chuoi, i, 1))) <= 0 Then ' ký tự này chưa ghi
        KyTuTrongChuoi = KyTuTrongChuoi & Mid(chuoi, i, 1) ' ghi nó vào chuỗi kết quả
        kt(Asc(Mid(chuoi, i, 1))) = 1 ' và đánh dấu đã ghi
    End If
Next i
End Function

Làm: chép code trên vào module1 trong file.

Sử dụng:
=KyTuTrongChuoi(A1)
 
Upvote 0
Tiếng Anh thì rất dễ. Bởi vì nó chỉ có 255 ký tự nên có thể dùng mảng để đếm. Nếu là tiếng Việt thì phải sử dụng tới con số mấy chục ngàn, cũng dùng mảng được nhưng hơi tốn bộ nhớ một chút.

Mã:
' hàm lọc các ký tự duy nhất trong một chuỗi
' hàm này chỉ dùng được cho chuỗi tiếng Anh
' muoons dùng cho tiếng Việt thì phải nới rộng thêm
Function KyTuTrongChuoi(ByVal chuoi As String)
Dim kt(1 To 255) As Integer ' mảng, mỗi phần tử tượng trưng cho một ký tự
' (ascii của lý tự là chỉ số phần tử trên mảng)
Dim i As Integer
For i = 1 To Len(chuoi)
    If kt(Asc(Mid(chuoi, i, 1))) <= 0 Then ' ký tự này chưa ghi
        KyTuTrongChuoi = KyTuTrongChuoi & Mid(chuoi, i, 1) ' ghi nó vào chuỗi kết quả
        kt(Asc(Mid(chuoi, i, 1))) = 1 ' và đánh dấu đã ghi
    End If
Next i
End Function

Làm: chép code trên vào module1 trong file.

Sử dụng:
=KyTuTrongChuoi(A1)
Vẫn không được bạn. Mình không muốn dùng hàm mà muốn gán vào một nút bấm. Phiền bạn giúp đơn mình thêm
 
Upvote 0
Vẫn không được bạn. Mình không muốn dùng hàm mà muốn gán vào một nút bấm. Phiền bạn giúp đơn mình thêm
Muốn dùng nút bấm thì đưa file lên, dữ liệu gốc ở đâu, bấm xong kết quả ra ở cột nào, sheet nào .....thì mới biết đường mà làm chứ bạn
Ban VetMini cho hỏi trong code có đoạn
If kt(Asc(Mid(chuoi, I, 1))) <= 0 Then
sao lại phải "<" ạ ?
Thân
 
Upvote 0
Vẫn không được bạn. Mình không muốn dùng hàm mà muốn gán vào một nút bấm. Phiền bạn giúp đơn mình thêm

**: phần code , giải thuật Bạn VetMini đã viết hộ bạn!
còn cái vụ làm nút bấm , bạn tự tìm hiểu là cũng có thể làm được !
mà cũng lạ: bạn thích gán vào nút bấm, mà chẳng cho người ta xem bấm vào đâu, ở vị trí nào ...! bấm link tink trúng huyệt link tink thì khổ lắm !

:-=
 
Upvote 0
[h=2]Bạn VetMini có thể cho mình yahoo hoặc viber hoặc whatsaap để mình hỏi ko ạ[/h]
 
Upvote 0
...
Ban VetMini cho hỏi trong code có đoạn

sao lại phải "<" ạ ?
Thân

Không bắt buộc phải vậy. Tôi quen viết code theo kiểu "ăn chắc mặc trơn", cứ so sánh "sô nguyên dưới 1" là tôi dùng "<= 0". Riết rồi thành thói quen.
 
Upvote 0
Web KT

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

Back
Top Bottom