Hướng dẫn cách tạo một trò chơi chữ “Wordle” lan truyền trong Excel

Tôi rất thích sử dụng Excel cho những việc ngoài các tác vụ kế toán nhàm chán. Xây dựng một bản sao (clone) của trò chơi Wordle hoạt động đầy đủ, có thể tái sử dụng và chia sẻ là một trong số đó. Hơn nữa, đó là một cách thú vị, độc đáo để thành thạo các công cụ Excel cơ bản.
Bước chính trong hướng dẫn này sử dụng macro VBA để xử lý chuỗi đoán và logic tính điểm phức tạp của trò chơi Wordle. Điều này đảm bảo người chơi có trải nghiệm đáng tin cậy nhất, vì nó không yêu cầu họ thay đổi bất kỳ cài đặt cốt lõi nào của Excel. Tuy nhiên, đừng lo lắng nếu bạn không biết viết mã VBA, vì bạn chỉ cần sao chép và dán mã của tôi!
Khi người chơi mở tệp có bật macro, họ sẽ thấy một dải băng cảnh báo bảo mật ở đầu màn hình Excel. Lúc này, họ phải nhấp vào “Bật nội dung” (Enable Content) để trò chơi hoạt động như mong đợi. Nếu không, bảng trò chơi sẽ tĩnh và không tính điểm các lần đoán của họ. Cả bạn và những người chơi nhận được bản sao trò chơi của bạn đều phải sử dụng phiên bản máy tính để bàn (desktop) của Microsoft Excel.
Xem thêm: Hướng dẫn 5 cách nâng cấp PC bạn có thể thực hiện thay vì mua RAM quá đắt
Bước 1: Lưu tệp cho phép Macro
Bước này chuẩn bị sổ làm việc của bạn cho mã VBA. Mở một sổ làm việc Excel mới, và nhấp vào Tệp (File) > Lưu như (Save As) > Duyệt (Browse).

Chọn một vị trí để lưu tệp của bạn, và trong trường Lưu dưới dạng (Save As Type), chọn “Excel Macro-Enabled Workbook” (Sổ làm việc Excel có hỗ trợ Macro). Sau đó, đặt tên cho tệp và nhấp vào “Lưu (Save)”.

Bước 2: Thiết lập từ điển và giao diện
Tiếp theo, bạn cần tạo một từ điển các từ hợp lệ và tạo bảng trò chơi Wordle.
Thêm một trang tính mới (“+”), nhấp đúp vào tab trang tính mới để đổi tên thành WordList. Nhấn Enter để xác nhận.

Tìm một danh sách các từ có năm chữ cái, sao chép tất cả các từ đó, và dán chúng (sử dụng Ctrl+Shift+V) vào ô A1 trong trang tính WordList. Sau đó, kiểm tra và xóa các bản sao chính xác bằng cách chọn cột A và nhấp vào “Xóa bản sao” (Remove Duplicates) trong tab Dữ liệu (Data).

Quay lại trang tính trò chơi (Sheet1), chọn tất cả các ô (Ctrl+A), và thay đổi chiều rộng ô thành 65px bằng cách nhấp và kéo ranh giới giữa hai tiêu đề cột.
Lặp lại quá trình này cho các hàng để làm cho tất cả các ô có hình vuông.

Bây giờ, nhập một từ bí mật năm chữ cái vào ô A1 bằng chữ in hoa. Sau đó, chọn các ô B3 đến F8, thay đổi kích thước phông chữ thành 36pt, và căn giữa văn bản theo chiều dọc và chiều ngang qua tab Trang chủ (Home). Cuối cùng, thêm một đường viền ngoài (outside border).

Nhấn Ctrl+S để lưu tệp.
Bước 3: Tạo cơ chế trò chơi
Macro là động cơ của trò chơi của bạn. Nó xử lý tất cả logic tính điểm, màu sắc và chữ cái một cách tự động.

Nhấp chuột phải vào tab “Sheet1” và nhấp vào “Xem Mã (View Code)”.

