Cần giúp: Xác định vị trí của ký tự tùy chọn trong chuỗi

Liên hệ QC

xuongrongdat

Có bao giờ bạn tự hỏi "Tôi là ai?"
Tham gia
30/6/08
Bài viết
1,704
Được thích
1,572
Donate (Momo)
Donate
Nghề nghiệp
Vô tư cùng bạn bè đi khắp nơi.
Nhờ mọi người giúp mình nhu cầu này với.
Ví dụ mình có chuỗi ký tự "Starring". Mình muốn viết hàm để xác định 2 việc:
1. Chữ "r" cuối cùng của chuỗi đứng vị trí thứ mấy? => 5.
2. Các chữ "r" trong chuỗi đứng ở những vị trí thứ mấy? => 4 5.

Mọi người xem file đính kèm ạ.

Xin cảm ơn.
 

File đính kèm

  • GPE135.xlsx
    9 KB · Đọc: 38
Công thức mảng
Mã:
B2=IFERROR(LEN(A2)-LEN(VLOOKUP("r*",RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2)))),1,))+1,)
Công thức thường
Mã:
C11=IFERROR(FIND("|",SUBSTITUTE($A11,"r","|",COLUMN(A1))),"")
 
Câu 2 C11=FIND("zzz",SUBSTITUTE($A11,"r","zzz",COLUMN()-2))
 
Lần chỉnh sửa cuối:
Công thức mảng
Mã:
B2=IFERROR(LEN(A2)-LEN(VLOOKUP("r*",RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2)))),1,))+1,)
Công thức thường
Mã:
C11=IFERROR(FIND("|",SUBSTITUTE($A11,"r","|",COLUMN(A1))),"")
Anh oi sai rùi nhé (Mặc dù công thức rất đúng, nhưng không phải chủ đề)
1603451296553.png
 
Lần chỉnh sửa cuối:
Nhờ mọi người giúp mình nhu cầu này với.
Ví dụ mình có chuỗi ký tự "Starring". Mình muốn viết hàm để xác định 2 việc:
1. Chữ "r" cuối cùng của chuỗi đứng vị trí thứ mấy? => 5.
2. Các chữ "r" trong chuỗi đứng ở những vị trí thứ mấy? => 4 5.

Mọi người xem file đính kèm ạ.

Xin cảm ơn.
Tuy công thức hơi dài nhưng bạn tham khảo
Mã:
=MAX(IFERROR(SEARCH("r";A2;ROW(A1:INDIRECT("A"&LEN(A2))));0))
 
Toàn bộ bảng chữ cái nào có 32 ký tự, bạn có thể cho biết được không? Nếu không có gì bất tiện, bạn gõ luôn ra đây được không?
Cần phân biệt.
1. Bảng chữ cái của tiếng Việt có 29 chữ cái: a, ă, â, b, c, d, đ, e, ê, g, h, i, k, l, m, n, o, ô, ơ, p, q, r, s, t, u, ư, v, x, y.

Những ai dùng f, j, w và z trong tiếng Việt là dùng sai, chả biết họ muốn chứng tỏ cái gì. Sự sành điệu, sự khác người? Dù sao trong tiếng Việt không có 4 ký tự ANSI f, j, w và z.

2. Tập chữ cái dùng trong công nghệ thông tin gồm 33 chữ cái được chỉ ra trong TCVN 6909-2001. So với bảng chữ cái tiếng Việt thì có thêm f, j, w, z.

chu cai.jpg
 
Nhờ mọi người giúp mình nhu cầu này với.
Ví dụ mình có chuỗi ký tự "Starring". Mình muốn viết hàm để xác định 2 việc:
1. Chữ "r" cuối cùng của chuỗi đứng vị trí thứ mấy? => 5.
2. Các chữ "r" trong chuỗi đứng ở những vị trí thứ mấy? => 4 5.

Mọi người xem file đính kèm ạ.

Xin cảm ơn.
Bạn xem thử, tự làm phần còn lại.
 

