Cách Chọn Ngày Từ Lịch Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao

Mục lục bài viết

Mở Đầu

Excel là một trong những công cụ mạnh mẽ nhất để xử lý dữ liệu, và việc làm việc với ngày tháng là một trong những nhu cầu phổ biến nhất của người dùng. Tuy nhiên, không phải ai cũng quen thuộc với các tính năng liên quan đến lịch trong Excel, đặc biệt là khi muốn cho phép người dùng chọn ngày một cách trực quan thông qua một ô nhập liệu. Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, đầy đủ và thực tế về cách chọn ngày từ lịch trong Excel – từ các phương pháp cơ bản như sử dụng Data Validation và Date Picker, đến các kỹ thuật nâng cao như tạo UserForm tùy chỉnh và sử dụng VBA để tối ưu hoá trải nghiệm người dùng.

1. Tại Sao Cần Chọn Ngày Từ Lịch Trong Excel?

1.1. Đảm Bảo Độ Chính Xác Dữ Liệu

Khi người dùng nhập ngày thủ công, rất dễ xảy ra lỗi định dạng (ví dụ: dd/mm/yyyy vs mm/dd/yyyy) hoặc nhập sai ngày (như 31/02). Sử dụng lịch chọn ngày sẽ giảm thiểu rủi ro lỗi nhập liệu và đảm bảo dữ liệu thống nhất.

1.2. Tăng Tính Thân Thiện Với Người Dùng

Một giao diện chọn ngày trực quan giúp người dùng không cần nhớ các quy tắc nhập ngày. Điều này đặc biệt hữu ích trong các bảng tính được chia sẻ giữa các bộ phận, hoặc khi người dùng không quen với Excel.

1.3. Hỗ Trợ Các Tính Năng Phân Tích

Ngày tháng là nền tảng cho các hàm phân tích thời gian như DATEDIF, NETWORKDAYS, EOMONTH, v.v. Khi dữ liệu ngày được nhập đúng chuẩn, việc sử dụng các hàm này trở nên dễ dàng và chính xác hơn.

2. Các Phương Pháp Chọn Ngày Từ Lịch Trong Excel

2.1. Sử Dụng Data Validation Kết Hợp Với Date Picker (Excel 365/2026)

2.1.1. Bước 1: Đặt Data Validation Cho Ô Nhập

  1. Chọn ô hoặc vùng ô mà bạn muốn người dùng nhập ngày (ví dụ: B2:B100).
  2. Vào Data → Data Validation.
  3. Ở tab Settings, trong mục Allow, chọn Date.
  4. Đặt Data thành between, và nhập Start date và End date (ví dụ: 01/01/2000 và 31/12/2100). Điều này giúp giới hạn người dùng chỉ nhập ngày trong khoảng thời gian hợp lệ.
  5. Ở tab Input Message, nhập thông báo giúp người dùng biết họ phải nhập ngày.
  6. Ở tab Error Alert, thiết lập thông báo lỗi nếu người dùng nhập dữ liệu không hợp lệ.

2.1.2. Bước 2: Kích Hoạt Date Picker

  • Excel 365 và Excel 2026 đã tích hợp sẵn Date Picker khi bạn click vào một ô có Data Validation kiểu Date. Khi người dùng chọn ô, một biểu tượng lịch sẽ xuất hiện ở góc phải ô, click vào đó sẽ mở lịch chọn ngày.
  • Nếu biểu tượng không xuất hiện, hãy chắc chắn rằng bạn đang sử dụng phiên bản hỗ trợ tính năng này và đã bật Office Intelligent Services trong File → Options → Trust Center → Trust Center Settings → Privacy Options.

2.1.3. Ưu Điểm và Nhược Điểm

Ưu điểmNhược điểm
Không cần viết mã VBAChỉ hoạt động trên Excel 365/2026 trở lên
Giao diện thân thiện, tích hợp sẵnKhông tùy biến giao diện lịch (màu sắc, định dạng)

2.2. Sử Dụng Microsoft Date and Time Picker Control (ActiveX Control)

Đây là phương pháp truyền thống, phù hợp với các phiên bản Excel trước 2026 hoặc khi bạn muốn tùy chỉnh nhiều hơn.

2.2.1. Bước 1: Thêm Control Vào Sheet

  1. Vào Developer tab (nếu chưa hiện, bật qua File → Options → Customize Ribbon → Developer).
  2. Chọn Insert → More Controls (biểu tượng cờ lê).
  3. Tìm Microsoft Date and Time Picker Control 6.0 (SP6), chọn OK.
  4. Vẽ control trên sheet tại vị trí mong muốn.