Trong cửa sổ VBA Editor, nhấp đúp vào “Sheet1 (Sheet1)” dưới mục Microsoft Excel Objects, và sao chép và dán mã bên dưới vào khu vực mô-đun trống bên phải.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim GuessRow As Long
Dim SecretWord As String
' Only run if the changed cell is the F-column (the fifth letter of a guess)
If Not Intersect(Target, Me.Range("F3:F8")) Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
' CRITICAL: Unprotect the sheet to allow the macro to change colors and lock status
If Me.ProtectContents Then Me.Unprotect "YOUR_PASSWORD"
GuessRow = Target.Row
' 1. Get Secret Word and Guess
SecretWord = UCase(Me.Range("A1").Value)
' Concatenate the 5 cells into a single string
Dim InputWord As String
Dim j As Long
For j = 2 To 6 ' Loop through columns B to F
InputWord = InputWord & Me.Cells(GuessRow, j).Value
Next j
Dim GuessWord As String
GuessWord = UCase(InputWord)
' 2. Check if valid word (using COUNTIF trick)
Dim WordCount As Long
WordCount = Application.WorksheetFunction.CountIf( _
Sheets("WordList").Range("A:A"), GuessWord)
If WordCount = 0 Then
' Handle invalid word (Not in word list)
MsgBox "Not in word list! Please try again.", vbExclamation
Me.Range("B" & GuessRow & ":F" & GuessRow).ClearContents
Else
' NEW CHECK: Check for duplicate entry
Dim r As Long
Dim DuplicateFound As Boolean
DuplicateFound = False
' Loop through all *previous* guess rows (from row 3 up to the current row - 1)
For r = 3 To GuessRow - 1
' Concatenate the word from the previous row for comparison
Dim PreviousWord As String
Dim k As Long
For k = 2 To 6 ' Columns B to F
PreviousWord = PreviousWord & Me.Cells(r, k).Value
Next k
' Compare the uppercase current guess (GuessWord) with the previous guess
If GuessWord = UCase(PreviousWord) Then
DuplicateFound = True
Exit For
End If
PreviousWord = "" ' Reset for the next loop iteration
Next r
If DuplicateFound Then
MsgBox "You already guessed that word! Please try again.", vbExclamation
Me.Range("B" & GuessRow & ":F" & GuessRow).ClearContents
' Restore settings and exit sub after duplicate is cleared
Application.EnableEvents = True
Application.ScreenUpdating = True
Me.Protect "YOUR_PASSWORD"
Exit Sub
End If
' 3. Core Wordle Scoring Logic (Sets the cell colors directly)
Dim i As Long
Dim Letter As String
Dim ClaimedLetters As String
ClaimedLetters = SecretWord ' Start with all letters available
' Pass 1: Check for GREEN (Correct Position)
For i = 1 To 5 ' Columns 2 (B) to 6 (F)
' FIX: Convert cell content to uppercase for scoring comparison
Letter = UCase(Me.Cells(GuessRow, i + 1).Value)
If Mid(SecretWord, i, 1) = Letter Then
Me.Cells(GuessRow, i + 1).Interior.Color = RGB(106, 170, 100) ' Green
Mid(ClaimedLetters, i, 1) = "#" ' Use placeholder to claim the letter
End If
Next i
' Pass 2: Check for YELLOW/GRAY
For i = 1 To 5
' FIX: Convert cell content to uppercase for scoring comparison
Letter = UCase(Me.Cells(GuessRow, i + 1).Value)
' Only score if not already colored GREEN
If Me.Cells(GuessRow, i + 1).Interior.Color <> RGB(106, 170, 100) Then
' Search the remaining (non-Green) available letters
If InStr(1, ClaimedLetters, Letter) > 0 Then
Me.Cells(GuessRow, i + 1).Interior.Color = RGB(201, 180, 88) ' Yellow
' Claim this yellow letter instance
Mid(ClaimedLetters, InStr(1, ClaimedLetters, Letter), 1) = "#"
Else
Me.Cells(GuessRow, i + 1).Interior.Color = RGB(120, 124, 126) ' Gray
End If
End If
Next i
' 4. Check for Win/Loss (Win check is done via color)
Dim isWin As Boolean
isWin = True
For i = 2 To 6
If Me.Cells(GuessRow, i).Interior.Color <> RGB(106, 170, 100) Then
isWin = False
Exit For
End If
Next i
If isWin Then
Me.Range("B2").Value = "YOU WIN!"
' FIX: Loss condition added for the final row (Row 8)
ElseIf GuessRow = 8 Then
Me.Range("B2").Value = "Better luck next time. The word was " & SecretWord
End If
' 5. LOCK THE CURRENT ROW and UNLOCK THE NEXT ROW for sequential play
Me.Range("B" & GuessRow & ":F" & GuessRow).Locked = True ' Lock the row just completed
' Only unlock the next row if the game isn't won and there are more rows
If Not isWin And GuessRow < 8 Then
Me.Range("B" & (GuessRow + 1) & ":F" & (GuessRow + 1)).Locked = False ' Unlock the next row
End If
End If
Me.Protect "YOUR_PASSWORD" ' Re-protect the sheet using the password you set
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
' If the sheet was already protected, this ensures it gets protected again even if the IF block above was skipped.
If Not Me.ProtectContents Then Me.Protect "YOUR_PASSWORD"
End Sub
Với cửa sổ VBA vẫn đang mở, nhấn Ctrl+H để mở cửa sổ Replace (Thay thế). Trong trường Tìm gì (Find What), gõ YOUR_PASSWORD, và trong trường Thay thế bằng (Replace With), gõ một mật khẩu bạn sẽ sử dụng sau này để bảo vệ trang tính của mình. Hãy ghi chú lại mật khẩu này! Sau đó, nhấp vào “Thay thế Tất cả” (Replace All), và bạn sẽ thấy mật khẩu được thay thế bốn lần.