File đính kèm

  • GPE135.xlsx
    9.7 KB · Đọc: 6
Nhờ mọi người giúp mình nhu cầu này với.
Ví dụ mình có chuỗi ký tự "Starring". Mình muốn viết hàm để xác định 2 việc:
1. Chữ "r" cuối cùng của chuỗi đứng vị trí thứ mấy? => 5.
2. Các chữ "r" trong chuỗi đứng ở những vị trí thứ mấy? => 4 5.

Mọi người xem file đính kèm ạ.

Xin cảm ơn.

Nghịch tí như này
B2=LARGE(("r"=MID($A2,ROW($1:$100),1))*ROW($1:$100),COLUMN(A1)) CSE
C11=IFERROR(SMALL(IFERROR(IF("r"=MID($A11,ROW($1:$100),1),1,"")*ROW($1:$100),""),COLUMN(A$1)),"") CSE
 

File đính kèm

  • GPE135.xlsx
    9.9 KB · Đọc: 4
Anh oi sai rùi nhé (Mặc dù công thức rất đúng, nhưng không phải chủ đề)

Anh @huuthang_bd oi cho em hỏi cái dấu này ( "|")

ý nghĩa là gì đó hở anh?
@hongphuong1997 : anh ấy hiểu đúng ý mình rồi đó bạn. À, mình cũng muốn hỏi ảnh cái dấu đó, hồi giờ mình xài quài mà không biết nó để làm gì! :|

Cảm ơn mọi người nhiều. Ngay bài #2 đã giải quyết được vấn đề của mình rồi. Nhưng mình sẽ từ từ xem, thử hết công thức của mọi người hỗ trợ và phản hồi lại ạ.
 
Lần chỉnh sửa cuối:
À, mình cũng muốn hỏi ảnh cái dấu đó, hồi giờ mình xài quài mà không biết nó để làm gì! :|
Hiểu được triết lý của công thức thì sẽ hiểu ý nghĩa của ký tự "|" thôi.
Mã:
=IFERROR(FIND("|",SUBSTITUTE($A11,"r","|",COLUMN(A1))),"")

Tại sao lại phải dùng SUBSTITUTE, sao không dùng trực tiếp FIND: =FIND("r", $A11)? Bởi FIND chỉ tìm vị trí xuất hiện đầu tiên của "r". Kết luận: chỉ dùng được FIND trong 2 trường hợp:
1. Tìm vị trí xuất hiện ĐẦU TIÊN của ký tự nào đó, nếu ký tự đó có thể xuất hiện nhiều lần trong chuỗi.
2. Tìm vị trí của ký tự nào đó khi biết chắc là ký tự đó chỉ xuất hiện nhiều nhất là 1 lần trong chuỗi.

Do trong bài toán của thớt ký tự cần tìm có thể xuất hiện nhiều lần mà thớt lại cần tìm vị trí của từng lần xuất hiện (1, 2, ...) nên không thể dùng FIND với trường hợp 1. Nếu dùng FIND với trường hợp 2 thì trước tiên phải dùng SUBSTITUTE để thay ký tự cần tìm ở các vị trí lần lượt bằng 1 ký tự nào đó, sao cho có thể chắc chắn 300% là sau khi thay thế thì ký tự thay thế đó chỉ xuất hiện 1 lần DUY NHẤT trong chuỗi để có thể dùng FIND trường hợp 1. Đó là "tính chất" của ký tự thay thế - DUY NHẤT. Với đặc thù dữ liệu của thớt thì chọn "|" là ký tự thay thế là được. Còn với các trường hợp khác, khi dữ liệu nguồn có thể có chứa ký tự "|", thậm chí cả $, %, &, ^ thì ta vẫn chọn được ký tự thay thế sao cho nó là duy nhất để có thể dùng FIND - đó là ký tự vd. "#". Nếu cả ký tự "#" và những ký tự khác cũng có thể có trong dữ liệu nguồn thì vẫn có thể dùng "||", "|||" hoặc "#$%". Hiếm có dữ liệu nguồn nào chứa những cụm ký tự như thế, đúng không? Nếu cần thì thêm vào vài ký tự quái gở nữa.
 