Lưu ý: Một số máy tính không cài sẵn control này (đặc biệt là trên Windows 10/11 64-bit). Nếu không thấy trong danh sách, bạn cần cài đặt Microsoft Office 365 (32-bit) hoặc tải MSCOMCT2.OCX và đăng ký bằng lệnh regsvr32.

2.2.2. Bước 2: Liên Kết Control Với Ô

  • Cách 1: Sử dụng macro để khi người dùng chọn ngày trên control, giá trị sẽ tự động điền vào ô đích.
Private Sub DTPicker1_Change() Sheet1.Range("B2").Value = Me.DTPicker1.Value
End Sub
  • Cách 2: Gán thuộc tính LinkedCell trong Properties của control (nhấn F4 khi control được chọn). Nhập địa chỉ ô (ví dụ: B2). Khi người dùng chọn ngày, ô B2 sẽ tự động nhận giá trị.

2.2.3. Ưu Điểm và Nhược Điểm

Ưu điểmNhược điểm
Tùy chỉnh giao diện (kích thước, màu nền)Cần cài đặt control, không có trên mọi máy
Hoạt động trên hầu hết các phiên bản ExcelKhi chuyển file sang máy không có control, sẽ báo lỗi

2.3. Tạo Calendar Pop‑Up Bằng VBA (UserForm)

Nếu bạn muốn một giải pháp hoàn toàn độc lập, không phụ thuộc vào control bên ngoài, bạn có thể tự tạo một UserForm chứa lịch và gọi nó khi người dùng double‑click vào ô.

2.3.1. Bước 1: Tạo UserForm

  1. Mở VBA Editor (Alt + F11).
  2. Chọn Insert → UserForm. Đặt tên frmCalendar.
  3. Thêm một Microsoft MonthView Control (nếu có) hoặc tạo lịch bằng CommandButtons (cách phổ biến hơn vì không phụ thuộc vào control).

Gợi ý: Sử dụng Microsoft Calendar Control 11.0 nếu có sẵn; nếu không, chúng ta sẽ tạo lịch thủ công.

2.3.2. Bước 2: Xây Dựng Lịch Bằng Nút

Dưới đây là một đoạn mã mẫu tạo lịch bằng 7×6 grid (ngày trong tháng).

Option Explicit Public SelectedCell As Range Private Sub UserForm_Initialize() Dim i As Integer, j As Integer, btn As MSForms.CommandButton Dim leftPos As Single, topPos As Single Dim dayWidth As Single, dayHeight As Single dayWidth = 30 dayHeight = 20 leftPos = 10 topPos = 30 ' Tạo tiêu đề ngày trong tuần Dim weekDays As Variant weekDays = Array("CN", "T2", "T3", "T4", "T5", "T6", "T7") For i = 0 To 6 Set btn = Me.Controls.Add("Forms.CommandButton.1", "lbl" & i) With btn .Caption = weekDays(i) .Left = leftPos + i dayWidth .Top = topPos - dayHeight .Width = dayWidth .Height = dayHeight .Enabled = False .BackColor = &H00C0C0C0 End With Next i ' Tạo 42 nút cho các ngày (6 tuần 7 ngày) For i = 0 To 5 For j = 0 To 6 Set btn = Me.Controls.Add("Forms.CommandButton.1", "btn" & i & j) With btn .Caption = "" .Left = leftPos + j dayWidth .Top = topPos + i dayHeight .Width = dayWidth .Height = dayHeight .Tag = "" ' sẽ lưu ngày thực tế End With Next j Next i Call FillCalendar(Date) ' Mặc định hiện tháng hiện tại
End Sub Private Sub FillCalendar(ByVal d As Date) Dim firstDay As Date, lastDay As Date Dim startCol As Integer, i As Integer, r As Integer, c As Integer Dim btn As MSForms.CommandButton ' Xóa nội dung cũ For Each btn In Me.Controls If TypeName(btn) = "CommandButton" Then If Left(btn.Name, 3) = "btn" Then btn.Caption = "" btn.Tag = "" btn.BackColor = &H8000000F ' Màu nền mặc định End If End If Next btn firstDay = DateSerial(Year(d), Month(d), 1) lastDay = DateSerial(Year(d), Month(d) + 1, 0) ' ngày cuối cùng của tháng startCol = Weekday(firstDay, vbSunday) - 1 ' 0 = Chủ Nhật r = 0: c = startCol For i = 1 To Day(lastDay) Set btn = Me.Controls("btn" & r & c) btn.Caption = i btn.Tag = DateSerial(Year(d), Month(d), i) btn.BackColor = IIf(Weekday(btn.Tag) = vbSunday, &H00FFCCCC, &H00FFFFFF) ' Chủ nhật màu hồng nhẹ c = c + 1 If c > 6 Then c = 0 r = r + 1 End If Next i ' Hiển thị tháng năm trên tiêu đề Me.Caption = Format(d, "mmmm yyyy")
End Sub Private Sub CommandButton_Click() Dim btn As MSForms.CommandButton Set btn = Me.ActiveControl If btn.Tag <> "" Then SelectedCell.Value = btn.Tag Unload Me End If
End Sub ' Cho phép chuyển tháng bằng phím mũi tên
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim curDate As Date curDate = DateValue(Me.Caption & " 1") If KeyCode = vbKeyLeft Then Call FillCalendar(DateAdd("m", -1, curDate)) ElseIf KeyCode = vbKeyRight Then Call FillCalendar(DateAdd("m", 1, curDate)) End If
End Sub