Đóng cửa sổ Replace.
Vì dòng đầu tiên của mã chứa trình xử lý sự kiện (event handler) sẽ tự động kích hoạt khi bất kỳ ô nào được sửa đổi, bạn phải tạm thời vô hiệu hóa nó cho đến khi bạn hoàn tất việc thiết lập bảng tính. Để làm điều này, khi cửa sổ VBA vẫn đang mở, nhấp vào “Xem (View)” trên dải băng và chọn “Cửa sổ ngay lập tức (Immediate Window)”.

Sau đó, sao chép và dán lệnh sau vào Cửa sổ Ngay lập tức, và nhấn Enter:
Application.EnableEvents = False
Thu nhỏ cửa sổ VBA để quay lại trang tính Wordle. Nhấn Ctrl+S để lưu tệp.
Lưu ý: Chưa thực hiện bất kỳ lần đoán nào trên bảng trò chơi! Chúng ta sẽ kiểm tra chức năng của trang tính trong Bước 7.
Bước 4: Giới hạn đầu vào của người chơi
Tiếp theo, bạn cần kiểm soát cách người chơi nhập liệu. Nói cách khác, bạn muốn buộc họ nhập một chữ cái duy nhất vào mỗi ô, thay vì gõ toàn bộ từ trong một lần.
Bước này có thể được tích hợp vào mã VBA, nhưng có một vài lý do khiến tôi thích sử dụng Data Validation (Xác thực dữ liệu) hơn:
Người chơi nhận được phản hồi về các mục nhập không hợp lệ trước khi đầu vào được chấp nhận (macro chỉ chạy sau khi giá trị ô đã thay đổi).
Xác thực Dữ liệu là một tính năng gốc của Excel, hầu như không mất thời gian xử lý (macro phải khởi tạo, kiểm tra đầu vào ô, sau đó xóa ô, tốn nhiều thời gian và tài nguyên hơn).
Sử dụng Xác thực Dữ liệu rất đơn giản—một công thức đơn giản xử lý tất cả các ô trên bảng trò chơi (macro VBA sẽ yêu cầu mã phức tạp bổ sung).

Chọn các ô B3 đến F8, và trong tab Dữ liệu (Data) trên dải băng, nhấp vào biểu tượng “Xác thực dữ liệu” (Data Validation).
Bây giờ, chọn “Tùy chỉnh” (Custom) từ menu thả xuống Cho phép (Allow), và sao chép công thức sau vào trường Công thức (Formula):
=AND(LEN(B3)=1,ISERROR(VALUE(B3)))
Mở tab “Thông báo lỗi” (Error Alert), và chọn “Dừng” (Stop) trong menu thả xuống Kiểu (Style). Trong trường Tiêu đề (Title), gõ Invalid letter. Sau đó, trong trường Thông báo lỗi (Error Message), gõ Enter only one letter per cell, và nhấp vào “OK”.

Nhấn Ctrl+S để lưu tệp.
Bước 5: Thêm hướng dẫn trò chơi
Bước này thêm chất lượng hình ảnh cho trò chơi của bạn bằng cách cho người chơi biết cách chơi.
Sao chép công thức sau, và dán nó vào ô B2:
=" Guess the 5-letter word. Type one letter per cell and use the Right Arrow key to navigate."Tôi cố tình thêm một dấu cách trước từ “Guess” để tính năng tự động hoàn thành của Excel không kích hoạt khi người chơi gõ chữ “G” là chữ cái đầu tiên của một lần đoán.

Tiếp theo, chọn các ô B2 đến F2, và nhấp vào “Gộp và căn giữa” (Merge And Center) và “Ngắt dòng” (Wrap Text) trong tab Trang chủ (Home).
Nhấn Ctrl+S để lưu tệp.
Bước 6: Hoàn thiện và bảo vệ trò chơi
Bạn gần như đã hoàn thành, nhưng còn một vài việc nhanh chóng cần làm trước khi bạn có thể thử nghiệm trò chơi và gửi cho bạn bè.
Đầu tiên, ẩn từ bí mật bằng cách nhấp chuột phải vào tiêu đề hàng 1 và chọn “Ẩn (Hide)”. Điều này cũng đẩy lưới trò chơi lên cao hơn trên màn hình.

Tiếp theo, bạn cần đảm bảo người chơi chỉ có thể chọn các ô trong hàng đầu tiên khi họ bắt đầu chơi (VBA sẽ xử lý việc điều hướng tuần tự sau khi họ hoàn thành lần đoán đầu tiên). Chọn các ô B3 đến F3, và nhấn Ctrl+1 để mở hộp thoại Định dạng Ô (Format Cells). Mở tab “Bảo vệ (Protection)”, bỏ chọn “Đã khóa (Locked)”, và nhấp vào “OK”.

Tất cả các ô khác đã được khóa theo mặc định khi trò chơi bắt đầu, vì vậy bây giờ bạn có thể bảo vệ trang tính. Trong tab Xem lại (Review), nhấp vào “Bảo vệ trang tính” (Protect Sheet). Sau đó, gõ mật khẩu bạn đã thêm vào mã ở Bước 3, và đảm bảo chỉ có các tùy chọn sau được chọn:
Bảo vệ trang tính và nội dung của các ô đã khóa (Protect worksheet and contents of locked cells)
Chọn các ô chưa khóa (Select unlocked cells)

Nhấp vào “OK”, và xác nhận mật khẩu.

Tiếp theo, bảo vệ trang tính WordList, chỉ chọn “Bảo vệ trang tính và nội dung của các ô đã khóa”.

Bây giờ, quay lại Sheet1, và trong tab Xem (View), bỏ chọn “Tiêu đề (Headings)”.
Cuối cùng, quay lại cửa sổ VBA bạn đã thu nhỏ trước đó, và trong Cửa sổ ngay lập tức (Immediate Window), thay thế từ False bằng True, và nhấn Enter. Điều này kích hoạt mã hoạt động.

Lưu và đóng toàn bộ cửa sổ VBA, và nhấn Ctrl+S để lưu tệp.
Bước 7: Tạo một bản sao thử nghiệm
Đến thời điểm này, có lẽ bạn đang rất nóng lòng muốn kiểm tra trò chơi. Tuy nhiên, đừng làm điều này trong phiên bản hiện tại của tệp! Thay vào đó, hãy tạo một bản sao.

Đóng Excel và định vị thư mục nơi bạn đã lưu sổ làm việc có hỗ trợ macro. Sau đó, chọn tệp và nhấn Ctrl+C > Ctrl+V để nhân đôi nó.
Bây giờ, mở bản sao và nhấp vào “Bật nội dung” (Enable Content).

Thử nghiệm với bảng trò chơi của bạn: gõ một từ không hợp lệ, chèn nhiều hơn một chữ cái vào một ô, xem điều gì xảy ra khi bạn hoàn thành một hàng, sử dụng chữ cái viết thường, lặp lại một từ, v.v.
Bước 8: Gửi trò chơi cho bạn bè
Phần tuyệt vời nhất của việc tạo ra một trò chơi lan truyền là chia sẻ nó! Vì toàn bộ trò chơi nằm trong một tệp Excel duy nhất, việc chia sẻ rất đơn giản, nhưng bạn phải đảm bảo gửi một bản sao (chứ không phải liên kết chia sẻ) của sổ làm việc gốc, chẳng hạn như qua tệp đính kèm email — bạn không muốn mọi người chơi trên cùng một phiên bản!
Ngoài ra, hãy nhớ nói với người chơi rằng họ phải nhấp vào “Bật nội dung” (Enable Content) khi mở sổ làm việc.
Bước 9: Thiết lập lại từ bí mật và thông báo
Bởi vì bạn đã tạo một bản sao thử nghiệm ở Bước 7, lưới trò chơi trong bản gốc phải sạch sẽ. Vì vậy, khi bạn muốn tạo một trò chơi mới vào ngày hôm sau, bạn chỉ cần thiết lập lại từ bí mật. Tuy nhiên, bạn phải tạm thời vô hiệu hóa các macro để làm điều này.
Mở sổ làm việc gốc và nhấp vào “Bật nội dung”. Sau đó, trong Sheet1, nhấp vào “Bỏ bảo vệ trang tính” (Unprotect Sheet) trong tab Xem lại (Review), gõ mật khẩu và nhấp “OK”.

Tiếp theo, nhấp chuột phải vào tab “Sheet1” và nhấp vào “Xem mã (View Code)”. Sau đó, nhấp vào “Xem (View)” trên dải băng của cửa sổ VBA, chọn “Cửa sổ ngay lập tức (Immediate Window)”, và gõ lệnh sau rồi nhấn Enter:
Application.EnableEvents = False
Thu nhỏ cửa sổ VBA để quay lại bảng Wordle, và chọn “Tiêu đề (Headings)” trong tab Xem (View) trên dải băng.

Nhấn Ctrl+A liên tục cho đến khi tất cả các ô trong bảng tính được chọn, sau đó nhấp chuột phải vào tiêu đề hàng 2, và nhấp vào “Bỏ ẩn” (Unhide).

Bây giờ, gõ một từ mới vào ô A1 bằng chữ in hoa, ẩn hàng 1, bỏ chọn tiêu đề, và đặt lại mật khẩu thông qua “Bảo vệ trang tính” (Protect Sheet), đảm bảo chỉ có “Bảo vệ trang tính và nội dung của các ô đã khóa” và “Chọn các ô chưa khóa” vẫn được chọn.
Quay lại Cửa sổ ngay lập tức, thay thế False bằng True, nhấn Enter, và đóng cửa sổ VBA.

Nhấn Ctrl+S để lưu tệp, đóng Excel và gửi trò chơi mới cho bạn bè của bạn.
Việc tạo một bảng Wordle hoàn chỉnh không phải là cách duy nhất tôi tìm thấy niềm vui với Microsoft Excel. Đối với những người bạn thích thử thách hơn, tôi sử dụng chương trình này để tạo các câu đố ô chữ (crossword puzzles) có thể in được, tận dụng các công cụ đơn giản như định dạng ô chính xác, tô màu ô và đường viền ô.











