---
title: SUBSTITUTE – แทนที่ข้อความที่ตรงกัน
url: https://www.thepexcel.com/functions/dax/text/substitute-dax/
type: function-explainer
program: DAX
syntax: "SUBSTITUTE(<text>, <old_text>, <new_text>, [<instance_num>])"
date: 2025-12-14
updated: 2025-12-25
scores:
  popularity: 6
  difficulty: 3
  usefulness: 6
---

# SUBSTITUTE – แทนที่ข้อความที่ตรงกัน

> SUBSTITUTE ค้นหาและแทนที่ข้อความในสตริง สามารถแทนที่ทุกครั้งหรือเพียงครั้งที่ n เหมาะกับการปรับรูปแบ

## คำอธิบาย

SUBSTITUTE ค้นหาและแทนที่ข้อความในสตริง สามารถแทนที่ทุกครั้งหรือเพียงครั้งที่ n เหมาะกับการปรับรูปแบบและทำความสะอาดข้อมูลโดยตรวจสอบเนื้อหา ไม่ใช่ตำแหน่ง

## Syntax

```excel
SUBSTITUTE(&lt;text&gt;, &lt;old_text&gt;, &lt;new_text&gt;, [&lt;instance_num&gt;])
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| text | Yes | text |  | ข้อความต้นทางที่ต้องการแทนที่ สามารถเป็นสตริง หรือลิงก์ไปยังคอลัมน์ข้อความ |
| old_text | Yes | text |  | ข้อความเดิมที่ต้องการค้นหาและแทนที่ ต้องตรงกับตัวพิมพ์ (case-sensitive) ถ้าไม่ตรง SUBSTITUTE จะไม่ทำงาน |
| new_text | Yes | text |  | ข้อความใหม่ที่ใช้แทนที่ old_text สามารถเป็นสตริงว่าง ("") เพื่อลบข้อความได้ |
| instance_num | No | integer |  | ครั้งที่ต้องการแทนที่ (เช่น 1 = ครั้งแรก, 2 = ครั้งที่สอง) ถ้าไม่ระบุหรือเป็นค่าลบ จะแทนที่ทุกครั้งที่พบ |

## เคสการใช้งาน

### เปลี่ยนคีย์เวิร์ดหรือแท็กที่ซ้ำ

แทนที่คำเก่าเป็นคำใหม่ในข้อความอธิบายสินค้าหรือบันทึก เพื่อให้ใช้คำมาตรฐาน

_เหมาะกับ:_ keyword-normalization

### จัดรูปแบบข้อความที่ซ้ำหลายครั้ง

แทนที่คำหรือสัญลักษณ์เฉพาะครั้งที่ n เพื่อควบคุมเฉพาะบางตำแหน่ง เช่น เปลี่ยนตัวแบ่งครั้งที่สองเท่านั้น

_เหมาะกับ:_ targeted-replace

### ทำความสะอาดข้อมูลนำเข้า

ลบหรือแทนที่เครื่องหมายพิเศษจากข้อความนำเข้าก่อนนำไปคำนวณหรือแสดงผล

_เหมาะกับ:_ data-cleaning

## ตัวอย่าง

### 1. แทนที่ทุกครั้งที่พบ

```excel
VAR Product = "Samsung Galaxy S24 Samsung Galaxy Watch"
RETURN SUBSTITUTE(Product, "Samsung", "Apple")
```

**ผลลัพธ์:** `"Apple Galaxy S24 Apple Galaxy Watch"`

แทนที่คำว่า Samsung ทั้งหมดที่พบในสตริง (2 ครั้ง) ด้วย Apple เหมาะใช้เมื่อต้องเปลี่ยนแบรนด์หรือชื่อผลิตภัณฑ์ทั่ว ๆ ไป

### 2. แทนที่เฉพาะครั้งที่ระบุ

```excel
VAR Code = "INV-2024-001-Draft"
RETURN SUBSTITUTE(Code, "-", "_", 2)
```

**ผลลัพธ์:** `"INV_2024-001-Draft"`

แทนที่เครื่องหมายลบ (-) เฉพาะครั้งที่ 2 เท่านั้น ส่วนครั้งอื่นยังคงเป็นเครื่องหมายลบ ใช้เมื่อต้องจัดการตำแหน่งเฉพาะในรูปแบบโค้ดหรือข้อมูลที่มีลักษณะแบ่งส่วน

### 3. ลบเครื่องหมายพิเศษจากข้อมูล

```excel
VAR Phone = "(089)-123-4567"
RETURN SUBSTITUTE(SUBSTITUTE(Phone, "(", ""), ")", "")
```

**ผลลัพธ์:** `"089-123-4567"`

ลบวงเล็บทั้งหมดจากเบอร์โทรศัพท์โดยการซ้อน SUBSTITUTE เพื่อลบหลายอักขระ ใช้เมื่อต้องทำความสะอาดหรือเตรียมข้อมูลสำหรับการค้นหา

### 4. แทนที่สนตัวพิมพ์

```excel
VAR Text = "Power BI power bi POWER BI"
RETURN SUBSTITUTE(Text, "Power BI", "Tableau")
```

**ผลลัพธ์:** `"Tableau power bi POWER BI"`

แทนที่เฉพาะ "Power BI" (ตัวพิมพ์ตามตัวอักษร) ไม่แทนที่ "power bi" หรือ "POWER BI" เพราะตัวพิมพ์ไม่ตรง ถ้าต้องแทนที่ไม่สนตัวพิมพ์ ให้ใช้ UPPER ทั้งสองข้างก่อนเปรียบเทียบ

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้ใช้ SUBSTITUTE กับ TRIM ร่วมกัน เพื่อลบช่องว่างส่วนเกิน และแทนที่เครื่องหมายพิเศษในขั้นตอนการทำความสะอาดข้อมูล เช่น TRIM(SUBSTITUTE(text, "_", " "))

- ส่วนตัวผมมักซ้อน SUBSTITUTE หลาย ๆ ครั้งเพื่อลบหรือแทนที่หลายอักขระพร้อมกัน เช่น ลบ (, ), - ทั้งหมด: SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(text, "(", ""), ")", ""), "-", "")

- ระวังความเคสเมื่อทำงานกับข้อมูลจากหลายแหล่ง บ้างเขียน "Power BI" บ้างเขียน "power bi" ถ้าต้องรับได้ทั้งหมด ใช้ UPPER ปกคลุมทั้งนิพจน์ก่อน: SUBSTITUTE(UPPER(text), "POWER BI", "Tableau")

- ถ้าต้องทำ Find & Replace แบบความเคส-ไม่สนใจ ใช้โครงสร้าง SUBSTITUTE(UPPER(text), UPPER(old_text), new_text) พร้อม PROPER เพื่อปรับรูปแบบตัวอักษรกลับเป็นใช้ได้

## คำถามที่พบบ่อย

**Q: SUBSTITUTE กับ REPLACE ต่างกันอย่างไร?**

SUBSTITUTE แทนที่ตามเนื้อหาข้อความ ต้องค้นหา old_text ก่อน ส่วน REPLACE แทนที่ตามตำแหน่ง (ตัวอักษรลำดับที่เท่านั้น) ถ้าคุณรู้เนื้อหา ใช้ SUBSTITUTE; ถ้าคุณรู้ตำแหน่ง ใช้ REPLACE ผมแนะนำให้เลือกตามว่า ข้อมูลของคุณมี "ตำแหน่งคงที่" หรือ "เนื้อหาต่างกัน" ก่อน

**Q: SUBSTITUTE สนตัวพิมพ์หรือไม่?**

ใช่ SUBSTITUTE สนตัวพิมพ์อย่างเคร่งครัด (case-sensitive) ถ้า old_text = "Power" มันจะไม่แทนที่ "power" หรือ "POWER" ต้องตรงเนื้อหาและตัวพิมพ์ทุกตัว วิธีแก้ไข: ใช้ UPPER หรือ LOWER ทั้งสองข้างก่อน เช่น `SUBSTITUTE(UPPER(text), UPPER(old_text), new_text)` จากนั้นใช้ PROPER ปรับปรุงรูปแบบหลัง

**Q: instance_num = 0 หรือค่าลบจะเกิดอะไร?**

ถ้าใส่ instance_num = 0 หรือค่าลบ SUBSTITUTE จะแทนที่ทุกครั้ง (เหมือนไม่ระบุ) ใช้เวลาเป็น workaround ถ้าต้องการแทนที่ทั้งหมด แนะนำให้ไม่ระบุ instance_num สะอาดกว่า

**Q: ถ้า old_text ไม่พบในสตริงจะเกิดอะไร?**

SUBSTITUTE จะส่งคืนสตริงต้นทาง (text) โดยไม่มีการเปลี่ยนแปลง ไม่มี error ที่ส่งคืนมา ดังนั้นคุณไม่ต้องกังวลว่าหาไม่เจอจะพังระบบ มันยอดเยี่ยมสำหรับการจัดการข้อมูลที่ไม่แน่นอน

## ฟังก์ชันที่เกี่ยวข้อง

- [REPLACE – แทนที่ข้อความบางส่วน (DAX)](https://www.thepexcel.com/functions/dax/text/replace-dax/)
- [SEARCH – ค้นหาตำแหน่งข้อความ (ไม่สนตัวพิมพ์) ใน DAX](https://www.thepexcel.com/functions/dax/text/search-dax/)
- [FIND – หาตำแหน่งข้อความ (แบบแยกตัวพิมพ์ใหญ่/เล็ก)](https://www.thepexcel.com/functions/dax/text/find-dax/)
- replacevalue-dax
- textafter-dax
- textbefore-dax
- [REPT – ทำซ้ำสตริงตามจำนวนที่กำหนด (DAX)](https://www.thepexcel.com/functions/dax/text/rept-dax/)
- [LEN (DAX) – นับจำนวนอักขระในข้อความ](https://www.thepexcel.com/functions/dax/text/len-dax/)

## แหล่งข้อมูลเพิ่มเติม

- [DAX Guide: SUBSTITUTE](https://dax.guide/substitute/) _(guide)_
- [Microsoft Learn: SUBSTITUTE Function](https://learn.microsoft.com/en-us/dax/substitute-function-dax) _(official)_

---

_Source: [https://www.thepexcel.com/functions/dax/text/substitute-dax/](https://www.thepexcel.com/functions/dax/text/substitute-dax/)_