2.3.3. Bước 3: Gọi Calendar Khi Nhấp Ô

Trong module chuẩn hoặc trong ThisWorkbook, thêm mã sau:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("B2:B100")) Is Nothing Then Cancel = True frmCalendar.SelectedCell = Target frmCalendar.Show vbModal End If
End Sub

Khi người dùng double‑click vào bất kỳ ô nào trong vùng B2:B100, calendar pop‑up sẽ xuất hiện, cho phép chọn ngày. Ngày được chọn sẽ tự động điền vào ô đang được chọn.

2.3.4. Ưu Điểm và Nhược Điểm

Ưu điểmNhược điểm
Hoàn toàn độc lập, không phụ thuộc vào control bên ngoàiCần viết VBA, người dùng phải bật macro
Tùy chỉnh giao diện, có thể thêm nút chuyển tháng, nămPhức tạp hơn so với Data Validation đơn giản

2.4. Sử Dụng Power Query Để Chuyển Đổi Văn Bản Thành Ngày

Trong một số trường hợp, dữ liệu ngày được nhập dưới dạng text (ví dụ: “2026‑03‑15”). Để chuyển đổi nhanh, bạn có thể dùng Power Query:

  1. Chọn Data → Get & Transform Data → From Table/Range.
  2. Trong Power Query Editor, chọn cột ngày, vào Transform → Data Type → Date.
  3. Nếu định dạng không chuẩn, dùng Split Column hoặc Add Column → Custom Column với công thức Date.FromText(YourColumn).
  4. Load lại dữ liệu vào sheet.

Cách này không trực tiếp “chọn ngày”, nhưng giúp đảm bảo dữ liệu ngày luôn ở định dạng chuẩn khi người dùng nhập.

3. Các Lưu Ý Khi Áp Dụng Date Picker Trong Excel

Choose Date From Calendar Excel
Choose Date From Calendar Excel

3.1. Định Dạng Ngày Phù Hợp

  • Đặt Cell Format thành Date (Ctrl + 1 → Number → Date) để tránh việc Excel tự động chuyển thành số serial.
  • Khi làm việc đa ngôn ngữ, bạn có thể sử dụng Custom Format dd/mm/yyyy hoặc mm/dd/yyyy tùy theo tiêu chuẩn địa phương.

3.2. Bảo Mật Macro

Nếu bạn sử dụng VBA, người dùng cuối phải cho phép macro (Trust Center → Macro Settings). Để tránh rủi ro bảo mật, hãy ký số macro bằng Digital Certificate hoặc cung cấp hướng dẫn bật macro tạm thời.

3.3. Tương Thích Phiên Bản

  • Date Picker tích hợp chỉ có trên Excel 365 và 2026. Đối với Excel 2026 trở về trước, hãy dùng ActiveX control hoặc UserForm VBA.
  • Đối với Excel cho Mac, không hỗ trợ ActiveX. Bạn cần dùng UserForm VBA hoặc Data Validation kết hợp AppleScript (phức tạp) – thường người dùng Mac sẽ chọn phương pháp VBA.

3.4. Độ Phức Tạp Của Bảng Tính

Nếu bảng tính chứa hàng nghìn dòng, việc gắn Date Picker cho từng ô có thể làm chậm Excel. Giải pháp:

  • Sử dụng Data Validation cho toàn cột (như B:B) – chỉ cần một lần thiết lập.
  • Khi cần pop‑up, chỉ gắn VBA cho cột cần (ví dụ B2:B5000), tránh áp dụng cho toàn sheet.

4. Thực Hành: Xây Dựng Một Mẫu Đăng Ký Nhân Sự Với Ngày Sinh

4.1. Mô Tả Yêu Cầu

  • Cột A: STT (tự động tăng)
  • Cột B: Họ và tên
  • Cột C: Ngày sinh (phải chọn qua lịch)
  • Cột D: Tuổi (tự động tính dựa trên ngày sinh)
  • Cột E: Ghi chú

4.2. Bước Thực Hiện