@hongphuong1997 : anh ấy hiểu đúng ý mình rồi đó bạn. À, mình cũng muốn hỏi ảnh cái dấu đó, hồi giờ mình xài quài mà không biết nó để làm gì! :|

Cảm ơn mọi người nhiều. Ngay bài #2 đã giải quyết được vấn đề của mình rồi. Nhưng mình sẽ từ từ xem, thử hết công thức của mọi người hỗ trợ và phản hồi lại ạ.
Anh có lẽ nên test thử "Right"
Bài đã được tự động gộp:

Em bổ sung thêm tý cho nó hoàn thiện dựa trên công thức bác Thắng:
PHP:
=IFERROR(FIND("|",SUBSTITUTE(UPPER($A11),"R","|",COLUMN(A1))),"")
Bài đã được tự động gộp:

Để cho nó đồng bộ, B2 anh cũng có thể sử dụng công thức:
PHP:
=FIND("|",SUBSTITUTE(UPPER(A2),"R","|",LEN(A2)-LEN(SUBSTITUTE(UPPER(A2),"R",""))))
 
Lần chỉnh sửa cuối:
Công thức mảng
Mã:
B2=IFERROR(LEN(A2)-LEN(VLOOKUP("r*",RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2)))),1,))+1,)
Công thức thường
Mã:
C11=IFERROR(FIND("|",SUBSTITUTE($A11,"r","|",COLUMN(A1))),"")
Hôm nay em xem lại công thức mảng này của anh có chỗ chưa hiểu, công thức thường thì em hiểu rồi.
Em hiểu giải thuật của anh (mặc dù không biết sao anh lại nghĩ ra giải thuật đó, hi).
Đoạn Vlookup á anh, tại sao kết quả đoạn đó nó lại ra là "ring" vậy anh? Em có tạo dữ liệu ra chỗ mới thì ra được có "ing" hà. Trong hàm Vlookup anh bỏ đối số cuối cùng thì nó mặc định là số 1 dò tương đối, nó sẽ trả kết quả đúng tương đối đầu tiên khi gặp trong dãy dò đúng không anh?
1621653581739.png
Không biết em biểu diễn ra vầy thì có đúng giống cách tạo mảng (table) trong công thức anh không?

PS: xưa nay em toàn dùng Vlookup để dò cột thứ mấy trong 1 bảng nhiều cột thôi, chưa bao giờ dùng để dò 1 cột như này.
 
Đoạn Vlookup á anh, tại sao kết quả đoạn đó nó lại ra là "ring" vậy anh? Em có tạo dữ liệu ra chỗ mới thì ra được có "ing" hà. Trong hàm Vlookup anh bỏ đối số cuối cùng thì nó mặc định là số 1 dò tương đối, nó sẽ trả kết quả đúng tương đối đầu tiên khi gặp trong dãy dò đúng không anh?
Tôi dò tìm tuyệt đối chứ đâu phải tương đối, bạn thấy trong công thức của tôi sau số 1 có dấu phẩy không.
 
Tôi dò tìm tuyệt đối chứ đâu phải tương đối, bạn thấy trong công thức của tôi sau số 1 có dấu phẩy không.
Em thử lại cú pháp giống anh thì được rồi. Để trống nó sẽ tự hiểu là 0, dò chính xác:
1621655188809.png

Mà sao support Microsoft lại lưu ý dòng em tô đỏ này kỳ vậy ta:
1621655169915.png

À, nếu để vào dấu ngăn cách đối số (phẩy hoặc chấm phẩy) mà không điền 0 hoặc 1 thì nó hiểu chỗ đó là 0. Còn mà không để dấu ngăn cách đối số luôn thì nó hiểu chỗ đó là số 1. Lạ thiệt.
 
Web KT
Back
Top Bottom