Sub Tim_so_gan_dung() | |
Dim rng As Range | |
Dim r As Range | |
Dim Mx As Single | |
Dim i As Long | |
Dim Target As Integer | |
Target = Range("E2").Value 'Số làm mẫu tại ô E2 | |
Set rng = Range([A3], Range("A" & Rows.Count).End(xlUp)) 'Phạm vi dãy số ở cột A từ A3 tới dòng cuối có chứa dữ liệu | |
rng.Offset(, 1).ClearContents 'Xóa kết quả tại cột B (cách rgn 1 cột). Đây là nơi sẽ thông báo kết quả của lệnh VBA | |
Mx = Application.Max(rng) 'Biến Mx xác định độ lệch. Khi bắt đầu sẽ gán với giá trị lớn nhất trong dãy số | |
'Điều kiện sai lệch không được lớn hơn số lớn nhất | |
If Target > Mx * 2 Then | |
MsgBox "Gia tri khong phu hop" | |
Exit Sub | |
Else | |
For Each r In rng | |
If Abs(Target - r) < Mx Then 'Xác định sai số theo từng lần đối chiếu | |
'Hàm Abs để lấy giá trị tuyệt đối của phép trừ để tìm số có độ lệch nhỏ nhất | |
Mx = Abs(Target - r) 'Nếu độ lệch mới tìm được nhỏ hơn giá trị đã tìm được trước đó _ | |
'thì sẽ lấy theo giá trị độ lệch mới (nhỏ hơn) | |
i = r.Row 'Xác định dòng tại vị trí có độ lệch nhỏ hơn | |
End If | |
Next r | |
Cells(i, 2) = "Match" 'Khi xét hết các giá trị trong danh sách thì dòng nào được ghi nhận tại biến i | |
'sẽ là vị trí số gần đúng nhất | |
End If | |
End Sub |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment