- Hôm Nay là ngày 10/02/2017 là một ngày rất buồn và cũng rất vui với mình ( vì có buồn xong hết buồn thì lại vui). Mình xin chia sẽ một thủ thuật mà mình cũng không biết nên đặt tiêu đề là gì để các bạn hiểu được nội dung.

- Chúng ta vào bài tập nhé, đầu tiên các bạn hãy nhìn vào hình bên dưới nhé:


- Nói qua về yêu cầu bài toán : cột E là dữ liệu chúng ta cần tính toán, giả sử ta nhập số 6 ở cột E thì nó sẽ nằm trong khung 2, ta xét tiếp cột B, C tức là KQ1 và KQ2, nếu ô nào chứ dữ liệu thì sẽ lấy ô đó ở ví dụ này là 9% và chúng ta được kết quả là 9%*6=0,54, thường thì chúng ta sẽ làm bài này với hàm IF, tuy nhiên với điều kiện nhiều thế này thì làm hàm IF có lẽ rất mệt mỏi nên ở đây mình sẽ viết hàm tự tạo để giải quyết bài toán này: 

- Các bạn vào trình soạn thảo VBA insert module mới sau đó dán 2 hàm sau đây vào:


Public Function Xuly(rngCritaria As Range) As String
    Dim arrtmp(), strtmp As String
    arrtmp = rngCritaria
    For i = 1 To UBound(arrtmp)
        arrtmp(i, 1) = Replace(arrtmp(i, 1), " ", "")
        For j = 1 To Len(arrtmp(i, 1))
            If Not IsNumeric(Mid(arrtmp(i, 1), j, 1)) Then
                arrtmp(i, 1) = WorksheetFunction.Replace(arrtmp(i, 1), j, 1, " ")
            End If
        Next j
        Xuly = Xuly & " " & Trim(arrtmp(i, 1))
    Next i
    Xuly = WorksheetFunction.Trim(Xuly)
End Function


Function TinhDK(ByVal Qn As Double, ByVal rng As Range) As Double
    Dim strDK As String
    Dim arrDK() As String, arrKQ()
    Dim k As Integer

    arrKQ = rng.Value
    strDK = Xuly(rng.Resize(rng.Rows.Count, 1))
    arrDK = Split(strDK, " ")
    
    For i = LBound(arrDK) To UBound(arrDK) - 2 Step 2
        k = k + 1
        If arrDK(i) < Qn And arrDK(i + 1) >= Qn Then
            If arrKQ(k, 2) = "-" Then
                If arrKQ(k, 3) = "-" Then
                    TinhDK = 0
                Else
                    TinhDK = arrKQ(k, 3)
                End If
            Else
                TinhDK = arrKQ(k, 2) * Qn / 100
            End If
            Exit Function
        End If
    Next i
    
    If arrKQ(k + 1, 2) = "-" Then
            TinhDK = arrKQ(k + 1, 3)
        Else
            TinhDK = arrKQ(k + 1, 2) * Qn / 100
    End If
End Function


- Cuối cùng các bạn điền công thức vào ô F2 như sau: =TinhDK(E2;$A$2:$C$11) và kéo xuống các ô bên dưới và xem xét kết quả, chúc các bạn thành công.

- Link Download File: DOWNLOAD

- Xem hướng dẫn chi tiết bằng Video:

1 Nhận xét

Đăng nhận xét

Mới hơn Cũ hơn