Hướng dẫn tra cứu thời gian và tìm giá trị gần đúng nhất bằng VBA
Làm thế nào để tra cứu thời gian và tìm giá trị gần đúng nhất bằng VBA. Hãy đọc bài viết dưới đây do eLib biên soạn để tìm cho mình được câu trả lời chính xác nhất nhé.
Mục lục nội dung
1. Cách tra cứu thời gian bằng VBA
Trong Excel chúng ta biết tới những hàm xác định thời gian hiện tại như hàm Today, hàm Now. Vậy thì trong VBA chúng ta xác định thời gian hiện tại như thế nào? Sau đây chúng ta cùng tìm hiểu nội dung này nhé.
1.1. Những đối tượng xác định thời gian trong VBA
Xác định Ngày hiện tại
Để xác định ngày hiện tại trong VBA thì chúng ta sử dụng DATE chứ không phải TODAY. Câu lệnh gọi giá trị ngày hiện tại như sau:
Sub Time_01() 'Xác định ngày hiện tại
Dim a As Date
a = Date
MsgBox a
End Sub
Xác định Ngày+Giờ hiện tại
Sử dụng đối tượng là NOW, tương tự hàm NOW trong Excel
Câu lệnh gọi giá trị ngày giờ hiện tại như sau:
Sub Time_02() 'Xác định ngày giờ hiện tại
Dim a As Date
a = Now
MsgBox a
End Sub
1.2. Ứng dụng xác định thời gian thực hiện 1 câu lệnh VBA
Tại mỗi thời điểm bắt đầu và kết thúc mỗi câu lệnh thì giá trị thời gian xác định bởi NOW là khác nhau. Do đó chúng ta có thể dựa vào điều này để xác định độ chênh lệch thời gian khi bắt đầu và khi kết thúc 1 câu lệnh. Đó chính là thời gian VBA thực hiện xong câu lệnh đó.
Sub Time_03() 'Xác định thời gian thực hiện câu lệnh
Dim t As Date
t=Now() 'Thời gian bắt đầu câu lệnh
'Nội dung câu lệnh đặt tại đây
'Xác định thời gian thực hiện câu lệnh
MsgBox Format(Now() - t, "hh:mm:ss")
End Sub
Biến “t” là thời điểm bắt đầu, khi gán biến t cho thời điểm đó thì giá trị thời điểm đó sẽ được ghi nhận và cố định lại.
Khi kết thúc câu lệnh thì giá trị Now sẽ thay đổi. Now() – t sẽ thể hiện được độ lệch giữa 2 khoảng thời gian.
Format lại giá trị hiệu của 2 khoảng thời gian về dạng giờ:phút:giây để xác định cụ thể độ lệch thời gian.
Việc sử dụng biến thời gian trong VBA rất đơn giản. Bạn chỉ cần gán giá trị thời gian đó vào biến. Tại thời điểm gán thì giá trị thời gian đó sẽ được lưu lại và có thể sử dụng vào vị trí bất kỳ sau khi gán.
2. Cách duy nhất để Tìm giá trị gần đúng nhất bằng VBA
Bạn sẽ làm thế nào nếu gặp phải yêu cầu “Tìm giá trị gần đúng nhất của 1 số trong 1 dãy số bất kỳ trong Excel?” Đây chắc chắn là 1 yêu cầu rất khó, bởi chẳng có hàm Excel nào có thể giúp bạn trả lời được câu hỏi này.
Tuy nhiên hôm nay Gitiho.com sẽ giúp bạn trả lời câu hỏi đó một cách dễ dàng bằng việc sử dụng 1 câu lệnh trong VBA. Câu lệnh đó có khó không? Hãy cùng tìm hiểu thông qua ví dụ sau:
Yêu cầu
Tìm số gần đúng nhất trong vùng A3:A23 so với giá trị tại ô E2
2.1. Cách thực hiện
Tìm hiểu về thuật toán (tính logic)
Số gần đúng nhất có đặc điểm là có độ lệch so với mẫu là ít nhất (hay nhỏ nhất)
Các bước thực hiện thuật toán này như sau:
Bước 1: Xét độ lệch với từng giá trị của dãy
Tại cột B đặt công thức : lấy số làm mẫu trừ mỗi giá trị trong dãy ở cột A
B3=$E$2-A3
Vì với những số lớn hơn số mẫu, nên sử dụng hàm ABS để quy hết độ lệch về giá trị tuyệt đối để có thể xét cả cận trên và cận dưới.
B3=ABS($E$2-A3)
Áp dụng công thức cho vùng từ B3 tới B23 ta được kết quả ở cột B
Bước 2: Xét độ lệch nhỏ nhất (với cận dưới — Nếu lấy cận trên thì xét độ lệch lớn nhất)
Sử dụng hàm MIN để tìm giá trị nhỏ nhất (ô J6)
Bước 3: Tham chiếu tới số có độ lệch nhỏ nhất bằng hàm Index+Match (ô J7)
Như vậy chúng ta đã xác định được thuật toán với từng bước thực hiện một cách thủ công. Đây là bước rất quan trọng giúp chúng ta phát triển tư duy lập trình trong VBA
2.2. Xây dựng lệnh tự động trong VBA
Câu lệnh VBA và logic được diễn giải trong câu lệnh này như sau:
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
Chạy thử câu lệnh trên chúng ta thu được kết quả như sau:
Chú ý: Trong vùng A3:B23 có áp dụng chức năng Conditional formatting để làm nổi bật vị trí dòng có chữ Match ở cột B, giúp chúng ta dễ dàng nhận ra giá trị kết quả cần tìm.
2.3. Gán lệnh VBA trong sự kiện Thay đổi giá trị tại E2
Để mỗi lần thay đổi giá trị tại ô E2 thì Excel sẽ tự động chạy câu lệnh Macro trên để tìm kết quả một cách tự động, chúng ta tạo sự kiện WorkSheet_Change cho Sheet như sau:
Bước 1: mở cửa sổ VBA, trong mục Properties bấm chuột chọn Sheet chứa nội dung cần thực hiện và chọn sự kiện Change
Bước 2: Chỉ thực hiện lệnh macro khi có sự thay đổi tại ô E2. Do đó thực hiện câu lệnh sau:
Câu lệnh trên được hiểu là:
Nếu có sự thay đổi ở vùng E2 thì thực hiện lệnh macro Tìm số gần đúng
Như vậy bài viết đã Hướng dẫn tra cứu thời gian và tìm giá trị gần đúng nhất bằng VBA. Chỉ cần vài thao tác đơn giản, bạn đã có thể tra cứu và tìm giá trị bằng VBA một cách nhanh chóng rồi. Chúc các bạn thực hiện thao tác thành công!
Tham khảo thêm
- doc Hướng dẫn vẽ biểu đồ đường và biểu đồ tròn trong Excel mà bạn nên biết
- doc Cách dùng hàm AVERAGE, MAX, MIN
- doc Cách sử dụng hàm Sum và hàm SUMIF trong Excel
- doc Hướng dẫn hàm tính tiền tích lũy và khấu hao tài sản trong Excel
- doc Hướng dẫn cách tạo chú thích cho ô và thay đổi màu cho ô theo giá trị trong Excel
- doc Hướng dẫn cách gộp ô và cố định hàng, cốt trong Excel
- doc Hướng dẫn cách gộp nhiều Sheet vào một Sheet và cách xuất dữ liệu ra file Excel mới
- doc Hướng dẫn vẽ biểu đồ thanh/ cột chồng trong Excel một cách nhanh chóng nhất
- doc Hướng dẫn thay đổi cột kết quả và cách lọc giá trị trong Pivottable của Excel MacBook
- doc Hướng dẫn xóa cột hoặc dòng Grand ToTal và cách để làm mới một Pivottable trong Excel
- doc Hướng dẫn thủ thuật làm mới một Pivot Table trong Excel một cách nhanh chóng nhất
- doc Hướng dẫn cách cố định các đối tượng với hàng, cột và viết hàm tìm dòng cuối cùng có dữ liệu trong VBA
- doc Hướng dẫn cách đánh số thứ tự ngày tháng bỏ qua các ngày cuối tuần và sử dụng Flash Fill để tách họ tên trong Excel
- doc Hướng dẫn cách xoá bỏ giá trị trùng lặp với Power Query và các cách để Transpose trong Excel
- doc Giới thiệu cách sử dụng Data Validation List với nguồn là Table và cách loại bỏ dấu chấm trong số điện thoại
- doc Hướng dẫn lập sổ nhật ký chung và sổ cái bằng hàm “HeoSQL”
- doc Hướng dẫn sử dụng hàm VLOOKUP trả về mảng giá trị và sử dụng hàm VLOOKUP lồng VLOOKUP trong Excel
- doc Hướng dẫn đếm số lượng giá trị duy nhất trong 1 vùng và cách tách rời từng ký tự một ra khỏi chuỗi
- doc Hướng dẫn lấy ra danh sách tên các Sheet và tạo phím tắt đếm số lượng Sheet ẩn, hiện trong Excel
- doc Hướng dẫn cách lấy dữ liệu từ 1 File Excel đang đóng và Cách lấy lại File Excel do bị tắt đột ngột
- doc Phương pháp để Protect và UnProtect nhiều Sheet cùng 1 lúc trong Excel một cách nhanh chóng
- jpg Hướng dẫn dùng INDEX và MATCH trong Excel một cách nhanh chóng nhất
- doc Hướng dẫn sửa lỗi không chọn được Visual Basic, Macro trong thẻ Developer và cách gộp các file CSV vào trong một file chung nhanh chóng
- doc Hướng dẫn chi tiết cách sử dụng Quick Access Toolbar trong Excel
- doc Hướng dẫn thay đổi vùng in tự động và viết tắt họ tên trên Excel bằng VBA
- doc Hướng dẫn lấy tên Worksheet đang làm việc một cách nhanh chóng nhất
- doc Hướng dẫn cách tạo Combobox trong Excel một cách nhanh chóng nhất
- doc Hướng dẫn tạo Menu liên kết tới các sheet bằng hàm Hyperlink và cách sử dụng công thức đếm số lần xuất hiện trong Table
- doc Hướng dẫn tạo danh sách không có giá trị trùng trong combobox
- doc Cách dùng hàm SUMIFS lập báo cáo tổng hợp một cách nhanh chóng nhất
- doc Hướng dẫn cách tính trung bình của một số theo từng lần và sử dụng hàm Subtotal để đánh số thứ tự kết quả lọc Autofilter
- doc Hướng dẫn lập bảng kế hoạch thanh toán hóa đơn trong Excel nhanh chóng nhất
- doc Hướng dẫn cách sử dụng Regular Expression và cách tra cứu thời gian bằng VBA
- doc VBA là gì? VBA trong Excel giúp ích gì cho công việc của bạn?
- doc Vẽ và phân tích biểu đồ xu hướng với Data Analysis trong Excel
- doc Hướng dẫn cách sử dụng hàm PMT tính số tiền thanh toán hàng kỳ cho khoản vay và cách phân tích trả nợ gốc và lãi cùng chuỗi hàm PMT trong Excel
- doc Hướng dẫn chọn nội dung xuất hiện nhiều nhất trong danh sách và sử dụng vòng tính lặp trong Excel