---
title: สอนทำเกม Sudoku ( Excel Sudoku)
url: https://www.thepexcel.com/create-simple-excel-sudoku/
type: post
date: 2014-02-05
updated: 2024-02-07
author: Sira Ekabut
categories: [Excel Advanced Formula, Excel and Game]
tags: [IF, COUNTIF, data validation, game, sudoku, applied]
---

# สอนทำเกม Sudoku ( Excel Sudoku)

วันนี้ผมจะมาแนะนำวิธีใช้ Excel สร้างเกม Sudoku (Excel Sudoku) อย่างง่ายขึ้นมา โดยที่จะมำให้ **Excel ไฟล์นี้สามารถตรวจสอบได้ว่าเลขที่เราใส่ลงไปผิดกติกาของเกม Sudoku หรือไม่** แต่อันนี้จะไม่ฉลาดพอที่สามารถเฉลยเกม Sudoku ได้นะครับ ถ้าอยากได้แบบนั้นเดี๋ยวมี Link ให้อีกทีนึงท้ายบทความครับ

 

## กติกาเบื้องต้นเกม Sudoku

 ![excel sudoku](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku.png) 
- มีตาราง 9 x 9
- ใส่ได้แค่เลข 1-9
- ใส่เลขห้ามซ้ำกัน 
    - ในแต่ละแถว
    - ในแต่ละคอลัมน์
    - ในแต่ละกรอบตาราง Block ใหญ่ 3 x 3 (เหมือนที่ตีกรอบหนาไว้)
- จะมีเลขใส่มาให้เบื้องต้นบางส่วนก่อน ถ้าเกมง่ายๆก็จะใส่มาให้เยอะหน่อย ถ้าเกมยาก ก็จะใส่มาให้น้อย
- เราจะเล่นเกม โดยมีเป้าหมายคือ** ใส่เลขต่อให้ครบทุกช่อง โดยไม่ทำผิดกติกาข้างบน** ถ้าทำได้ก็ถือว่าจบเกม

 

## วิธีสร้างตัวตรวจกติกาเกม Sudoku

 

โหลดไฟล์ตัวอย่างได้ที่นี่

 
- ไฟล์ก่อนกรอกเลข (แสดงสูตรให้เห็น) [sudoku-inwexcel](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-inwexcel.xlsx)(.xlsx)
- ไฟล์หลังกรอกเลข (ซ่อนสูตร + lock cell พร้อมให้ user เล่น) [sudoku-inwexcel2](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-inwexcel2.xlsx)(.xlsx)

 

> **Concept** : เช็คว่ามีการทำผิดกติกาหรือไม่ ไล่ตามกติกาที่เขียนข้างบน แล้วนับว่ามีการทำผิดกติกากี่อัน/กี่ครั้ง จากนั้นนำผลการนับที่ได้มารวมกัน **ถ้าสรุปแล้วมากกว่า 0 แสดงว่ามีการทำผิดกติกา**

 

### **สร้างตารางขนาด 9×9**

 

โดยปรับให้ขนาดของแถวและคอลัมน์ให้กว้างพอๆ กันตามรูป โดยให้เว้นช่องรอบนอกไว้เล็กน้อย เราจะเอาไว้เขียนสูตรเพื่อตรวจสอบความถูกต้อง ดังนั้นผมจึงเริ่มมุมซ้ายบนที่ช่อง C3 ครับ และอาจจัด Format ตัวหนังสือให้อยู่ตรงกลางทั้งแนวนอนและแนวตั้ง จะได้สวยๆ

 ![1](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-1.gif) 

### **กำหนดเงื่อนไข ว่าให้ใส่ได้แค่เลข 1-9 เท่านั้น **

 

เราจะทำโดยใช้ Data Validation โดยเลือกพื้นที่ตาราง 9×9 แล้วไปที่ Ribbon Data=> Data Validation =>Data Validation…

 

ใน Allow ให้เลือก** Whole Number** (จำนวนเต็ม) Between Minimum=**1** Maximum=**9  
![sudoku-2](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-2.gif)  
**

 

### **สร้างตัวตรวจสอบว่าแต่ละแถวมีเลข 1-9 กี่ตัว**

 

ใช้ COUNTIF มาช่วย =COUNTIF(แต่ละแถว,แต่ละเลข1-9)

 

ในที่นี้ผมเขียนว่า

 

```
=COUNTIF($C3:$K3,M$2)
```

 

เพราะ C3:K3 ผมคือแถวแรก ส่วน M2 ผมคือเลข 1

 

พอ copy ไปยังช่องอื่น สูตรจะใช้ได้โดยอันโนมัติ เพราะผม Lock คอลัมน์ไว้ที่คอลัมน์ C กับ K (เพื่อไล่ไปแต่ละแถวลงไปข้างล่าง) ส่วนช่อง M2 ล๊อคแถวไว้ เวลา Copy ไปจะได้ไล่ไปยังเลข 2-9 ต่อไปได้

 ![2](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-3.gif) 

### **สร้างตัวตรวจสอบว่าแต่ละคอลัมน์มีเลข 1-9 กี่ตัว**

 

ใช้ COUNTIF มาช่วย =COUNTIF(แต่ละคอลัมน์,แต่ละเลข1-9)

 

ในที่นี้ผมเขียนว่า

 

```
=COUNTIF(C$3:C$11,$B13)
```

 

เพราะ C3:C11 ผมคือคอลัมน์แรก ส่วน B13 ผมคือเลข 1

 

พอ copy ไปยังช่องอื่น สูตรจะใช้ได้โดยอันโนมัติ เพราะผม Lockแถวไว้ที่แถว 3 กับ 11 (เพื่อไล่ไปแต่ละคอลัมน์ทางขวา) ส่วนช่อง B13 ล๊อคคอลัมน์ไว้ เวลา Copy ไปจะได้ไล่ไปยังเลข 2-9 ต่อไปได้

 ![3](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-4.gif) 

### **สร้างตารางตรวจเช็คการใส่ข้อมูลซ้ำ ในแต่ละ Zone 3×3 อันใหญ่**

 

โดยใช้เทคนิค คล้ายๆ ที่เขียนไว้ใน [https://www.thepexcel.com/prevent-duplicate-data-entry/](https://www.thepexcel.com/prevent-duplicate-data-entry/)  
แต่ว่าเราจะไม่ใช้ Data Validation แล้ว เพราะเราได้ใช้ไปแล้วในชั้นตอนแรก และผู้เล่นอาจต้องการลองใส่เลขเข้าไปก่อน ถ้าใช้ Data Validation จะไม่ยอมให้ใส่เลย อันนั้นแรงเกินไป ดังนั้นเราจะเขียนทดไว้อีกทีนึงแทนตามรูป (ขวาล่าง)

 

โดยที่เราต้องเขียนสูตร 9 ครั้ง แยกแต่ละ Block ใหญ่ที่เป็นขนาด 3×3

 ![4](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-6.gif) 

ใน Block แรก (M13) เขียนว่า =COUNTIF($C$3:$E$5,C3) แล้ว copy paste แค่ zone ตัวเอง คือ ช่อง M13 ถึง O15

 ![5](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-6-2.gif) 

ใน Block ถัดไปทางขวา (P13) เขียนว่า

 

```
=COUNTIF($F$3:$H$5,F3)
```

 

แล้ว copy paste แค่ zone ตัวเอง คือ ช่อง P13 ถึง R15

 

ทำแบบนี้จบครบ 9 Block

 

**ต่อไป เราจะเช็คว่าทั้ง 3 ตารางตัวช่วยที่เราสร้างขึ้นมานั้น มีเลขอะไรที่มากกว่า 1 หรือไม่ ถ้าหากมี แสดงว่าทำผิดกติกา**

 

โดยใช้ COUNTIF มานับว่าช่วงที่เราหามีเลขอะไรมากกว่า 1 หรือไม่นั่นเอง โดยเขียนว่า

 

```
=COUNTIF(C13:K21,">1")
```

 

```
=COUNTIF(M3:U11,">1")
```

 

```
=COUNTIF(M13:U21,">1")
```

 

จากนั้นนำผลนับที่ได้มากรวมกัน ถ้ามากกว่า 0 แปลว่ามีการทำผิดกติกาครับ

 ![6](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-7.gif) 

ทำการ Link ไปแสดงผลด้านบน พร้อมใส่ Conditional Format ให้สวยงาม

 

เช่น ถ้า 3 ช่องนั้น SUM ได้มากกว่า 0 ให้เขียนว่า ไม่ ok เป็นต้น  
ในที่นี้ผมเขียนว่า

 

```
=IF(M23>0,"ไม่ok","ok") 
```

 

โดย M23 ผมเป็นช่องที่เช็คผลรวมความผิดปกติ

 ![7](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-8.gif) 

สุดท้ายก็เช็คว่ากรอกครบทุกช่องแล้วหรือยัง **ถ้าครบ 81 ช่องแล้วและยัง Ok อยู่ก็ถือว่าจบเกมครับ ^^  
**ในที่นี้ ผมเขียนเพิ่มไปว่า

 

```
=IF(M23>0,"ไม่ok",IF(COUNT(C3:K11)=9*9,"จบเกม","ok"))
```

 

## การเตรียมการก่อนให้ผู้เล่นเริ่มเล่นเกมจริง

 

ทีนี้ ก็สามารถใส่เลขเริ่มต้น ตามแต่ละ Puzzle ที่ได้มาได้เลย

 

เพื่อความสะดวก และไม่ให้สับสนว่าเลขไหนเป็นเลขเริ่มต้น เลขไหนเป็นเลขที่ให้ผู้เล่นเพิ่มทีหลัง อาจใช้วิธี Fill สี หรือ ทำสีอักษรให้ต่างจากปกติก็ได้

 

**เทคนิคการเลือกพื้นที่เฉพาะที่เป็นเลขเริ่มต้นของเรา**  
ให้เลือกพื้นที่ทั้งหมดในตาราง => Ctrl+G => Special => Constant => มันจะเลือกเฉพาะที่มีการกรอกข้อมูลเริ่มต้นไปแล้ว

 

จากนั้นค่อยใส่สี หรืออะไรให้ต่างจากปกติ แล้วค่อยซ่อนแถวและคอลัมน์ที่เป็นตัวทดของเราไปซะ เพื่อความสะอาดตาด้วยการเลือก แถว หรือ column แล้วคลิ๊กขวา => Hide

 ![8](https://www.thepexcel.com/wp-content/uploads/2014/02/sudoku-prepare-complete.gif) 

เพื่อความสะดวกในการลบเลขที่ให้ผู้เล่นเพิ่มเข้าไปเพื่อเริ่มเกมใหม่ เราอาจจะ Lock Cell เฉพาะที่เป็นเลขเริ่มต้นไว้ โดยจะไม่ Lock ช่องที่ให้ผู้เล่นกรอกเอง โดยทำดังนี้

 

เลือกพื้นที่ทั้งหมดในตาราง => Ribbon Home =>Cells =>Format =>**ติ๊กเอา Lock Cell ออก **(เพื่อปลดการ Lock Cell ทั้งหมดก่อน)

 

เลือกพื้นที่เฉพาะที่เป็นเลขเริ่มต้นของเรา มันจะเลือกเฉพาะที่มีการกรอกข้อมูลเริ่มต้นไปแล้ว จากนั้นกด

 

Ribbon Home =>Cells =>Format => **ติ๊กให้ Lock Cell ทำงาน **(เพื่อให้ Lock Cell เฉพาะที่มีการใส่เลขลงไปแล้ว) จากนั้นกด Ribbon Review => Protect Sheet

 

ถ้าติ๊กเอา Select Locked Cell ออก จะเป็นการห้ามให้ผู้เล่นมาเลือกช่องที่กรอกไว้แล้ว   
จะใส่ Password หรือไม่ก็ได้ แล้วกด OK

 

เท่านี้ เวลาเล่น ก็จะไม่สามารถไม่ต้องกังวลว่าจะเผลอลบช่องที่เป็นตัวเลขเริ่มต้นแล้ว และเราก็สามารถเอาไปให้คนอื่นเล่นเกม Sudoku ของเราได้แล้วครับ

 

ที่นี้ถ้าใครอยากได้ตัวโปรแกรมแก้ปัญหา Sudoku แบบบอกเฉลยได้เลย ผมจะแนะนำ Link ให้ครับ

 

## Sudoku Solver

 

### **แบบที่ 1 : แก้โดยไม่ใช้ VBA แต่ใช้ Iteration แทน**

 

**ดาวน์โหลดไฟล์**

 

[https://templates.office.com/en-us/Sudoku-puzzle-solver-TM10080972](https://templates.office.com/en-us/Sudoku-puzzle-solver-TM10080972)

 

**สอนวิธีเขียน**

 
- [Building a Basic, Understandable Sudoku Solver Using Excel Iterative Calculation – Part 1/2](https://www.microsoft.com/en-us/microsoft-365/blog/2008/09/30/building-a-basic-understandable-sudoku-solver-using-excel-iterative-calculation-part-12/)
- [Building a Basic, Understandable Sudoku Solver Using Excel Iterative Calculation – Part 2/2](https://www.microsoft.com/en-us/microsoft-365/blog/2008/09/30/building-a-basic-understandable-sudoku-solver-using-excel-iterative-calculation-part-12/)

 

### **แบบที่ 2 แก้โดยใช้ VBA**

 

ลอง search Google ว่า Excel Sudoku Solver VBA ดูครับ

---

_Source: [https://www.thepexcel.com/create-simple-excel-sudoku/](https://www.thepexcel.com/create-simple-excel-sudoku/)_
