Lấy số trong các chuỗi theo điều kiện (1 người xem)

Liên hệ QC

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

Xin chào các bạn!
Các bạn giúp mình hàm này với nhé
mình có file đính kèm
Xin trân thành cảm ơn các bạn!
Thử:
Mã:
E3=IFERROR(1/(1/SUM(MMULT(N(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100))=F3),ROW($1:$26)^0)))&"-"&F3&"-K","0-K-"&F3)
Enter, fill xuống.

Thân
 

File đính kèm

Thử:
Mã:
E3=IFERROR(1/(1/SUM(MMULT(N(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100))=F3),ROW($1:$26)^0)))&"-"&F3&"-K","0-K-"&F3)
Enter, fill xuống.

Thân
Cảm ơn bạn @
Phan Thế Hiệp
Mình mới vào và đã được đọc các hàm của bạn xử dụng rất hay.
nhưng hàm dài quá bạn ơi, đôi khi sử dụng khó quá
Bạn cho mình hỏi là cái hàm Countif() mình sử dụng để đếm thấy sai bạn à
Bạn giải thích giúp mình sao nó lại sai?
Cảm ơn bạn nhé
 
Cảm ơn bạn @
Phan Thế Hiệp
Mình mới vào và đã được đọc các hàm của bạn xử dụng rất hay.
nhưng hàm dài quá bạn ơi, đôi khi sử dụng khó quá
Bạn cho mình hỏi là cái hàm Countif() mình sử dụng để đếm thấy sai bạn à
Bạn giải thích giúp mình sao nó lại sai?
Cảm ơn bạn nhé
=COUNTIF($C$5:$C$17,"*"&F3&"*") nếu tìm thấy ký tự cần tìm (Vd: F3=15) thì chỉ đếm được:
  • Ô C5: "00;01;02;03;15;16;17;17"--> 15 xuất hiện 1 lần=> đếm 1
  • Ô C15: "03,03,15,15,15,15," --> 15 xuất hiện 4 lần=> tuy nhiên chỉ đếm 1 lần (cho số 15 đầu tiên) => đếm 1
  • Vậy tổng cộng đếm được = 2
  • Còn công thức tôi gửi bạn là đếm theo từng ô chứa ký tự đã được cắt ra, nên nó sẽ đếm đủ, Vd: ký tự "15" nó đếm 5
Thân
 
Trời ơi, từ trước tới nay mình toàn dùng công thức trên để đếm trong chuỗi,và mình cũng đã phát hiện ra nó sai sai
Hôm nay bạn giải thích thì mình mới hiểu
Cảm ơn bạn.
Vậy thì dùng hàm nào để thay thế hàm COUNTIF($C$5:$C$17,"*"&F3&"*")
Bạn chỉ dẫn giúp mình với nhé.
(Mặc dù đây là ý phụ của bài chính)
Bài đã được tự động gộp:

Thử:
Mã:
E3=IFERROR(1/(1/SUM(MMULT(N(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100))=F3),ROW($1:$26)^0)))&"-"&F3&"-K","0-K-"&F3)
Enter, fill xuống.

Thân
Mình gửi lại bài như này, bạn đang hiểu lầm ý của mình (Bởi mình chưa giải thích rõ ý)
 

File đính kèm

Lần chỉnh sửa cuối:
Trời ơi, từ trước tới nay mình toàn dùng công thức trên để đếm trong chuỗi,và mình cũng đã phát hiện ra nó sai sai
Hôm nay bạn giải thích thì mình mới hiểu
Cảm ơn bạn.
Vậy thì dùng hàm nào để thay thế hàm COUNTIF($C$5:$C$17,"*"&F3&"*")
Bạn chỉ dẫn giúp mình với nhé.
(Mặc dù đây là ý phụ của bài chính)
Công thức bài #4 có thể rút gọn chút:
Mã:
E3=IFERROR(1/(1/SUMPRODUCT(N(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100))=F3)))&"-"&F3&"-K","0-K-"&F3)
Enter, fill xuống.

Thân
 
Công thức bài #4 có thể rút gọn chút:
Mã:
E3=IFERROR(1/(1/SUMPRODUCT(N(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100))=F3)))&"-"&F3&"-K","0-K-"&F3)
Enter, fill xuống.

Thân
Bạn
Phan Thế Hiệp
ơi, đấy không phải kết quả mình mong muốn (Bởi vì mình không nói rõ ý)
Bạn xem lại file giúp mình nhé!
 

File đính kèm

Bạn
Phan Thế Hiệp
ơi, đấy không phải kết quả mình mong muốn (Bởi vì mình không nói rõ ý)
Bạn xem lại file giúp mình nhé!
Thử:
Mã:
L2=JoinText(";",IF(FREQUENCY(IFERROR(MATCH(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100)),$F$3:$F$103,),""),ROW($1:$100))>=1,$F$3:$F$103,1/0))
L3=JoinText(";",IF(FREQUENCY(IFERROR(MATCH(TRIM(MID(SUBSTITUTE(SUBSTITUTE($C$5:$C$17,";",","),",",REPT(" ",100)),(COLUMN($A:$Z)-1)*100+1,100)),$F$3:$F$103,),""),ROW($1:$100))<1,$F$3:$F$103,1/0))
Kết thúc bằng Ctrl+Shift+Enter.

Xem file kèm, có giải thích 1 phần của công thức cũ.

Thân
 

File đính kèm

Trời ơi, từ trước tới nay mình toàn dùng công thức trên để đếm trong chuỗi,và mình cũng đã phát hiện ra nó sai sai
...

Mình gửi lại bài như này, bạn đang hiểu lầm ý của mình (Bởi mình chưa giải thích rõ ý)
Không biết có hiểu ý bạn không.

Trong bài của bạn không cần đếm cụ thể. Chỉ cần biết >= 1 hay = 0 (<1).

Công thức cho A1
Mã:
=jointext(";",TRUE,IF(COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")>0,$F$3:$F$102,""))
Công thức cho A2
Mã:
=jointext(";",TRUE,IF(COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")<1,$F$3:$F$102,""))

Cả 2 công thức kết thúc bằng Ctrl + Shift + Enter.

Hàm JoinText bạn xen ở bài #10. Hoặc tự viết, vì chỉ là nối chuỗi thôi.
 
Không biết có hiểu ý bạn không.

Trong bài của bạn không cần đếm cụ thể. Chỉ cần biết >= 1 hay = 0 (<1).

Công thức cho A1
Mã:
=jointext(";",TRUE,IF(COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")>0,$F$3:$F$102,""))
Công thức cho A2
Mã:
=jointext(";",TRUE,IF(COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")<1,$F$3:$F$102,""))

Cả 2 công thức kết thúc bằng Ctrl + Shift + Enter.

Hàm JoinText bạn xen ở bài #10. Hoặc tự viết, vì chỉ là nối chuỗi thôi.
Cảm ơn bạn
batman1

Chúc bạn ngày mới và cuối tuần mạnh khỏe có nhiều điều vui.


đúng là như vậy bạn ơi, nhưng công thức COUNTIF đang bị sai, vì vậy nhờ bạn dùng công thức khác giúp mình với nhé
 
Hàm Trong file:
Mã:
Function JoinText(ByVal Delimiter As String, ParamArray Arrays()) As String
  Dim aDest()   As Variant
  Dim aSub      As Variant
  Dim item      As Variant
  Dim idx       As Long
  Dim n         As Long
  Dim sItem     As String
  'On Error Resume Next
  For n = LBound(Arrays) To UBound(Arrays)
    aSub = Arrays(n)
    If Not IsArray(aSub) Then aSub = Array(aSub)
    For Each item In aSub
      If TypeName(item) <> "Error" Then
        sItem = CStr(item)
        idx = idx + 1
        ReDim Preserve aDest(1 To idx)
        aDest(idx) = sItem
      End If
    Next
  Next
  If idx Then JoinText = Join(aDest, Delimiter)
End Function
Nên cách sử dụng không có TRUE và cuối là tạo lỗi 1/0:

=JoinText(";",IF(COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")>0,$F$3:$F$102,1/0))
 
Hàm Trong file:
Mã:
Function JoinText(ByVal Delimiter As String, ParamArray Arrays()) As String
  Dim aDest()   As Variant
  Dim aSub      As Variant
  Dim item      As Variant
  Dim idx       As Long
  Dim n         As Long
  Dim sItem     As String
  'On Error Resume Next
  For n = LBound(Arrays) To UBound(Arrays)
    aSub = Arrays(n)
    If Not IsArray(aSub) Then aSub = Array(aSub)
    For Each item In aSub
      If TypeName(item) <> "Error" Then
        sItem = CStr(item)
        idx = idx + 1
        ReDim Preserve aDest(1 To idx)
        aDest(idx) = sItem
      End If
    Next
  Next
  If idx Then JoinText = Join(aDest, Delimiter)
End Function
Nên cách sử dụng không có TRUE và cuối là tạo lỗi 1/0:

=JoinText(";",IF(COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")>0,$F$3:$F$102,1/0))
Cảm ơn bạn @phuocam chúc bạn buổi sớm và cuối tuần vui vẻ, mạnh khỏe
Bạn ơi công thức COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*") là hàm đếm bị sai, vì vậy mong bạn viết giúp hàm khác giúp mình nhé
Cảm ơn bạn rất nhiều!
 
Cảm ơn bạn
batman1

Chúc bạn ngày mới và cuối tuần mạnh khỏe có nhiều điều vui.


đúng là như vậy bạn ơi, nhưng công thức COUNTIF đang bị sai, vì vậy nhờ bạn dùng công thức khác giúp mình với nhé
Tôi không hiểu bạn nói gì.
Bạn có cần đếm đâu. Và tôi cũng không cần đếm chính xác. Chỉ cần biết có >= 1 hay không. Vì thế dùng COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")>0 được. Cho dù xuất hiện 1, 2 hay 100 lần chăng nữa thì cũng chả cần quan tâm. COUNTIF ở trên sẽ trả về TRUE nếu Fxyz xuất hiện ÍT NHẤT 1 lần. Thế là đủ, đâu cần đếm chính xác?

Cái mà bạn cần kiểm tra là xem kết quả "00;01..." có đúng ý không thôi. Nếu đúng ý thì đừng bắt người khác phải dùng hàm khác hay vẫn dùng COUNTIF nhưng phải theo ý mình. Chuyện bạn nhờ thì chỉ cần kết quả. Phương pháp thì hãy để người khác tự lựa chọn.
 
Tôi không hiểu bạn nói gì.
Bạn có cần đếm đâu. Và tôi cũng không cần đếm chính xác. Chỉ cần biết có >= 1 hay không. Vì thế dùng COUNTIF($C$5:$C$17,"*"&$F$3:$F$102&"*")>0 được. Cho dù xuất hiện 1, 2 hay 100 lần chăng nữa thì cũng chả cần quan tâm. COUNTIF ở trên sẽ trả về TRUE nếu Fxyz xuất hiện ÍT NHẤT 1 lần. Thế là đủ, đâu cần đếm chính xác?

Cái mà bạn cần kiểm tra là xem kết quả "00;01..." có đúng ý không thôi. Nếu đúng ý thì đừng bắt người khác phải dùng hàm khác hay vẫn dùng COUNTIF nhưng phải theo ý mình. Chuyện bạn nhờ thì chỉ cần kết quả. Phương pháp thì hãy để người khác tự lựa chọn.
Bạn ơi, nếu nó đã đếm không chính xác rồi thì làm sao tin được kết quả là đúng hay sai?
Ví dụ có số trong dãy nhưng nó đếm =0 thì kết quả bị sai bạn à
Và điều mình muốn nữa là không chỉ dùng đếm cho trường hợp >1 hay <1
Mà có thể cho >; < với bát kỳ số nào
Vậy mong bạn giúp đỡ nhé
Cảm ơn bạn!
 
Bạn ơi, nếu nó đã đếm không chính xác rồi thì làm sao tin được kết quả là đúng hay sai?
Ví dụ có số trong dãy nhưng nó đếm =0 thì kết quả bị sai bạn à
Và điều mình muốn nữa là không chỉ dùng đếm cho trường hợp >1 hay <1
Mà có thể cho >; < với bát kỳ số nào
Vậy mong bạn giúp đỡ nhé
Cảm ơn bạn!
Theo file bài 1, đếm chính xác
Mã:
G3=SUMPRODUCT((LEN($C$5:$C$17)-LEN(SUBSTITUTE($C$5:$C$17,F3,"")))/LEN(F3))
 
Theo file bài 1, đếm chính xác
Mã:
G3=SUMPRODUCT((LEN($C$5:$C$17)-LEN(SUBSTITUTE($C$5:$C$17,F3,"")))/LEN(F3))
Cảm ơn bạn
công thức này đúng nhưng khi gắp các lỗi #N/A thì công thức cũng sẽ bị lỗi
Bởi vì các vùng tham chiếu của mình có đặt công thức, nên các lỗi #N/A là hay thơngf gặp

 
Bạn ơi, nếu nó đã đếm không chính xác rồi thì làm sao tin được kết quả là đúng hay sai?
Ví dụ có số trong dãy nhưng nó đếm =0 thì kết quả bị sai bạn à

Vậy mong bạn giúp đỡ nhé
Cảm ơn bạn!
Tôi biết là bạn lười, và bạn nghĩ là không được nên không thử làm như tôi hướng dẫn.

Thôi tôi đính kèm tập tin.

Tôi đã nói là bài của bạn chỉ có 2 trường hợp: >= 1 hoặc 0. Vậy thì cần gì đếm chính xác?

Tôi cho bạn bài toán: Nếu trong đám đông 10000 người có >= 1 người tóc vàng mắt xanh thì bạn vào nhà băng lĩnh 10 triệu.

Bạn sẽ làm thế nào? Tất nhiện là bạn sẽ kiểm tra người 1. Nếu không là tóc vàng mắt xanh thì kiểm tra người 2, và cứ thế tiếp tục. Giả sử người 50 có tóc vàng mắt xanh thì bạn vẫn cứ kiểm tra tiếp tới người 10000 hay là bạn thôi kiểm tra và đi nhà băng lĩnh tiền?

Xem tập tin đính kèm
Và điều mình muốn nữa là không chỉ dùng đếm cho trường hợp >1 hay <1
Mà có thể cho >; < với bát kỳ số nào
Đây là ý mà bây giờ bạn mới thêm vào.

Khi tôi làm là tôi làm cho bài toán cụ thể mà bạn nêu rõ 2 trường hợp là >= 1 và < 1. Tính tôi không thích chơi trò "thông tin nhỏ giọt". Tôi không tham gia thêm nữa.
-------------
Tới bài này mới cần đếm chính xác.

Ý tưởng và làm vội, không suy nghĩ nhiều. Không nghĩ thêm nữa. Nhưng tôi nghĩ có thể rút gọn nữa.
Mã:
=jointext(",",TRUE,IF(TRANSPOSE(MMULT(--TRANSPOSE(ROW($5:$17)>0),LEN($C$5:$C$17)-LEN(SUBSTITUTE($C$5:$C$17,TRANSPOSE($F$3:$F$102),"*"))))>=2,$F$3:$F$102,""))
Tôi không tham gia nữa vì tôi đã nhìn thấy là bạn chơi trò "thông tin nhỏ giọt"


Tôi tôi xin rút lui.
 

File đính kèm

Web KT

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

Back
Top Bottom