---
title: "สอนใช้ Python ใน Excel ตอนที่ 2  : List, Loop, Condition"
url: https://www.thepexcel.com/python-in-excel-ep02/
type: post
date: 2023-09-10
updated: 2025-12-22
author: Sira Ekabut
categories: [Python in Excel]
tags: [IF, SUM, loop, for, python, Excel Python]
---

# สอนใช้ Python ใน Excel ตอนที่ 2  : List, Loop, Condition

หลังจาก[ในตอนที่แล้ว](https://www.thepexcel.com/python-in-excel-ep01/)ผมได้มีการแนะนำแนวทางการใช้ Python ใน Excel เบื้องต้นไปแล้ว ในตอนนี้หลักๆ แล้ว ผมจะมาแนะนำวิธีเขียน Code เพื่อสร้าง Loop ใน Python ให้เพื่อนๆ ได้รู้จักกันครับ

 

Loop คือการสั่งให้โปรแกรมคอมพิวเตอร์ทำงานซ้ำๆ ตามที่เรากำหนด ซึ่งใน python มี Loop แบบนึงที่นิยมมาก คือ for loop ซึ่งค่อนข้างทรงพลังมาก

 

วิธีการคือ for loop จะวนพิจารณาทำงานซ้ำโดยอ่านค่า Item ใน Object ที่มี item ย่อยๆ อยู่ข้างใน ที่ใช้บ่อยมากคือ List Range กับ String (ข้อความ) เป็นต้น ซึ่งเป็นเรื่องที่ผมจะอธิบายในบทความนี้

 

แต่ก่อนที่ผมจะอธิบายเรื่อง Loop เพื่อให้เห็นภาพมากขึ้น เรามาทำความรู้จัก List ให้ดีขึ้นกันอีกนิดนึงดีกว่าครับ

 

## เรื่องของ List ใน Python

 

List คือประเภทข้อมูลแบบนึงของ Python ที่สามารถเก็บข้อมูลไว้ในตัวมันได้หลายตัว โดยที่ข้อมูลแต่ละตัวจะเป็นข้อมูลประเภทอะไรก็ได้ (ใน List มี List ซ้อนอีกก็ได้) เก็บซ้ำกันก็ได้ และลำดับการเก็บข้อมูลมีความหมาย (เราอ้างอิงตำแหน่งของมันได้)

 

สมมติว่า List ต้นฉบับคือแบบนี้

 

```python
colorList=["red","green","blue","yellow"]
```

 ![1](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-022.png) 

### อ้างอิงถึง item ใน List

 

หากเราต้องการอ้างอิงถึง item ใน List สามารถใช้

 

```python
ListName[เลขindex]
```

 

โดยที่เราสามารถอ้างอิงเลข index ได้ 2 แบบ คือ

 
- **เลข index เป็นบวก** โดยเริ่มจาก item แรก คือ index 0 คือ แล้ว item 2 คือ index 1
- **เลข index ติดลบ** ไล่ย้อนหลับนับ item สุดท้ายเป็น -1, รองสุดท้ายคือ -2

 

เช่น

 
- **colorList[1] **จะได้ item ที่ 2 คือ string ว่า green
- **colorList[-3] **คือ item ลำดับที่ 3 จากท้าย ซึ่งในที่นี้ก็คือ green เช่นกัน

 ![2](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-028.png) 

### Slice หั่นเลือกเอาช่วง item ใน List

 

เราสามารถ slice เลือกบางส่วนของ List ได้ด้วยวิธีแบบนี้

 

```python
ListName[ indexเริ่ม : แต่ไม่ถึง indexจบ ]
```

 

```python
colorList[1:3]
# เอาตั้งแต่ index1 (เริ่มตัวที่2) แต่ไม่ถึง index3 (ไม่ถึง 4 คือเอาถึงตัวที่3)
```

 

สรุปแล้ว [1:3] แปลว่าเอาตั้งแต่ ตัวที่2 ถึงตัวที่ 3

 ![3](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-024.png) 

ถ้าจะเริ่มเอาแต่แรก สามารถใส่ colorList[0:3] หรือจะเว้นไปเลย เหลือแค่ colorList[:3] ก็ได้

 

```python
colorList[:3]
# เอาตั้งแต่แรก แต่ไม่ถึง index3 (ไม่ถึง 4 คือเอาถึงตัวที่3)
```

 

สรุปแล้ว [:3] แปลว่าเอาตั้งแต่ ตัวแรก ถึงตัวที่ 3

 ![4](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-025.png) 

ถ้าจะเอาถึงตัวสุดท้าย ก็เว้นการใส่ตัวสุดท้ายไปเลยก็ได้ เช่น

 

```python
colorList[1:]
# เอาตั้งแต่ index1 (เริ่มตัวที่2) จนถึงตัวสุดท้าย
```

 

สรุปแล้ว [1:] แปลว่าเอาตั้งแต่ตัวที่2 ถึง ตัวสุดท้าย

 ![5](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-026.png) 

แล้วก็สามารถใส่ index ติดลบได้เช่นเดิม

 

```python
colorList[1:-1]
# เอาตั้งแต่ index1 (เริ่มตัวที่2) แต่ไม่ถึง index -1 (ไม่ถึงตัวสุดท้าย คือเอาถึงตัวรองสุดท้าย)
```

 

สรุปแล้ว [1:-1] แปลว่าเอาตั้งแต่ตัวที่2 ถึง ตัวรองสุดท้าย

 ![6](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-027.png) 

### การรวม List เข้าด้วยกัน

 

เราสามารถรวม Item ใน List เข้าด้วยกันได้ด้วยเครื่องหมาย + ธรรมดาเลย simple สุดๆ เช่น

 

```python
MyList1=["red","green","blue"]
MyList2=[55,20,200]
combinedList=MyList1+MyList2
```

 ![7](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-049.png) 

แต่ถ้าจะมัดรวมเป็นคู่อันดับ ให้ใช้ zip มาช่วย เช่น

 

```python
MyList1=["red","green","blue"]
MyList2=[55,20,200]
zipObject=zip(MyList1,MyList2)
zipList=list (zipObject)
print(zipList)
```

 ![8](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-051.png) 

## เริ่มทำการวน Loop

 

พอเราเริ่มรู้จัก List ที่เป็น Object ประเภทนึงที่สามารถเก็บข้อมูลหลาย item ในตัวมันเองแล้ว เราลองมาเริ่มดูวิธีวน Loop กันบ้าง

 

โดยโครงสร้างของ for loop ใน Python เป็นแบบนี้

 

```python
for item in Objectที่มีSequence:       # ต้องมี : ด้วย
    คำสั่งใน loop ที่จะให้ทำซ้ำ   #ต้องมี tab เพื่อย่อหน้าเข้ามา 1 ทีด้วย
    คำสั่งใน loop ที่จะให้ทำซ้ำ   #ต้องมี tab เพื่อย่อหน้าเข้ามา 1 ทีด้วย
คำสั่งที่ไม่เกี่ยวกับ loop          #ถ้าไม่มีย่อหน้าคือไม่อยู่ใน loop
```

 

### วน Loop ใน List

 

สมมติถ้าอยากจะวน Loop ใน colorList ที่สร้างไว้ แล้วพยายาม print เอาข้อมูลสีออกมาในแบบตัวพิมพ์ใหญ่

 

โดยผมลองเขียนให้ดู เพื่อทำความเข้าใจแบบละเอียด ดังนี้

 

เราสามารถจะตั้งชื่อตัวแปรที่เอาไว้วน Loop (ตัวที่อยู่หลัง for) ว่าอะไรก็ได้ เช่น i, x, num, char, color, blahblah หรืออะไรก็ได้

 

**ซึ่งในที่นี้เราตั้งว่า color** โดยการวน loop แต่ละรอบ ตัวแปร color นี้ก็จะเปลี่ยนไปเรื่อยๆ โดยรับค่าที่เป็นข้อความ “red” “green” “blue” “yellow” เปลี่ยนไปเรื่อยๆ ทีละตัว

 

การที่เราจะทำให้เป็นตัวพิมพ์ใหญ่ เราสามารถใช้ method ที่ชื่อว่า .upper() มาช่วยได้

 

เพราะมันคือ Method ที่ถูกฝังไว้ใน object ประเภท String หรือข้อความนั่นเอง ซึ่งชื่อสีของเราเป็นข้อความก็ต้องใช้คำสั่งนี้ได้

 

```python
for color in colorList:
    UpColor=color.upper()    #สร้างตัวแปร UpColor มาเก็บตัวพิมพ์ใหญ่
    print(UpColor)        #print UpColor ออกมาใน Console
print("นี่คือนอก loop")
```

 

ผลที่ได้ คือ จะมีการ print ชื่อสีแต่ละอันเป็นตัวพิมพ์ใหญ่ ออกมาใน console ซึ่งใน Excel มันจะถือว่า Console อยู่ในส่วนของ Diagnostics ด้านขวา (ลากออกมาได้นะ)

 

เราจะพบว่า มีการ Print สีจำนวน 4 ครั้ง (เพราะเรามีทั้งหมด 4 สี มันไล่วน Loop Print แต่ละสี สีละ 1 ครั้ง) แต่มีการ Print คำว่า “นี่คือนอก loop” แค่ 1 ครั้ง เพราะเราใส่ไว้โดยไม่มีการย่อหน้า แสดงว่าไม่อยู่ใน loop แล้ว

 ![9](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-031-1024x446.png) 

เอาจริงๆ การวน loop print เราเขียนแค่นี้ก็พอ ไม่ต้องประกาศอะไรเยอะแยะ

 

```python
for color in colorList:
    print(color.upper())
```

 ![10](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-029.png) 

แต่ถ้าเราอยากให้มันออกมาใน Cell เป็น Dynamic Array **เราต้องทำให้ผลลัพธ์เป็น List ก่อน Excel จึงจะเข้าใจ** ถ้าปล่อยเป็น NoneType จะเอาออกมาไม่ได้

 

วิธีการแบบนึงที่ทำได้คือ สร้าง List ว่างเปล่าขึ้นมาก่อน แล้ววน Loop เอา item แต่ละอันใส่ เข้าไปใน List ด้วย .append() แล้วค่อยเรียก List นั้นออกมาอีกที ดังนี้ (แล้วอย่าลืมแก้ Output ให้เป็น Excel Value ด้วย)

 

```python
UpperColorList=[]        #สร้าง UpperColorList ว่างเปล่า
for color in colorList:
    UpperColorList.append(color.upper()) #ใส่ item เพิ่มใน List
UpperColorList         #แสดง UpperColorList ออกมา
```

 ![11](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-032.png) 

### List Comprehension

 

อย่างไรก็ตาม เราสามารถสร้าง List ใหม่ได้ง่ายๆ กว่าที่เขียนข้างบน ด้วยเทคนิคที่เรียกว่า List Comprehension ซึ่งเหมือนการเขียน for loop แบบย่อสุดๆ ที่ให้ผลเป็น List ใหม่ได้เลย โดยไม่ต้องมานั่งเขียน code ยาวๆ เช่น

 

ในรูปแบบของ

 

```python
[itemผลลัพธ์ for item in Objectที่มีSequence]
```

 

เช่น

 

```python
[color.upper() for color in colorList]
```

 ![12](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-033.png) 

เดี๋ยวเราลองไปดูการวน Loop ใน item อื่นที่ไม่ใช่ List โดยตรงบ้าง

 

### วน Loop ใน Range

 

ถ้าเราอยากจะวน Loop กับ ตัวเลข 6 ตัว ที่เริ่มจากเลข 0 เราสามารถใช้ฟังก์ชัน range(6) ได้ ซึ่งมันคือ Object ที่คล้าย List ที่ประกอบไปด้วย item 0,1,2,3,4,5 อยู่ข้างในนั่นเอง

 

ลองให้มันสั่ง print เลข 0-5 ออกมาใน console โดยที่ตั้งตัวแปร i ขึ้นมาแทนแต่ละเลขขณะวน Loop

 

```python
for i in range(6):
    print(i)
```

 ![13](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-011-1024x353.png) 

แต่ถ้าเราอยากให้มันออกมาใน Cell เป็น Dynamic Array ก็ใช้ List Compreshension ก็ได้ ง่ายดี

 

```python
[i for i in range(6)]
```

 

เราจะได้ผลลัพธ์เป็น List ใหม่ทันที ง่ายๆ แบบนี้เลย

 ![14](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-035.png) 

หรือถ้าอยากได้เลขที่ไม่ได้เริ่มจาก 0 ก็สามารถทำแบบนี้ได้ ในรูปแบบของ

 

```python
range(เลขเริ่ม,แต่ไม่ถึงเลขจบ)
```

 

เช่น

 

```python
[i for i in range(3,10)]
```

 

แบบนี้คือ 3 ถึง 9 (เลขจะไม่รวม 10)

 ![15](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-020.png) 

และถ้าอยากจะเพิ่ม step มากกว่า 1

 

```python
range(เลขเริ่ม,แต่ไม่ถึงเลขจบ,step)
```

 

เช่น เพิ่มทีละ 2 ก็ทำแบบนี้ได้ คือใส่ ,2 ต่อไปอีก

 

```python
[i for i in range(3,9,2)]
```

 ![16](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-021.png) 

กลับมาที่ range(6) คือ เลข 0-5 อีกที…

 

ถ้าผลลัพธ์ที่เราต้องการไม่ได้เป็นการสร้าง List ใหม่ ก็อาจจะไม่ต้องใช้ List Comprehension ก็ได้

 

เช่น ลองสร้างเลขบวกสะสมกันไปเรื่อยๆ ตั้งแต่ 0-5

 

```python
x=0
for i in range(6):
    x=x+i
x
```

 ![17](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-001.png) 

หรือเอาจริงๆ จะทำ List Comprehension เพื่อสร้าง List ผลลัพธ์ก่อน (ในทีนี้ผมเก็บไว้ในตัวแปร MyList) แล้วค่อย Sum ค่าใน List ทั้งหมดก็ได้ เช่น

 

```python
MyList=[i for i in range(6)]
x = sum(MyList)
```

 ![18](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-013.png) 

### วน Loop ใน String

 

นอกเหนือจากการวน Loop ใน List และใน Range แล้ว เรายังสามารถวน Loop ใน String หรือข้อความได้ด้วย ซึ่งมันคือ การวนพิจารณาทีละอักขระของข้อความได้เลย ซึ่งทรงพลังมากๆ

 

```python
MyList=[]    #สร้าง List ว่างเปล่า
for char in "thepexcel":
    MyList.append(char)    #ใส่แต่ละอักขระเพิ่มเข้าไปใน List
MyList        #แสดง MyList ออกมา
```

 ![19](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-004.png) 

ซึ่งใช้ List Comprehension ง่ายกว่าเยอะ

 

```python
MyList=[char for char in "thepexcel"]
```

 ![20](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-005.png) 

## การใส่ Condition

 

เราสามารถจะใช้ if เพื่อสร้าง condition บางอย่างได้

 

### กรณีถ้าเงื่อนไขจริงแล้วให้ทำอะไรบางอย่าง (ถ้าไม่ตรงก็ไม่ทำอะไร)

 

```python
if condition:
    #action1 if true
    #action2 if true
```

 

เช่น

 

ผมทำให้ดู 2 เคสเลย ว่ากรณีเงื่อนไขเป็นจริง ก็จะทำตาม action ที่กำหนด แต่ถ้าไม่ตรงตามเงื่อนไขก็จะไม่มีอะไรเกิดขึ้น

 

```python
result1="original1"
score=45
if score>10:
    result1="score1 มากกว่า 10"

result2="original2"
score=5
if score>10:
    result2="score2 มากกว่า 10"
    
[result1,result2]
```

 ![21](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-041.png) 

การเขียน if แบบนี้ ซึ่งถ้าผลลัพธ์มีแค่ 1 action เราสามารถย่อได้ จะได้ไม่ต้องปวดหัวกับการ indent ย่อหน้าเข้าไป

 

```python
if condition: action_if_true
```

 

เช่น อันนี้ผมทำเคสจริงให้ดูอย่างเดียว

 

```python
result1="original1"
score=45
if score>10:result1="score1 มากกว่า 10"
    
result1
```

 ![22](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-042.png) 

### กรณีถ้าเงื่อนไขจริงแล้วให้ทำอะไรบางอย่าง ถ้าไม่จริงให้ทำอีกอย่าง

 

ก็คือนอกจากจะมี if แล้ว คราวนี้ต้องมี else เพื่อทำกรณีที่ไม่จริงด้วย ซึ่งโครงสร้างคือ

 

```python
if condition:
    #action if true
else:
    #action if false
```

 

เช่น

 

```python
result="original"
score=5
if score>10:
    result="score มากกว่า 10"
else:
    result="score ไม่ได้มากกว่า 10"
result
```

 ![23](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-043.png) 

ซึ่งถ้าแต่ละเงื่อนไขมีแค่ 1 action เราสามารถย่อได้เช่นกัน ในรูปแบบนี้ คือไม่มี : ไม่มีย่อหน้าเลยด้วย แต่จะมีการสลับเอา action กรณีจริงขึ้นมาก่อน

 

```python
action_if_true if condition else action_if_false
```

 

แต่ action ในรูปแบบนี้จะใช้การ assign ตัวแปรไม่ได้นะ ดังนั้นผมจะใช้การ print เพื่อพิสูจน์ให้ดูแทน

 

```python
score=5
print("score มากกว่า 10") if score>10 else print("score ไม่ได้มากกว่า 10")
```

 ![24](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-045.png) 

## ลองใช้ condition ใน Loop

 

เราลองมาดูตัวอย่างการใช้ Condition ใน Loop กัน

 

สมมติว่า เราจะวน Loop ใน String เพื่อพิจารณาแต่ละอักขระ ถ้าพบว่าอักขระที่กำลังพิจารณา (char) เป็นตัว e เราจะให้ทำเป็นตัวพิมพ์ใหญ่ โดยใช้ method .upper() ภายใน condition ของ if

 

```python
MyList=[]    #สร้าง List ว่างเปล่า
for char in "thepexcel":
    if char =="e":
        char=char.upper()    #ถ้าเป็นตัว e ให้ทำเป็นพิมพ์ใหญ่
    MyList.append(char)    #ใส่แต่ละอักขระเข้าไปใน List
MyList        #แสดง MyList ออกมา
```

 ![25](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-003.png) 

แต่ถ้าในกรณีนี้เราทำด้วย List Comprehension แบบทื่อๆ เลย การเขียน condition if แบบย่อแค่ action จริง จะไม่ work ในกรณีนี้

 

```python
MyList=[char.upper() for char in "thepexcel" if char=="e" ]
```

 

เพราะว่ามันดันเป็นการสร้าง List ใหม่ โดย **“คัดเลือกเฉพาะที่ตรงกับเงื่อนไข”** ที่กำหนดคือเป็นตัว e เท่านั้น (กลายเป็นได้ E 3 ตัวเฉยเลย นั่นคือ กรณี False จะไม่มีการเอามาใส่ใน List)

 ![26](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-016.png) 

ถ้าอยากให้มีทุกตัวเท่าเดิม** เราควรกำหนดทั้งกรณีทั้ง True และ False **แต่โครงสร้างของ List Comprehension จะเปลี่ยนไปนิดหน่อย กลายเป็น if else ซึ่งจะมีการสลับตำแหน่ง

 

```python
MyList=[char.upper() if char=="e" else char for char in "thepexcel" ]
```

 

แบบนี้ถึงจะ work ได้ตามต้องการครับ

 ![27](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-015.png) 

## ลองการประยุกต์

 

### วน Loop เพื่อแก้ชื่อคอลัมน์ของ DataFrame

 

สมมติผมมี DataFrame อยู่ แล้วอยากจะได้ชื่อคอลัมน์ออกมาเป็น List ผมสามารถทำได้แบบนี้

 

```python
df = xl("IrisDataSet[#All]", headers=True)
dfColList=list(df.columns)
```

 ![28](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-017-1024x392.png) 

ทีนี้ผมอยากจะวน Loop เพื่อทำการแก้ชื่อคอลัมน์เฉพาะที่มีเครื่องหมาย _ ให้เป็นพิมพ์ใหญ่

 

ผมทำได้ดังนี้

 

```python
NewdfColList=[ col.upper() if "_" in col else col for col in dfColList ]
```

 ![29](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-018-1024x457.png) 

แล้วเราก็เอาชื่อคอลัมน์ใหม่ assign เข้าไปใน df เดิมก็ได้ ดังนี้

 

```python
df.columns = NewdfColList
df
```

 ![30](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-019-1024x422.png) 

จริงๆ ก็คือเขียนรวมกันหมดเลยใน code ของ cell เดียวก็ได้นะ เช่น

 

```python
df=xl("IrisDataSet[#All]", headers=True)
dfColList=list(df.columns)
NewdfColList=[ col.upper() if "_" in col else col for col in dfColList ]
df.columns = NewdfColList
df
```

 ![31](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-046-1024x556.png) 

### คัดเลือกให้แสดง DataFrame แค่บางคอลัมน์

 

ทีนี้ในเมื่อเราจัดการ List เป็นแล้ว อาจใช้มันในการเลือก List ที่ต้องการก็ได้ เช่น ผมต้องการ Columnที่ 1,4,5 เสมอ ผมอาจใช้แบบนี้

 

```python
SelectCol=[NewdfColList[i-1] for i in [1,4,5]]
```

 ![32](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-047.png) 

แล้วผมค่อยเอา List รายชื่อคอลัมน์นี้ใส่เข้าไปใน DataFrame เพื่อเป็นการคัดเลือกเอาคอลัมน์ที่ต้องการได้เลย เช่น

 

```python
df[SelectCol]
```

 ![33](https://www.thepexcel.com/wp-content/uploads/2023/09/Ep2-048.png) 

## ตอนต่อไป

 

สำหรับตัวอย่างนี้ก็ค่อนข้างยาวแล้ว ผมขอจบเพียงเท่านี้ [ในตอนต่อไปเราจะพูดถึงเรื่อง Regular Expression](https://www.thepexcel.com/python-in-excel-ep03-regex/) กันครับ ซึ่งคือเรื่องที่ Python ชนะ Excel แบบขาดลอยของจริงครับ หึหึ

---

_Source: [https://www.thepexcel.com/python-in-excel-ep02/](https://www.thepexcel.com/python-in-excel-ep02/)_
