Trang 1 của 4 123 ... CuốiCuối
Kết quả 1 đến 10 của 37

Chủ đề: Nhờ các Anh chị viết macro giải quyết bài toán xét nhiều điều kiện

  1. #1
    phuongtrandinh Guest

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi QuocDung2510
    Tôi đang có 1 bài toán chưa giải quyết được, Mong các Anh chị giúp đỡ!
    Chi tiết trong file đính kèm
    Chân thành cảm ơn!
    thấy cũng hấp dẫn, mà đọc hoài mà ko hiểu???
    giá trị min thì ok
    số lượng tối đa là cái gì???
    =======================
    post bài lên rồi ko quay lại thăm bẩy hả? hỏi lâu quá mà ko thấy trả lời. thôi cái gì khó quá bỏ qua (bỏ qua cái dzụ số lượng tối đa đi nha)

    Mã:
    Sub lamgido()
    Dim arr, bd, tam As Variant, i  As Long, d As Object, itm As String
    [f2:f384].ClearContents
    arr = [a2:f384]
    bd = [l3:n6]
    Set d = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
        If arr(i, 5) > bd(Asc(arr(i, 4)) - 64, 2) Then
        itm = arr(i, 1) & "#" & arr(i, 3) & "#" & arr(i, 5)
            If Not d.exists(arr(i, 4)) Then
                d.Add arr(i, 4), itm
                arr(i, 6) = "True"
            Else
            tam = Split(d.Item(arr(i, 4)), "#")
                If Val(tam(2)) < arr(i, 5) Then
                    d.Item(arr(i, 4)) = itm
                    arr(tam(0), 6) = ""
                    arr(i, 6) = "True"
                End If
                If Val(tam(2)) = arr(i, 5) And Val(tam(1)) > arr(i, 3) Then
                    d.Item(arr(i, 4)) = itm
                    arr(tam(0), 6) = ""
                    arr(i, 6) = "True"
                End If
            End If
        End If
    Next
               
    [a2:f384].ClearContents
    [a2:f384] = arr
    Set d = Nothing
    End Sub

  3. #3
    vupro09 Guest
    Trích dẫn Gửi bởi doveandrose
    điều này cần phải bàn bạc lại vì nó kéo theo nhiều hệ lụy



    hãy xét 1 cái bảng đơn giản chỉ có 16 dòng thế này
    theo cách chọn của bạn dòng số 2 được chọn TRUE vì 19 > 15 . tuy 19 chưa phải cao nhất nhưng loại A có tối đa 10 lần được xét True .
    kéo theo hệ lụy dòng 4 phải xét FALSE vì 1 mã chỉ có tối đa 1 loại được xét TRUE mặc dù dòng 4 là giá trị tốt nhất cho loại C theo mọi tiêu chí của bạn . vậy cách chọn điều kiện xét TRUE đã vô tình làm mất đi 1 số giá trị tốt nhất cho từng loại A,B,C,D ???
    -------------------------
    Phần đầu thì bác nới đúng rồi ( 19> 15 nhưng không thuộc 10 lần xét True vì vậy sẽ tính nó là False) để tính tiếp theo dòng 4 sẽ được tính là True như bác nói!

  4. #4
    hoangthuy90 Guest
    Trích dẫn Gửi bởi QuocDung2510
    -------------------------
    Phần đầu thì bác nới đúng rồi ( 19> 15 nhưng không thuộc 10 lần xét True vì vậy sẽ tính nó là False) để tính tiếp theo dòng 4 sẽ được tính là True như bác nói!
    bạn chỉ trả lời dựa theo dữ liệu của bạn chứ không nhìn ra được bản chất vấn đề


    1 Mã chỉ có kết quả là True tối đa 1 lần và ưu tiên theo cột ưu tiên từ 1-4
    hên là dòng 2 không nằm trong top 10 của loại A chữ lỡ nó xếp thứ 10 của loại A thì sao ?
    khi đó bạn đã chọn giá trị hạng 10 của loại này mà vứt đi giá trị hạng 1 (tốt nhất) của loại khác chỉ vì độ ưu tiên của dòng 4 thua dòng 2
    Và điều rắc rối khó chấp nhận ở đây là theo luật chơi của bạn thì tôi có quyền chọn dòng 2 hoặc dòng 4 cũng được mà không phạm luật .
    vì sao ? giả sử dòng 2 xếp thứ 10 trong các dòng loại A
    nếu chọn dòng 2 : tôi giải thích rằng cần phải chọn loại A cho đủ 10 chỉ tiêu loại A
    nếu chọn dòng 4 : tôi giải thích rằng loại A có tối đa 10 chỉ tiêu chứ đâu nhất thiết phải chọn đủ 10 . trong khi đó dòng 4 là giá trị tốt nhất cho loại C .
    như vậy làm sao người khác thiết kế được code cho bạn ?

  5. #5
    BichNgoc101 Guest
    [QUOTE=QuocDung2510;654504]
    Trích dẫn Gửi bởi Let'GâuGâu
    thấy cũng hấp dẫn, mà đọc hoài mà ko hiểu???
    giá trị min thì ok
    số lượng tối đa là cái gì???
    =======================
    post bài lên rồi ko quay lại thăm bẩy hả? hỏi lâu quá mà ko thấy trả lời. thôi cái gì khó quá bỏ qua (bỏ qua cái dzụ số lượng tối đa đi nha)

    -------
    Bác thông cảm! Em ko online thường xuyên được;
    Cái vụ số lượng tối đa (Chắc do khả năng diễn đạt của em yếu) là Ứng với từng loại A; B; C; D thì chỉ cần có tần dó True thôi (Lấy Giá trị cao hơn và cùng ưu tiên)
    Mong Bác giúp đỡ!
    ví dụ lạo "A"
    tôi chỉ mới lọc được 25 giá trị A thỏa mãn true
    bây giờ phải lọc ra 10 chú có giá trị giảm dần
    bạn xem code như vậy đã gần đúng với yêu cầu của bạn chưa (nếu đúng hướng tôi suy nghĩ tiếp)

    Mã:
    Sub lamgido()
    Dim v, arr, bd, tam As Variant, i, Gtri As Long, d As Object, utien, ma, itm As String
    [f2:f384].ClearContents
    arr = [a2:f384]
    bd = [l3:n6]
    Set d = CreateObject("Scripting.Dictionary")
    ma = arr(1, 2): Gtri = arr(1, 5)
    For i = 1 To UBound(arr)
        If arr(i, 5) > bd(Asc(arr(i, 4)) - 64, 2) Then
            If arr(i, 2) = ma Then
                If arr(i, 5) > Gtri Then k = i: utien = arr(i, 3): Gtri = arr(i, 5)
                If arr(i, 5) = Gtri And arr(i, 3) > utien Then k = i: utien = arr(i, 3): Gtri = arr(i, 5)
            Else
            itm = arr(k, 1) & "#" & arr(k, 5)
                If Not d.exists(arr(k, 4)) Then
                    d.Add arr(k, 4), itm
                Else
                    d.Item(arr(k, 4)) = d.Item(arr(k, 4)) & "#" & itm
                End If
            k = i: utien = arr(i, 3):    Gtri = arr(i, 5): ma = arr(i, 2)
            End If
        End If
    Next
          For Each v In d.Keys
            tam = Split(d.Item(v), "#")
            For J = 0 To UBound(tam) Step 2
               ' If J > bd(Asc(v) - 64, 3) Then Exit For
                arr(tam(J), 6) = "true"
            Next
          Next
    [a2:f384].ClearContents
    [a2:f384] = arr
    Set d = Nothing
    End Sub

  6. #6
    kanhtran Guest
    [QUOTE=Let'GâuGâu;654477]thấy cũng hấp dẫn, mà đọc hoài mà ko hiểu???
    giá trị min thì ok
    số lượng tối đa là cái gì???
    =======================
    post bài lên rồi ko quay lại thăm bẩy hả? hỏi lâu quá mà ko thấy trả lời. thôi cái gì khó quá bỏ qua (bỏ qua cái dzụ số lượng tối đa đi nha)

    -------
    Bác thông cảm! Em ko online thường xuyên được;
    Cái vụ số lượng tối đa (Chắc do khả năng diễn đạt của em yếu) là Ứng với từng loại A; B; C; D thì chỉ cần có tần dó True thôi (Lấy Giá trị cao hơn và cùng ưu tiên)
    Mong Bác giúp đỡ!

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    [QUOTE=Let'GâuGâu;654607]
    Trích dẫn Gửi bởi QuocDung2510
    ví dụ lạo "A"
    tôi chỉ mới lọc được 25 giá trị A thỏa mãn true
    bây giờ phải lọc ra 10 chú có giá trị giảm dần
    bạn xem code như vậy đã gần đúng với yêu cầu của bạn chưa (nếu đúng hướng tôi suy nghĩ tiếp)

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    ----------------------------------------------------------
    Code của bác em chạy thử ra kết quả không đúng lắm! (Có thể em nhầm gì đó)
    Mong Bác xem file đính kèm để thấy rõ! và chỉ ra chỗ em sai giúp em nếu có!

  8. #8
    lamtolinh Guest
    Trích dẫn Gửi bởi doveandrose
    bạn chỉ trả lời dựa theo dữ liệu của bạn chứ không nhìn ra được bản chất vấn đề

    hên là dòng 2 không nằm trong top 10 của loại A chữ lỡ nó xếp thứ 10 của loại A thì sao ?
    khi đó bạn đã chọn giá trị hạng 10 của loại này mà vứt đi giá trị hạng 1 (tốt nhất) của loại khác chỉ vì độ ưu tiên của dòng 4 thua dòng 2
    Và điều rắc rối khó chấp nhận ở đây là theo luật chơi của bạn thì tôi có quyền chọn dòng 2 hoặc dòng 4 cũng được mà không phạm luật .
    vì sao ? giả sử dòng 2 xếp thứ 10 trong các dòng loại A
    nếu chọn dòng 2 : tôi giải thích rằng cần phải chọn loại A cho đủ 10 chỉ tiêu loại A
    nếu chọn dòng 4 : tôi giải thích rằng loại A có tối đa 10 chỉ tiêu chứ đâu nhất thiết phải chọn đủ 10 . trong khi đó dòng 4 là giá trị tốt nhất cho loại C .
    như vậy làm sao người khác thiết kế được code cho bạn ?
    ------------
    Cảm ơn bác! Đúng là em chưa nói rõ là phải đủ 10; Còn nếu dòng 2 chính là thứ 10 loại A ( Ưu tiên 1) thì cho dù dòng 4 có là giá trị tốt nhất của C vẫn phải nhận là False do đã được xét True ở 10 của A! cái này chính là cái mà em cần! [IMG]images/smilies/biggrin.png[/IMG]

  9. #9
    zimmypro88 Guest
    Trích dẫn Gửi bởi QuocDung2510
    ------------
    Cảm ơn bác! Đúng là em chưa nói rõ là phải đủ 10; Còn nếu dòng 2 chính là thứ 10 loại A ( Ưu tiên 1) thì cho dù dòng 4 có là giá trị tốt nhất của C vẫn phải nhận là False do đã được xét True ở 10 của A! cái này chính là cái mà em cần! [IMG]images/smilies/biggrin.png[/IMG]
    nói như vậy có nghĩa là cần phải chọn cho đủ hết chỉ tiêu của 1 loại (thí dụ A) rồi mới bắt đầu đi chọn chỉ tiêu cho loại khác phải không ? nếu bạn xác nhận là đúng thì ta tiến hành code

  10. #10
    hongson1992 Guest
    Trích dẫn Gửi bởi doveandrose
    nói như vậy có nghĩa là cần phải chọn cho đủ hết chỉ tiêu của 1 loại (thí dụ A) rồi mới bắt đầu đi chọn chỉ tiêu cho loại khác phải không ? nếu bạn xác nhận là đúng thì ta tiến hành code
    ---------------------------------------
    Không đúng; Xét hết ưu tiên 1 rồi xét đến ưu tiên 2,3,4( Nếu hết ưu tiên 1 của A chưa đủ thì xét tiếp ưu tiên 2 của A với điều kiện các ưu tiên 1 của B,C,D phải xét trước khi xét ưu tiên 2 của A)

Trang 1 của 4 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •