Skip to content

Instantly share code, notes, and snippets.

@DuongAQ
Created March 20, 2018 03:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DuongAQ/73b71820314206df2d8bc309f0943666 to your computer and use it in GitHub Desktop.
Save DuongAQ/73b71820314206df2d8bc309f0943666 to your computer and use it in GitHub Desktop.
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