[Giúp] nhờ mọi người chỉnh sửa giùm code (1 người xem)

Liên hệ QC

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

matran25251325

Thành viên tiêu biểu
Tham gia
13/1/11
Bài viết
424
Được thích
39
Trong file mình có dùng hàm nội suy để tra. mình có dùng 2 bảng tra (vùng tra ở sheet1, số cần tìm ở sheet2) để test thì thấy: khi giá trị cần tra >1 thì giá trị cần tìm là đúng; khi giá trị cần tra là <1 thì giá trị cần tìm là sai hoặc = 0. Mong mọi người giúp đỡ. Thank
 

File đính kèm

Trong file mình có dùng hàm nội suy để tra. mình có dùng 2 bảng tra (vùng tra ở sheet1, số cần tìm ở sheet2) để test thì thấy: khi giá trị cần tra >1 thì giá trị cần tìm là đúng; khi giá trị cần tra là <1 thì giá trị cần tìm là sai hoặc = 0. Mong mọi người giúp đỡ. Thank

Bởi vì trong hàm đó mới làm có 1 trường hợp:
Mã:
If BangTra(R, 1) = Nguyen Then...
Còn trường hợp:
Mã:
If BangTra(R, 1) = Le ...
thì chưa có làm.
 
Upvote 0
Vậy mình sẽ chỉnh sửa code thế nào vậy bạn?
Bạn có nêu yêu cầu của bạn là dò tìm như nào đâu?
Có 2 cách:
- Một là bạn tìm tới người nào viết code đó rồi la lên thế này thế kia.
- Hai là bạn nêu cụ thể yêu cầu của bạn là gì? Vùng tìm kiếm, điều kiện tìm, điều kiện kết quả trả về?
 
Upvote 0
mình có nói ở #1, nếu vùng dữ liệu ở sheet1 có giá trị cần tìm trong cột A (ví dụ ở sheet2: nếu tra giá trị 0.5 trong vung1 thì giá trị cần tra luôn sai, nếu tra giá trị >1 thì giá trị cần tra sẽ đúng). Mình cần mọi người giúp thêm điều kiện khi tra giá trị <1).ví dụ mình có nêu ở sheet2.
 
Upvote 0
mình có nói ở #1, nếu vùng dữ liệu ở sheet1 có giá trị cần tìm trong cột A (ví dụ ở sheet2: nếu tra giá trị 0.5 trong vung1 thì giá trị cần tra luôn sai, nếu tra giá trị >1 thì giá trị cần tra sẽ đúng). Mình cần mọi người giúp thêm điều kiện khi tra giá trị <1).ví dụ mình có nêu ở sheet2.

Bạn có biết mình đang nói đến iêu cầu gì không?
Code trong File bài #1:
Mã:
Option Explicit
Function TraLuuLuong(LuuLuong As Double, VungTra As Range)
Dim R As Long, C As Long, BangTra, Nguyen As Long, Le As Double
BangTra = VungTra.Value:    Nguyen = Int(LuuLuong):  Le = Round(LuuLuong - Nguyen, 6)
For R = 2 To UBound(BangTra, 1)
    If BangTra(R, 1) = Nguyen Then
        For C = 2 To UBound(BangTra, 2)
            If BangTra(1, C) > Le Then Exit For
        Next
        C = C - 1
        If C < UBound(BangTra, 2) Then
            TraLuuLuong = BangTra(R, C) + (Le - BangTra(1, C)) * (BangTra(R, C + 1) - BangTra(R, C)) / (BangTra(1, C + 1) - BangTra(1, C))
        Else
            If R < UBound(BangTra, 1) Then
                TraLuuLuong = BangTra(R, C) + (Le - BangTra(1, C)) * (BangTra(R + 1, 2) - BangTra(R, C)) / (1 - BangTra(1, C))
            Else
                TraLuuLuong = CVErr(xlErrNA)
                Exit Function
            End If
        End If
        Exit Function
    End If
Next
End Function
Bạn giải thích dùm code trên.
 
Upvote 0
- Trong vùng tìm kiếm nếu giá trị vùng tìm kiếm ở cột A >1 thì khi tra giá trị cần tìm ở vùng này là đúng. và nếu giá trị cùng tìm kiếm ở cột A<1 thì khi tra giá trị cần tìm trong vùng này là sai.
- Có lẽ code mình thiếu điều kiện gì đó, và sai ở đoạn này Nguyen= int(luuluong). Hic mình đang nhờ mọi người giúp mà bạn hỏi ngược lại mình )(&&@@)(&&@@
 
Upvote 0
Trước tôi có viết hàm nội suy hai chiều. Nếu không có ai sửa giúp thì bạn có thể vận dụng cho trường hợp của bạn như file đính kèm.
 

File đính kèm

Upvote 0
- Trong vùng tìm kiếm nếu giá trị vùng tìm kiếm ở cột A >1 thì khi tra giá trị cần tìm ở vùng này là đúng. và nếu giá trị cùng tìm kiếm ở cột A<1 thì khi tra giá trị cần tìm trong vùng này là sai.
- Có lẽ code mình thiếu điều kiện gì đó, và sai ở đoạn này Nguyen= int(luuluong). Hic mình đang nhờ mọi người giúp mà bạn hỏi ngược lại mình )(&&@@)(&&@@
Bởi vì bạn cứ quan tâm tới cái hàm, cái code trong file đó. Trong khi người khác lại không quan tâm cái đó.
Bạn trả lời ý 2 ở bài #4, đảm bảo sẽ có người làm hẳn hoi cho bạn.
Bạn hãy tưởng tượng là trong file của bạn chưa có cái dòng code nào cả và nêu yêu cầu bài toán của mình:
- Hai là bạn nêu cụ thể yêu cầu của bạn là gì? Vùng tìm kiếm, điều kiện tìm, điều kiện kết quả trả về?
 
Upvote 0
bạn chỉnh lại code
Mã:
Option Explicit
Function TraLuuLuong(LuuLuong As Range, VungTra As Range)
Dim R As Long, C As Long, BangTra, Nguyen As Double, Le As Double
BangTra = VungTra
[COLOR=#ff0000]If UBound(BangTra) = 16 Then[/COLOR]
[COLOR=#ff0000]    Nguyen = WorksheetFunction.RoundDown(LuuLuong, 1)[/COLOR]
[COLOR=#ff0000]Else[/COLOR]
[COLOR=#ff0000]    Nguyen = WorksheetFunction.RoundDown(LuuLuong, 0)[/COLOR]
[COLOR=#ff0000]End If[/COLOR]
Le = Round(LuuLuong - Nguyen, 6)
For R = 2 To UBound(BangTra, 1)
    If BangTra(R, 1) = Nguyen Then
        For C = 2 To UBound(BangTra, 2)
[COLOR=#ff0000]            If BangTra(1, C) = Le Then[/COLOR]
[COLOR=#ff0000]                TraLuuLuong = BangTra(R, C)[/COLOR]
[COLOR=#ff0000]                Exit Function[/COLOR]
[COLOR=#ff0000]            End If[/COLOR]
            If BangTra(1, C) > Le Then Exit For
        Next
        C = C - 1
        If C < UBound(BangTra, 2) Then
            TraLuuLuong = BangTra(R, C) + (Le - BangTra(1, C)) * (BangTra(R, C + 1) - BangTra(R, C)) / (BangTra(1, C + 1) - BangTra(1, C))
        Else
            If R < UBound(BangTra, 1) Then
                TraLuuLuong = BangTra(R, C) + (Le - BangTra(1, C)) * (BangTra(R + 1, 2) - BangTra(R, C)) / [COLOR=#ff0000](0.01)[/COLOR]
            Else
                TraLuuLuong = CVErr(xlErrNA)
            End If
        End If
        Exit Function
    End If
Next
End Function
 
Upvote 0
Cảm ơn bác HuuThang_bd và bác HieuCD. cả 2 code chạy tốt, code bác huuthang có thể sử dụng thêm nhiều việc đối với mình. Có vẻ người cùng ngành nghề. Hic lâu ko ghé diễn đàn giờ kiến thức trả lại hết. Chán thật.!$@!!!$@!!!$@!!!$@!!!$@!!!$@!!
 
Upvote 0
Cảm ơn bác HuuThang_bd và bác HieuCD. cả 2 code chạy tốt, code bác huuthang có thể sử dụng thêm nhiều việc đối với mình. Có vẻ người cùng ngành nghề. Hic lâu ko ghé diễn đàn giờ kiến thức trả lại hết. Chán thật.!$@!!!$@!!!$@!!!$@!!!$@!!!$@!!
Chắc không phải cùng nghề :). Cái bảng đó là tôi lấy từ file của một bạn khác để minh họa cách sử dụng thôi chứ tôi chẳng biết cái đó là cái gì đâu :).
 
Upvote 0
Cảm ơn bác HuuThang_bd và bác HieuCD. cả 2 code chạy tốt, code bác huuthang có thể sử dụng thêm nhiều việc đối với mình. Có vẻ người cùng ngành nghề. Hic lâu ko ghé diễn đàn giờ kiến thức trả lại hết. Chán thật.!$@!!!$@!!!$@!!!$@!!!$@!!!$@!!

Code của bạn dùng hàm Round của VBA thay vì dùng hàm Round của WorkSheet.
Có vẻ người cùng ngành nghề tài chính ngân hàng?
 
Upvote 0
Web KT

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

Back
Top Bottom