Nhờ các anh(chị) tạo giùm cái code lấy những số trùng trong 3 ô. (1 người xem)

Liên hệ QC

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

Huy Hoàng 12

Thành viên mới
Tham gia
23/1/18
Bài viết
8
Được thích
0
Giới tính
Nam
Em có A1=85,56,08,40,39,29,25,22,06,04,99,98,89,82,88,84,07,87,52,02,00
B1=85,56,89,82,88,84,07,87,52,02,00,70,44,19,12,94,86,80,58,54
C1=94,86,80,58,88,84,07,87,52,02,00,70,44,19,12,54,50,40,39,29,25,22,06,04,99,98
Mong muốn ô D1= aa,bb,cc,ff,...... những số có ở cả 3 ô (trùng nhau) A1,B1,C1.
Em xin cảm ơn?
 
Lần chỉnh sửa cuối:
Em có A1=85,56,08,40,39,29,25,22,06,04,99,98,89,82,88,84,07,87,52,02,00
B1=85,56,89,82,88,84,07,87,52,02,00,70,44,19,12,94,86,80,58,54
C1=94,86,80,58,88,84,07,87,52,02,00,70,44,19,12,54,50,40,39,29,25,22,06,04,99,98
Mong muốn ô D1= aa,bb,cc,ff,...... những số có ở cả 3 ô (trùng nhau) A1,B1,C1.
Em xin cảm ơn?
Những con số trên là số gì vậy?
 
Upvote 0
Em có A1=85,56,08,40,39,29,25,22,06,04,99,98,89,82,88,84,07,87,52,02,00
B1=85,56,89,82,88,84,07,87,52,02,00,70,44,19,12,94,86,80,58,54
C1=94,86,80,58,88,84,07,87,52,02,00,70,44,19,12,54,50,40,39,29,25,22,06,04,99,98
Mong muốn ô D1= aa,bb,cc,ff,...... những số có ở cả 3 ô (trùng nhau) A1,B1,C1.
Em xin cảm ơn?
Cái này có liên quan tới Viết.......Lót không ta? Nghi ngờ quá!
 
Upvote 0
Hình như bạn này trình bày vấn đề chưa chính xác thì fải!
:;;;:::
 
Upvote 0
Nhìn thì biết vì ết lột, đế số đành rồi chứ còn gì nữa mà hỏi.

Bài này giải thuật cần một chút tiểu xảo. Nếu chỉ đếm số lần xuất hiện thì sẽ sai vì có những số xuất hiện trong 1 dãy 2 lần.
Vì vậy tuy toi khong khuyến khích đế đành nhưng toi vẫn trình bày tiểu xảo. Mục đích trao đổi giải thuật.

PHP:
Function TrungSo(ByVal cacChuoi As String) As String
' code đếm các số xuất hiện trong cả các dãy số '
' cacChuoi: chuỗi các dãy số, mỗi số phân biệt bằng dấu phẩy, mỗi chuỗi phân biệt bằng dấu chấm phẩy '
' hàm trả về chuỗi kết quả là dãy số xuất hiện đủ trong tất các các chuỗi '
Const DELIM = ","
Const DELIM2 = ";"
Dim cacTri(0 To 99) As Integer
Dim s1, s2, i1 As Integer, dem As Integer
Dim tri As Integer
dem = UBound(Split(cacChuoi, DELIM2)) + 1
For Each s1 In Split(cacChuoi, DELIM2)
    i1 = i1 + 1 ' thứ tự của chuỗi '
    For Each s2 In Split(s1, DELIM)
        tri = Val(s2)
        If cacTri(tri) = i1 - 1 Then ' tiểu xảo là chỗ này, nó tránh đếm dư '
            If i1 = dem Then TrungSo = TrungSo & DELIM & tri
            cacTri(tri) = cacTri(tri) + 1
        End If
    Next s2
Next s1
If Len(TrungSo) > 0 Then TrungSo = Mid(TrungSo, 2)
End Function

sử dụng:
=TrungSo(A1&";"&B1&";"&C1)

Chú: code này chỉ dùng để trao đổi giải thuật cho nên không cần phải viết cho hoành tráng, áp dụng nhiều trường hợp cho nó mất công.
 
Upvote 0
Góp vui một cách:
Mã:
Public Function Trung3(strA As String, strB As String, strC As String) As String
Dim i As Integer, temp As String
If Len(strA) = 0 Or Len(strB) = 0 Or Len(strC) = 0 Then Exit Function
For i = 0 To 99
    temp = Format(i, "00")
    If InStr(strA, temp) > 0 Then
        If InStr(strB, temp) > 0 Then
            If InStr(strC, temp) > 0 Then
                Trung3 = Trung3 & "," & temp
            End If
        End If
    End If
 Next i
 If Len(Trung3) > 0 Then Trung3 = Mid(Trung3, 2)
Cách dùng:
=trung3(A1,B1,C1)
 
Upvote 0
hihi. Em không chơi với vì ết lột. Cảm ơn các bác.:D:D. e làm thế để xem thằng nào chơi nhiều em chuyển bảng. Đa tạ đa tạ các bác.
 
Upvote 0
hihi. Em không chơi với vì ết lột. Cảm ơn các bác.:D:D. e làm thế để xem thằng nào chơi nhiều em chuyển bảng. Đa tạ đa tạ các bác.

Cảm ơn thì cảm ơn, không thì thôi. Riêng từ đa tạ thì bạn dùng với ngừoi khác đi, nếu nó có qua tôi thì tôi xin trả lại cho bạn.
Hồi tôi còn học trung học, từ đa tạ dùng để chọc ngừoi khác. (Từ tạ có nghĩa bóng khá xấu, đa tạ là làm việc đó nhiều)
 
Lần chỉnh sửa cuối:
Upvote 0
Có cách nào không bị giới hạn số chuỗi truyền vào không anh?
Thử code
Mã:
Function SoTrung(ParamArray dArr())
  Dim i As Long, ik As Long, k As Integer
  Dim Arr(0 To 99), s As Variant, sArr()
  On Error Resume Next
  For i = LBound(dArr) To UBound(dArr)
    k = k + 1
    s = Split("," & dArr(i), ",")
    For j = 1 To UBound(s)
      If Arr(s(j)) = k - 1 Then Arr(s(j)) = k
    Next j
  Next i
  For i = 0 To 99
    If Arr(i) = k Then
      ReDim Preserve sArr(ik)
      sArr(ik) = Format(i, "00")
      ik = ik + 1
    End If
  Next i
  SoTrung = Join(sArr, ",")
End Function
 

File đính kèm

Upvote 0
Cảm ơn thì cảm ơn, không thì thôi. Riêng từ đa tạ thì bạn dùng với ngừoi khác đi, nếu nó có qua tôi thì tôi xin trả lại cho bạn.
Hồi tôi còn học trung học, từ đa tạ dùng để chọc ngừoi khác. (Từ tạ có nghĩa bóng khá xấu, đa tạ là làm việc đó nhiều)
Có lẽ bác mẫn cảm với từ đó nên không thích. Nhưng không sao, em nói với tấm lòng thật. Bác mà cứ tách từ ra để hiểu thì hơi khó cho người nói chuyện.
 
Upvote 0
Có lẽ bác mẫn cảm với từ đó nên không thích. Nhưng không sao, em nói với tấm lòng thật. Bác mà cứ tách từ ra để hiểu thì hơi khó cho người nói chuyện.

Tôi chỉ ưng tiếng Việt. Tôi đâu có đòi tiếng Tây tiếng Tàu đâu mà bảo là "khó cho người nói chuyện".
 
Upvote 0
Hôm nay tự bỏ giơi hạn cho mình nên "tinh thần chia sẻ nó dâng cao", và trả lời tiếp.

1. dùng paramarray như bài #13

2. trong code bài #6, đỏi thành vòng lặp, và lúc xét chuỗi thì cần thêm một lệnh exit. Chỉ cần 1 cái không thoả thì không cần xét tiếp
 
Upvote 0
Làm theo gợi ý của anh VetMini:
Mã:
Public Function SoTrung(ParamArray dArr()) As String
Dim i As Integer, temp As String
Dim j As Integer
For i = 0 To 99
    temp = Format(i, "00")
    For j = LBound(dArr) To UBound(dArr)
        If InStr(dArr(j), temp) = 0 Then GoTo Thoat
     Next j
        SoTrung = SoTrung & "," & temp
Thoat:
Next i
 If Len(SoTrung) > 0 Then SoTrung = Mid(SoTrung, 2)
 End Function
 
Upvote 0
Làm theo gợi ý của anh VetMini:
Mã:
Public Function SoTrung(ParamArray dArr()) As String
Dim i As Integer, temp As String
Dim j As Integer
For i = 0 To 99
    temp = Format(i, "00")
    For j = LBound(dArr) To UBound(dArr)
        If InStr(dArr(j), temp) = 0 Then GoTo Thoat
     Next j
        SoTrung = SoTrung & "," & temp
Thoat:
Next i
 If Len(SoTrung) > 0 Then SoTrung = Mid(SoTrung, 2)
 End Function

1. tránh dùng goto
2. code tính LBound(dArr) và UBound(dArr) 100 lần !

Dim jMin as integer, jMax as integer
jMin = LBound(dArr) : jMax = UBound(dArr)
For i = 0 To 99
temp = Format(i, "00")
For j = jMin To jMax
If InStr(dArr(j), temp) = 0 Then Exit For
Next j
If j > jMax Then SoTrung = SoTrung & "," & temp ' vòng lặp chạy đủ
Next i
 
Upvote 0
Đố vui:
Hẳn quý vị cũng thấy sự nghịch chiều của 2 giải thuật bài #5 và bài #17 (giải thuật #13 tương tự #5)

Câu đố là: khi nào thì giải thuật này hiệu quả hơn giải thuật kia, và ngược lại?
 
Upvote 0
Web KT

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

Back
Top Bottom