Bước 1: Thiết Lập Data Validation Cho Cột Ngày Sinh

  1. Chọn cột C2:C1000.
  2. Data → Data Validation → Allow: Date, Data: between, Start date: 01/01/1900, End date: 31/12/2100.
  3. Thêm thông báo “Vui lòng chọn ngày sinh từ lịch”.

Bước 2: Kích Hoạt Date Picker

  • Nếu dùng Excel 365, khi người dùng click vào ô, biểu tượng lịch sẽ xuất hiện.

Bước 3: Tự Động Tính Tuổi

Ở ô D2, nhập công thức:

=IF(C2="","",INT(YEARFRAC(C2,TODAY(),1)))

Sau đó kéo công thức xuống hết cột.

Bước 4: Tự Động Tăng STT

Ở ô A2, nhập:

=ROW()-1

Kéo xuống để tự động đánh số.

Bước 5: Bảo Vệ Sheet

  • Chọn toàn bộ sheet → Format Cells → Protection → Locked (mặc định).
  • Sau đó, Mở khóa cột B và C (để người dùng nhập) bằng cách Format Cells → Protection → Unlocked.
  • Vào Review → Protect Sheet, đặt mật khẩu (nếu cần). Người dùng chỉ có thể nhập dữ liệu, không thể thay đổi công thức.

4.3. Kết Quả

Bạn sẽ có một bảng đăng ký nhân sự sạch sẽ, ngày sinh được nhập qua lịch, giảm thiểu lỗi. Khi người dùng nhập ngày, tuổi sẽ tự động cập nhật ngay lập tức.

5. Các Mở Rộng Nâng Cao

5.1. Thêm Nút “Today” Trong Calendar

Trong UserForm, bạn có thể thêm CommandButton với caption “Today”. Khi click, nó sẽ điền ngày hiện tại vào ô đang chọn:

Private Sub btnToday_Click() SelectedCell.Value = Date Unload Me
End Sub

5.2. Cho Phép Chọn Khoảng Thời Gian (Ngày Bắt Đầu – Ngày Kết Thúc)

Nếu bạn cần người dùng nhập khoảng thời gian, có thể tạo hai Date Picker (StartDate và EndDate) trên cùng một UserForm, hoặc sử dụng Two Calendar Controls. Sau khi người dùng chọn, bạn có thể kiểm tra:

If EndDate < StartDate Then MsgBox "Ngày kết thúc không được trước ngày bắt đầu!", vbExclamation Exit Sub
End If

5.3. Đồng Bộ Hóa Với Outlook Calendar

Với VBA, bạn có thể đồng bộ ngày trong Excel với Outlook Calendar:

Sub CreateOutlookAppointment() Dim olApp As Object, olApt As Object Set olApp = CreateObject("Outlook.Application") Set olApt = olApp.CreateItem(1) ' 1 = olAppointmentItem With olApt .Subject = "Họp dự án" .Start = Sheet1.Range("C2").Value ' ngày bắt đầu .End = DateAdd("h", 1, .Start) ' 1 giờ sau .ReminderSet = True .ReminderMinutesBeforeStart = 15 .Save End With
End Sub

Điều này hữu ích khi bạn muốn tạo lịch công việc tự động từ danh sách ngày trong Excel.

6. Tổng Kết

Việc chọn ngày từ lịch trong Excel không chỉ giúp cải thiện độ chính xác dữ liệu mà còn nâng cao trải nghiệm người dùng. Từ các giải pháp cơ bản như Data Validation kết hợp Date Picker tích hợp sẵn, đến các phương pháp nâng cao như tạo UserForm tùy chỉnh bằng VBA, bạn có thể lựa chọn giải pháp phù hợp nhất với môi trường làm việc và phiên bản Excel của mình.

  • Nếu bạn dùng Excel 365/2026, hãy tận dụng tính năng Date Picker tích hợp – nhanh, không cần code.
  • Nếu bạn cần tùy biến giao diện hoặc làm việc trên các phiên bản cũ, hãy dùng ActiveX Date and Time Picker hoặc UserForm VBA.
  • Đối với bảng tính lớn, hãy cân nhắc hiệu năng, áp dụng Data Validation cho toàn cột và chỉ dùng VBA cho các ô cần pop‑up.
  • Luôn bảo vệ dữ liệu bằng cách định dạng ngày chuẩn, thiết lập Validation và bảo mật macro khi cần.

Hy vọng bài viết này đã cung cấp cho bạn một cẩm nang toàn diện để triển khai chức năng chọn ngày từ lịch trong Excel một cách hiệu quả và chuyên nghiệp. Chúc bạn thành công trong việc xây dựng các bảng tính thông minh, giảm thiểu lỗi nhập liệu và nâng cao năng suất làm việc!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận