Cách tính số kí tự trùng nhau của 2 ô

Liên hệ QC

phuongvq123

Thành viên tiêu biểu
Tham gia
15/4/20
Bài viết
524
Được thích
331
Chào các thành viên
Em có yêu cầu như sau:
Ô A1 dữ liệu là : Nguyễn Văn An 1988
ô B1 dữ liệu là : Nguyễn Văn Anh 2008
Lấy ô A1 là chuẩn, đếm số lượng kí tự của B1 xuất hiện trong ô A1, bỏ qua dấu cách
Cảm ơn mọi người
 
nếu yêu cầu như của anh thì có công thức không ạ
Nhân tiện bạn hỏi như trên, tôi cũng muốn mời các anh em yêu thích công thức mảng cùng tham gia trao đổi giải thuật và công thức giải bài toán này cho vui, cụ thể điều kiện như sau:
  1. (Như yêu cầu của bài #1): ô A1 dữ liệu là : Nguyễn Văn An 1988, ô B1 dữ liệu là : Nguyễn Văn Anh 20888
    Lấy ô A1 là chuẩn, đếm các cặp có tương quan đối ứng 1:1 giữa A1 và B1, bỏ qua các khoảng trắng.
  2. Phân biệt chữ hoa và thường.
  3. Chỉ dùng công thức cho ra kết quả tại cột C (Xem thêm kết quả tính tay trong file kèm).
Chúc anh em ngày vui.
/-*+//-*+//-*+/
 

File đính kèm

  • DemKyTuDoiUng11.xlsb
    7.9 KB · Đọc: 27
Trong khi chờ anh em tham gia giải pháp, tôi xin đưa trước giải thuật của mình, như sau:
  • Tạo một mảng tính toán sao cho kết quả cuối cùng chính là số lần tuần tự xuất hiện của từng ký tự trong chuỗi A1 (phân biệt chữ hoa, thường):
  • N<-->1
    g<-->1
    u<-->1
    y<-->1
    <-->1
    n<-->1
    <-->1
    V<-->1
    ă<-->1
    n<-->2
    <-->2
    A<-->1
    n<-->3
    <-->3
    1<-->1
    9<-->1
    8<-->1
    8<-->2
  • Kế tiếp sẽ lấy từng ký tự trong chuỗi A1 tìm trong chuỗi B1 tương ứng theo thứ tự số lần xuất hiện (chứa trong mảng trên).
  • Đếm các kết quả tìm thấy đã loại trừ ra kết quả khoảng trắng.
Chúc anh em ngày vui.
/-*+//-*+//-*+/
 
Trong khi chờ anh em tham gia giải pháp, tôi xin đưa trước giải thuật của mình, như sau:
  • Tạo một mảng tính toán sao cho kết quả cuối cùng chính là số lần tuần tự xuất hiện của từng ký tự trong chuỗi A1 (phân biệt chữ hoa, thường):
  • N<-->1
    g<-->1
    u<-->1
    y<-->1
    <-->1
    n<-->1
    <-->1
    V<-->1
    ă<-->1
    n<-->2
    <-->2
    A<-->1
    n<-->3
    <-->3
    1<-->1
    9<-->1
    8<-->1
    8<-->2
  • Kế tiếp sẽ lấy từng ký tự trong chuỗi A1 tìm trong chuỗi B1 tương ứng theo thứ tự số lần xuất hiện (chứa trong mảng trên).
  • Đếm các kết quả tìm thấy đã loại trừ ra kết quả khoảng trắng.
Chúc anh em ngày vui.
/-*+//-*+//-*+/
Nếu bàn về thuật toán thì tôi thấy có 2 cách để làm bài này:
1. Xác định tần suất xuất hiện của các kí tự như countif tăng dần dùng SUBSTITUTE và LEN sau đó CONCATENATE tần suất và kí tự cho cả chuỗi A1, B1. Sau đó EXACT để so sánh 2 mảng sẽ được cái mảng 2 chiều , sau đó MMULT rồi SUM lại là được, ngoài ra có thể dùng SUBSTITUTE B1 theo A1 với tần suất của A1 rồi dùng LEN để so sánh
2. Đếm tổng số lần xuất hiện của từng chữ cái của A1, B1 bởi A1 rồi tính chênh lệch, ví dụ kí tự "n" xuất hiện ở A1 3 lần, ở B1 2 lần, thì chênh lệch là 1. Sau đó lấy LEN A1 trừ tổng chênh lệch là được, tôi nghĩ cách này sẽ ngắn hơn cách 1
 
Lần chỉnh sửa cuối:
Trong khi chờ anh em tham gia giải pháp, tôi xin đưa trước giải thuật của mình, như sau:
  • Tạo một mảng tính toán sao cho kết quả cuối cùng chính là số lần tuần tự xuất hiện của từng ký tự trong chuỗi A1 (phân biệt chữ hoa, thường):
  • N<-->1
    g<-->1
    u<-->1
    y<-->1
    <-->1
    n<-->1
    <-->1
    V<-->1
    ă<-->1
    n<-->2
    <-->2
    A<-->1
    n<-->3
    <-->3
    1<-->1
    9<-->1
    8<-->1
    8<-->2
  • Kế tiếp sẽ lấy từng ký tự trong chuỗi A1 tìm trong chuỗi B1 tương ứng theo thứ tự số lần xuất hiện (chứa trong mảng trên).
  • Đếm các kết quả tìm thấy đã loại trừ ra kết quả khoảng trắng.
Chúc anh em ngày vui.
/-*+//-*+//-*+/
Tưởng đối ứng 1:1 phải như này chứ nhỉ
1623726085449.png
 
Công thức dài thòong. Quá rảnh...


.
Có anh em tham gia góp mặt là vui rồi, không cần phải đo chiều dài công thức đâu, công thức nào cũng quý cả. Thật lòng chỉ muốn trao đổi giải thuật cho vui và nhờ vậy học thêm được tư duy hay của anh em.

Do giờ bận bù đầu, chắc đến cuối tuần này sẽ gửi file có công thức góp vui với anh em, có giải trình chi tiết cho anh em khác mới bắt đầu tìm hiểu về công thức mảng

Chúc anh em ngày vui
/-*+//-*+//-*+/
Bài đã được tự động gộp:

Nếu bàn về thuật toán thì tôi thấy có 2 cách để làm bài này:
1. Xác định tần suất xuất hiện của các kí tự như countif tăng dần dùng SUBSTITUTE và LEN sau đó CONCATENATE tần suất và kí tự cho cả chuỗi A1, B1. Sau đó EXACT để so sánh 2 mảng sẽ được cái mảng 2 chiều , sau đó MMULT rồi SUM lại là được, ngoài ra có thể dùng SUBSTITUTE B1 theo A1 với tần suất của A1 rồi dùng LEN để so sánh
2. Đếm tổng số lần xuất hiện của từng chữ cái của A1, B1 bởi A1 rồi tính chênh lệch, ví dụ kí tự "n" xuất hiện ở A1 3 lần, ở B1 2 lần, thì chênh lệch là 1. Sau đó lấy LEN A1 trừ tổng chênh lệch là được, tôi nghĩ cách này sẽ ngắn hơn cách 1
Công thức của tôi trùng với ý 1 của bạn, làm cả hai cách: dùng mảng 1 chiều, và cách dùng mảng 2 chiều.

Thân
/-*+//-*+//-*+/
Bài đã được tự động gộp:

Tưởng đối ứng 1:1 phải như này chứ nhỉ
View attachment 260671
1 ký tự của A1 chỉ được tương ứng 1 lần với cùng ký tự của B1.

Thân
 
Lần chỉnh sửa cuối:
Góp vui với công thức để "Đếm ký tự trùng đối ứng 1:1", như sau:
1/ Không canh theo độ dài chuỗi:
Mã:
=COUNT(1/(LEN(B1)-LEN(SUBSTITUTE(B1,MID(A1,ROW($1:$20),1),"",ROW($1:$20)-LEN(SUBSTITUTE(LEFT(A1,ROW($1:$20)),MID(A1,ROW($1:$20),1),"")))))/(MID(A1,ROW($1:$20),1)<>" "))
Kết thúc bằng Ctrl+Shift+Enter.​

2/ Canh theo độ dài chuỗi:
  • Cách 1: (Mảng 1 chiều)
    Mã:
    =COUNT(1/(LEN($B1)-LEN(SUBSTITUTE(B1,MID($A1,ROW(OFFSET($A$1,,,LEN($A1))),1),"",ROW(OFFSET($A$1,,,LEN($A1)))-LEN(SUBSTITUTE(LEFT($A1,ROW(OFFSET($A$1,,,LEN($A1)))),MID($A1,ROW(OFFSET($A$1,,,LEN($A1))),1),"")) )))/(MID($A1,ROW(OFFSET($A$1,,,LEN($A1))),1)<>" "))
    Kết thúc bằng Ctrl+Shift+Enter.
  • Cách 2: (Mảng 2 chiều)
    Mã:
    =COUNT(FIND("|",SUBSTITUTE(B1,MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1),"|",MMULT(EXACT(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1),MID(LEFT(A1,ROW(OFFSET($A$1,,,LEN(A1)))),COLUMN(OFFSET($A$1,,,,LEN($A1))),1))*1,ROW(OFFSET($A$1,,,LEN(A1)))^0)))/(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)<>" "))
    Kết thúc bằng Ctrl+Shift+Enter.
  • Dùng 'Name' để gói gọn dễ nhìn:
    Mã:
    =COUNT(1/(LEN(B1)-LEN(SUBSTITUTE(B1,M1_MangChuan,"",M1_Dong-LEN(SUBSTITUTE(M1_MangTuanTu,M1_MangChuan,"")))))/(M1_MangChuan<>" "))
    Kết thúc bằng Ctrl+Shift+Enter. Hoặc:
    Mã:
    =COUNT(FIND("|",SUBSTITUTE(B1,M1_MangChuan,"|",MMULT(EXACT(M1_MangChuan,MID(M1_MangTuanTu,M1_Cot,1))*1,M1_Dong^0)))/(M1_MangChuan<>" "))
    Kết thúc bằng Ctrl+Shift+Enter.
Chúc anh em ngày vui.
/-*+//-*+//-*+/
 

File đính kèm

  • DemKyTuDoiUng11.xlsb
    12.9 KB · Đọc: 15
Web KT

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

Back
Top Bottom