Bài toán tỉ lệ (1 người xem)

Liên hệ QC

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

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Mong anh chị giúp em ở bài toán sau. Nội dung cụ thể em đã ghi ở trong file. Em tóm tắt nội dung cơ bản như sau: Xét các giá trị tại cột A, sau đó thay đổi hoặc giữ nguyên các giá trị để thỏa mãn tỉ lệ phần trăm rồi gán các giá trị này vào cột B.
 

File đính kèm

Có ai hiểu gì không :confused:
 
Upvote 0
Vâng mấu chốt bài toán là thay đổi dữ liệu theo yêu cầu tỉ lệ % giống như thăng chức trong nhà nước dù làm tốt như nhau thì chỉ được chọn số lượng phần trăm nhất định. Bài toán của em đặt ra cũng vậy. Giả sử tại một trường hợp ta đang xét nếu tổng số lượng các giá trị thỏa mãn điều kiện xét đó lớn hơn tỉ lệ đặt ra thì phần chênh lệch sẽ phải thay đổi. Em nói vậy có dễ hiểu hơn không ? :(

Em đang liên tưởng đến một hướng đi đó là giả sử xét 100 trường hợp. Sử dụng code để mỗi lần xét giá trị thỏa mãn thì sẽ cộng thêm 1 (mục đích đếm số lượng trường hợp đạt yêu cầu) sau đó đến một giá trị nhất định vượt qua mục tiêu thì tất cả các dữ liệu còn lại phải thay đổi.
 
Upvote 0
Tiêu đề thì ngắn gần đến cụt lũn;

Theo tâm niệm của Ngọc Lễ: Con gái nói iêu là ghét đó, con gái nói có là không. . . . vậy mà
 
Upvote 0
Vâng mấu chốt bài toán là thay đổi dữ liệu theo yêu cầu tỉ lệ % giống như thăng chức trong nhà nước dù làm tốt như nhau thì chỉ được chọn số lượng phần trăm nhất định. Bài toán của em đặt ra cũng vậy. Giả sử tại một trường hợp ta đang xét nếu tổng số lượng các giá trị thỏa mãn điều kiện xét đó lớn hơn tỉ lệ đặt ra thì phần chênh lệch sẽ phải thay đổi. Em nói vậy có dễ hiểu hơn không ? :(

Em đang liên tưởng đến một hướng đi đó là giả sử xét 100 trường hợp. Sử dụng code để mỗi lần xét giá trị thỏa mãn thì sẽ cộng thêm 1 (mục đích đếm số lượng trường hợp đạt yêu cầu) sau đó đến một giá trị nhất định vượt qua mục tiêu thì tất cả các dữ liệu còn lại phải thay đổi.
Bạn nên cho kết quả mẫu cho tường trường hợp và giải thích cách tính ra kết quả.
 
Upvote 0
PHP:
With Sheets("Reporst all")
K = 0
sArr = .Range("AE21", .Range("AE21").End(xlDown)).Resize(, 6).Value
    For I = 1 To UBound(sArr)
        For J = 1 To 6
            If sArr(I, J) > 72 Then
                dArr(I, J) = 55
            ElseIf sArr(I, J) > 60 Then
                K = K + 1
                dArr(I, J) = sArr(I, J)
...

Em post lên ý định của em nhé nhưng đến phần này chưa biết cách viết như thế nào. Dò tìm giá trị trong mảng sArr.
Nếu giá trị lớn hơn 72 thì gán vào mảng là 55. Nếu lớn hơn 60 thì lúc đó đếm số lượng các giá trị trong mảng >60. Đếm đến số lượng 1000 thì các giá trị đó vẫn giữ nguyên, nhưng nếu tiếp tục phát sinh giá trị >60 thì số lượng tiếp tục phát sinh đó sẽ thay bằng giá trị 55 chẳng hạn. File trên là file em tối giản nhưng vì cách giải thích của em còn hạn hẹp nên em post hẳn code ý tưởng em làm. Hi vọng sẽ có anh chị hiểu em. Nó giống như là mình đi mua hàng chọn đúng 100 cái ưng thì lấy cái đó, nếu có ưng thêm thì cũng không lấy mà thay đổi sang cái khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Em làm được rồi, không nghĩ mình có thể làm được :)

PHP:
Option Explicit
Public Sub MA()
Dim sArr(), dArr(1 To 10000, 1 To 10), I As Long, J As Long
Dim K As Long, L As Long
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

With Sheets("Reporst all")
K = 0
L = 0
sArr = .Range("AE21", .Range("AE21").End(xlDown)).Resize(, 6).Value
    For I = 1 To UBound(sArr)
        For J = 1 To 6
            If sArr(I, J) > 72 Then
                dArr(I, J) = 55
            ElseIf sArr(I, J) > 60 Then
                K = K + 1
                dArr(I, J) = sArr(I, J)
                If K > [J13] Then
                    dArr(I, J) = 55
                End If
            ElseIf sArr(I, J) > 55 Then
                L = L + 1
                dArr(I, J) = sArr(I, J)
                If L > [J14] Then
                    dArr(I, J) = 55
                End If
            Else: dArr(I, J) = sArr(I, J)
            End If
        Next J
    Next I
End With
[AQ21].Resize(I, 6) = dArr

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Để làm được cái này cũng nhờ rất nhiều đến anh SA_DQ, anh Bate, bạn befaint, bạn HYen17 (Hoàng Yến chăng)...đã tận tình giúp đỡ trong các chủ đề của em. Cảm ơn mọi người rất là nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom