GPE Phát hành sách: "Lập trình VBA trong Excel cho người mới bắt đầu - 2014" | "VBA trong Excel - Cải thiện và tăng tốc - 2013"
Trang 1/3 1 2 3 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 22
  1. #1
    Tham gia ngày
    05 2009
    Bài gởi
    101
    Cảm ơn
    86
    Được cảm ơn 8 lần trong 6 bài viết

    Tính Tổ hợp bằng Excel

    Chào các bạn. Mình có bài dạng tính Tổ hợp, không biết dùng Excel có làm được không? Yệu cầu là từ môt số có 3 đến 9 số, tìm ra các số có 2 chữ số không trùng nhau. Ví dụ: có số 3869 thì sẽ tính ra là: 36 38 39 68 69 89. Các bạn xem thêm trong file đính kèm.
    Bạn nào biết thì giúp mình với. Cám ơn các bạn nhiều.
    Tập tin đính kèm Tập tin đính kèm

  2. #2
    Tham gia ngày
    06 2008
    Bài gởi
    23,004
    Cảm ơn
    13,018
    Được cảm ơn 40,613 lần trong 18,506 bài viết
    Trích Nguyên văn bởi congthanh6868 View Post
    Chào các bạn. Mình có bài dạng tính Tổ hợp, không biết dùng Excel có làm được không? Yệu cầu là từ môt số có 3 đến 9 số, tìm ra các số có 2 chữ số không trùng nhau. Ví dụ: có số 3869 thì sẽ tính ra là: 36 38 39 68 69 89. Các bạn xem thêm trong file đính kèm.
    Bạn nào biết thì giúp mình với. Cám ơn các bạn nhiều.
    Bạn vui lòng nói rõ lại vụ KHÔNG TRÙNG này nhé:
    - Không trùng nghĩa là 2 chữ số trong 1 số không trùng nhau
    Hay:
    - Không trùng nghĩa là số này không trùng số kia
    Lấy ví vụ:
    - Số 2663 bạn muốn ra kết quả gì?
    - Số 4444 bạn muốn ra kết quả gì?

  3. Thành viên sau cảm ơn ndu96081631 về bài viết này:


  4. #3
    Tham gia ngày
    05 2009
    Bài gởi
    101
    Cảm ơn
    86
    Được cảm ơn 8 lần trong 6 bài viết
    Trích Nguyên văn bởi ndu96081631 View Post
    Bạn vui lòng nói rõ lại vụ KHÔNG TRÙNG này nhé:
    - Không trùng nghĩa là 2 chữ số trong 1 số không trùng nhau
    Hay:
    - Không trùng nghĩa là số này không trùng số kia
    Lấy ví vụ:
    - Số 2663 bạn muốn ra kết quả gì?
    - Số 4444 bạn muốn ra kết quả gì?
    Xin lỗi, mình giải thích không rõ. Không trùng ở đây nghĩa là cả hai trường hợp Không trùng mà bạn đưa ra.
    Ví dụ: 2663 thì cần ra kết quả là 23 26 36
    còn 44444 thì không phải tính vì chỉ có 1 số 4 nên không hình thành só có 2 chữ số khác nhau được.
    (trường hợp xấu nhất thì vẫn chấp nhận ra kết quả trùng nhau, khi đó mình sẽ dùng công thức Joinunique mà bạn đã giúp đỡ)
    Cám ơn bạn nhiều.

  5. Thành viên sau cảm ơn congthanh6868 về bài viết này:


  6. #4
    Tham gia ngày
    06 2008
    Bài gởi
    23,004
    Cảm ơn
    13,018
    Được cảm ơn 40,613 lần trong 18,506 bài viết
    Trích Nguyên văn bởi congthanh6868 View Post
    Xin lỗi, mình giải thích không rõ. Không trùng ở đây nghĩa là cả hai trường hợp Không trùng mà bạn đưa ra.
    Ví dụ: 2663 thì cần ra kết quả là 23 26 36
    còn 44444 thì không phải tính vì chỉ có 1 số 4 nên không hình thành só có 2 chữ số khác nhau được.
    (trường hợp xấu nhất thì vẫn chấp nhận ra kết quả trùng nhau, khi đó mình sẽ dùng công thức Joinunique mà bạn đã giúp đỡ)
    Cám ơn bạn nhiều.
    Hỏi thêm:
    - Tại sao kết quả có số 36 mà không phải là 63 vậy?

  7. Thành viên sau cảm ơn ndu96081631 về bài viết này:


  8. #5
    Tham gia ngày
    05 2009
    Bài gởi
    101
    Cảm ơn
    86
    Được cảm ơn 8 lần trong 6 bài viết
    vì thực ra thì 63 cũng là trùng với 36, chỉ là viết ngược lại, và yêu câu đề bài phải là 36.

  9. #6
    Tham gia ngày
    06 2008
    Bài gởi
    23,004
    Cảm ơn
    13,018
    Được cảm ơn 40,613 lần trong 18,506 bài viết
    Trích Nguyên văn bởi congthanh6868 View Post
    vì thực ra thì 63 cũng là trùng với 36, chỉ là viết ngược lại, và yêu câu đề bài phải là 36.
    Hơi vả!
    PHP Code:
    Function CombinNum(Num As StringOptional Sep As String " ") As String
      Dim i 
    As LongAs LongDic1Dic2Temp1Temp2CNum As StringTempStrSort As String
      Set Dic1 
    CreateObject("Scripting.Dictionary")
      
    Set Dic2 CreateObject("Scripting.Dictionary")
      
    StrSort Num
      With WorksheetFunction
        
    For 1 To Len(StrSort) - 1
          
    For 1 To Len(StrSort)
            If 
    Mid(StrSortj1) < Mid(StrSorti1Then
              StrSort 
    = .Replace(.Replace(StrSorti1Mid(StrSortj1)), j1Mid(StrSorti1))
            
    End If
          
    Next j
        Next i
      End With
      
    For 1 To Len(StrSort)
        If 
    Not Dic1.Exists(Mid(StrSorti1)) Then
          Dic1
    .Add Mid(StrSorti1), ""
        
    End If
      
    Next i
      Temp1 
    Dic1.Keys
      
    For 0 To UBound(Temp1) - 1
        
    For 1 To UBound(Temp1)
          
    CNum CStr(Temp1(i) & Temp1(j))
          If 
    Not Dic2.Exists(CNumThen
            Dic2
    .Add CNum""
          
    End If
        
    Next j
      Next i
      CombinNum 
    Join(Dic2.KeysSep)
    End Function 
    Phài sort chuổi, lọc lấy các ký tự duy nhất rồi ráp lại
    Gấp quá nên code dài ---> Sẽ nghiên cứu cải tiến sau
    Tập tin đính kèm Tập tin đính kèm

  10. Có 3 thành viên cảm ơn ndu96081631 về bài viết này:


  11. #7
    Tham gia ngày
    05 2009
    Bài gởi
    101
    Cảm ơn
    86
    Được cảm ơn 8 lần trong 6 bài viết

    Excel báo lỗi

    Cám ơn bạn. Nhưng khi mình nhập công thức của bạn vào thì Excel của mình báo lỗi như sau, xem file đính kèm. Truòng hợp này thì phải xử lý ra sao, bạn giúp mình với.
    Tập tin đính kèm Tập tin đính kèm

  12. #8
    Tham gia ngày
    05 2009
    Bài gởi
    101
    Cảm ơn
    86
    Được cảm ơn 8 lần trong 6 bài viết
    Trích Nguyên văn bởi congthanh6868 View Post
    Cám ơn bạn. Nhưng khi mình nhập công thức của bạn vào thì Excel của mình báo lỗi như sau, xem file đính kèm. Truòng hợp này thì phải xử lý ra sao, bạn giúp mình với.
    Mình đã tự xử lý vấn đề này được rồi. Giờ thì đã sử dụng được Công thức do bạn giúp đỡ. Cám ơn Bạn ndu96081631 rất nhiều. Excel thật là tuyệt vời, và kiến thức về Excel của bạn thật uyên thâm.

  13. #9
    Tham gia ngày
    09 2008
    Nơi Cư Ngụ
    TP.HCM (Bình Định)
    Bài gởi
    4,018
    Cảm ơn
    466
    Được cảm ơn 4,440 lần trong 2,634 bài viết
    Một cách khác:
    PHP Code:
    Function MyFunction(Str As String) As String
    Dim MyStr 
    As StringAs ByteAs Byte
    For 0 To 9
    If InStr(StriThen MyStr MyStr i
    Next
    For 1 To Len(MyStr) - 1
        
    For 1 To Len(MyStr)
            
    MyFunction MyFunction Mid(MyStri1) & Mid(MyStrj1) & " "
        
    Next
    Next
    MyFunction 
    Trim(MyFunction)
    End Function 
    Tập tin đính kèm Tập tin đính kèm
    • Loại tập tin: xls UDF.xls (45.5 KB, 147 lần tải)
    thay đổi nội dung bởi: huuthang_bd, 26-02-10 lúc 12:25 AM

  14. Thành viên sau cảm ơn huuthang_bd về bài viết này:


  15. #10
    Tham gia ngày
    06 2008
    Bài gởi
    23,004
    Cảm ơn
    13,018
    Được cảm ơn 40,613 lần trong 18,506 bài viết
    Trích Nguyên văn bởi congthanh6868 View Post
    Mình đã tự xử lý vấn đề này được rồi. Giờ thì đã sử dụng được Công thức do bạn giúp đỡ. Cám ơn Bạn ndu96081631 rất nhiều. Excel thật là tuyệt vời, và kiến thức về Excel của bạn thật uyên thâm.
    Bạn lưu ý:
    - Nếu dữ liệu của bạn toàn số thì có thể dùng hàm của Huuthang_bd, sẽ ngắn gọn hơn
    - Hàm tôi đưa lên ở trên là áp dụng cho mọi kiểu dữ liệu, ký tự number hay AlphaB gì gì cũng chơi tuốt!

  16. Thành viên sau cảm ơn ndu96081631 về bài viết này:


Trang 1/3 1 2 3 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]