Công thức thay thế những ký tự trùng nhau liên tiếp bằng 1 ký tự

Liên hệ QC

rollover79

Thành viên tiêu biểu
Tham gia
10/9/08
Bài viết
764
Được thích
1,310
Tôi có 1 tình huống nhỏ nhỏ thế này gửi các bác suy nghĩ chút cho vui.
- Dùng công thức của excel(Không dùng VBA), hãy loại bỏ 2 ký tự chữ "a" liền nhau trong 1 chuỗi(Tức là nếu có 2 ký tự "a" liền nhau thì thay bằng 1 thôi). Biết rằng chuỗi này không chứa các ký tự đặc biệt.
 
Nếu có 2 chữ a liền nhau thì thay bằng 1 chữ a?
=SUBSTITUTE(A1,"aa","a")​
Cái đoạn text đó nằm trong A1.
 
Nếu có 2 chữ a liền nhau thì thay bằng 1 chữ a?
=SUBSTITUTE(A1,"aa","a")​
Cái đoạn text đó nằm trong A1.
Ở đầu bài em đã nói rõ là loại bỏ 2 ký tự "a" liền nhau mà. Công thức của bác mà ô A1 có 3 ký tự "a" liền nhau thì nó vẫn còn có 2 ký tự "a" liền nhau.
 
Ủa, vậy chớ cái câu này là câu gì?
Tôi có 1 tình huống nhỏ nhỏ thế này gửi các bác suy nghĩ chút cho vui.
- Dùng công thức của excel(Không dùng VBA), hãy loại bỏ 2 ký tự chữ "a" liền nhau trong 1 chuỗi(Tức là nếu có 2 ký tự "a" liền nhau thì thay bằng 1 thôi). Biết rằng chuỗi này không chứa các ký tự đặc biệt.
Nói rõ hơn đi.
Có 2 chữ a liền nhau thì giữ lại 1 chữ.
Vậy có 3 chữ a liền nhau thì giữ lại mấy chữ?
Rồi có 4, 5, 6, 7..... chữ a liền nhau ???
 
Lần chỉnh sửa cuối:
Ủa, vậy chớ cái câu này là câu gì?
Cái đó là để em giải thích khỏi 1 số người nhầm từ "loại bỏ" là bỏ đi luôn ý mà ;;;;;;;;;;;. Túm lại là sau khi công thức xử lý thì không được phép tồn tại 2 ký tự "a" liền nhau. Có nhiều ký tự liền nhau thì thay bằng 1 thôi.
 
Đây, ra rồi:
=REPLACE(A1, FIND("a", A1), LEN(A1) - LEN(SUBSTITUTE(A1, "a", "")), "a")​
Bi giờ bạn có nhập 1000 chữ a dính nhau ở trong ô A1, nó cũng chỉ còn một chữ a mà thôi.

Minh họa tí cho vui nè:
000-2331.jpg

Nhưng dính nhau một lần thôi nha, chứ bắt tìm hết những chỗ dính nhau để mà sửa thì công thức này chưa làm được.
 
Lần chỉnh sửa cuối:
Đây, ra rồi:
=REPLACE(A1, FIND("a", A1), LEN(A1) - LEN(SUBSTITUTE(A1, "a", "")), "a")
Bi giờ bạn có nhập 1000 chữ a dính nhau ở trong ô A1, nó cũng chỉ còn một chữ a mà thôi.

Minh họa tí cho vui nè:
000-2331.jpg

Nhưng dính nhau một lần thôi nha, chứ bắt tìm hết những chỗ dính nhau để mà sửa thì công thức này chưa làm được.
Không được, đã là loại bỏ thì có bao nhiêu loại bỏ bấy nhiêu chứ. 1 lần thì dễ quá :).
 
Tôi có 1 tình huống nhỏ nhỏ thế này gửi các bác suy nghĩ chút cho vui.
- Dùng công thức của excel(Không dùng VBA), hãy loại bỏ 2 ký tự chữ "a" liền nhau trong 1 chuỗi(Tức là nếu có 2 ký tự "a" liền nhau thì thay bằng 1 thôi). Biết rằng chuỗi này không chứa các ký tự đặc biệt.
Xin hỏi lại 1 lần cho rỏ: Trong chuổi có khoảng trắng không?
---------------
Nếu có thể xác nhận rằng chuổi cho trước không có khoảng trắng nào thì bài toán này dể rất nhiều ---> Trong khi chờ đợi, tôi giả định rằng trong chuổi có thể có khoảng trắng
Vậy, dựa vào giả thiết ban đầu:
Biết rằng chuỗi này không chứa các ký tự đặc biệt.
tôi thực hiện theo quy trình như sau:
1> Thêm vào 2 đầu chuổi 1 ký tự đặc biệt, chẳng hạn là CHAR(10) ---> (công đoạn sau sẽ thấy tác dụng về việc làm này)
2> Thay toàn bộ khoảng trắng thành ký tự đặc biệt nào đó, chẳng hạn là CHAR(13)
3> Thay ký tự "a" thành khoảng trắng
4> Dùng TRIM loại bỏ các khoảng trắng để chừa lại 1 khoảng trắng ---> Ở đây sẽ thấy tác dụng của công đoạn 1 trong trường hợp chử a đứng đầu chuổi
5> Thay các khoảng trắng còn lại thành ký tự "a"
6> Thay CHAR(10) thành rổng và CHAR(13) thành khoảng trắng
Tổng kết ta có:
PHP:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(CHAR(10)&A1&CHAR(10)," ",CHAR(13)),"a"," "))," ","a"),CHAR(10),""),CHAR(13)," ")
Các bạn kiểm tra lại xem
 

File đính kèm

Lần chỉnh sửa cuối:
Anh Ndu siêu thật.
Em đã nghĩ đến tác dụng của hàm TRIM: thay thế các khoảng trắng dư nhưng luôn chừa lại 1 khoảng trắng giữa những ký tự. Nhưng không nghĩ ra chuyện thay thế "a" thành khoảng trắng để xài được hàm TRIM nay.
Bái phục.
 
Xin hỏi lại 1 lần cho rỏ: Trong chuổi có khoảng trắng không?
---------------
Nếu có thể xác nhận rằng chuổi cho trước không có khoảng trắng nào thì bài toán này dể rất nhiều ---> Trong khi chờ đợi, tôi giả định rằng trong chuổi có thể có khoảng trắng
Vậy, dựa vào giả thuyết ban đầu:

tôi thực hiện theo quy trình như sau:
1> Thêm vào 2 đầu chuổi 1 ký tự đặc biệt, chẳng hạn là CHAR(10) ---> (công đoạn sau sẽ thấy tác dụng về việc làm này)
2> Thay toàn bộ khoảng trắng thành ký tự đặc biệt nào đó, chẳng hạn là CHAR(13)
3> Thay ký tự "a" thành khoảng trắng
4> Dùng TRIM loại bỏ các khoảng trắng để chừa lại 1 khoảng trắng ---> Ở đây sẽ thấy tác dụng của công đoạn 1 trong trường hợp chử a đứng đầu chuổi
5> Thay các khoảng trắng còn lại thành ký tự "a"
6> Thay CHAR(10) thành rổng và CHAR(13) thành khoảng trắng
Tổng kết ta có:
PHP:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(CHAR(10)&A1&CHAR(10)," ",CHAR(13)),"a"," "))," ","a"),CHAR(10),""),CHAR(13)," ")
Các bạn kiểm tra lại xem
Không còn gì phải bàn, NDU đã khai thác triệt để dữ kiện của đầu bài rồi ...
 
Web KT

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

Back
Top Bottom