---
title: EOMONTH – หาวันสิ้นเดือนจากวันที่เริ่มต้นและจำนวนเดือนที่เลื่อน
url: https://www.thepexcel.com/functions/dax/date-and-time/eomonth-dax/
type: function-explainer
program: DAX
syntax: "EOMONTH(<StartDate>, <Months>)"
date: 2025-12-13
updated: 2025-12-23
scores:
  popularity: 7
  difficulty: 3
  usefulness: 7
---

# EOMONTH – หาวันสิ้นเดือนจากวันที่เริ่มต้นและจำนวนเดือนที่เลื่อน

> EOMONTH คืนค่าวันสิ้นเดือนของเดือนที่เลื่อนจาก StartDate ตามจำนวน Months (บวก/ลบได้) เหมาะกับการหาวั

## คำอธิบาย

EOMONTH คืนค่าวันสิ้นเดือนของเดือนที่เลื่อนจาก StartDate ตามจำนวน Months (บวก/ลบได้) เหมาะกับการหาวันปิดงวด วันครบกำหนด และการจัดการช่วงเวลาแบบรายเดือน

## Syntax

```excel
EOMONTH(&lt;StartDate&gt;, &lt;Months&gt;)
```

**Variant**

```excel
EOMONTH(&lt;StartDate&gt;, &lt;Months&gt;)
```

คืนวันสิ้นเดือนของเดือนที่เลื่อนจาก StartDate ตาม Months

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| StartDate | Yes | date/datetime |  | วันที่อ้างอิงเริ่มต้น |
| Months | Yes | number |  | จำนวนเดือนที่ต้องการเลื่อน (บวก=ไปข้างหน้า, ลบ=ย้อนหลัง) |

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

### หาวันสิ้นเดือนของเดือนปัจจุบัน

ใช้ EOMONTH(StartDate, 0) เพื่อได้วันสิ้นเดือนของ StartDate

_เหมาะกับ:_ end-of-current-month

### หาวันสิ้นเดือนล่วงหน้า/ย้อนหลัง

เช่น สิ้นเดือนหน้า (Months=1) หรือสิ้นเดือนก่อน (Months=-1)

_เหมาะกับ:_ shift-month-end

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: วันสิ้นเดือนของวันที่ในคอลัมน์

```excel
Month End Date =
EOMONTH(Sales[OrderDate], 0)
```

**ผลลัพธ์:** `ได้วันสิ้นเดือนของ OrderDate ในแต่ละแถว`

ใช้สำหรับสร้างคอลัมน์ช่วยเพื่อจัดกลุ่มข้อมูลรายเดือน เช่นสิ้นสุด 31 ม.ค. สิ้นสุด 28 ก.พ. เป็นต้น

### 2. ตัวอย่างที่ 2: วันสิ้นเดือนของเดือนถัดไป

```excel
Next Month End =
EOMONTH(TODAY(), 1)
```

**ผลลัพธ์:** `ได้วันสิ้นเดือนของเดือนถัดไปจากวันนี้`

ใช้ TODAY() เป็นจุดอ้างอิง แล้วเลื่อนไป 1 เดือน เหมาะสำหรับการคำนวณวันครบกำหนดของเดือนหน้า

### 3. ตัวอย่างที่ 3: วันสิ้นเดือนย้อนหลัง 3 เดือน

```excel
Three Months Ago End =
EOMONTH(TODAY(), -3)
```

**ผลลัพธ์:** `ได้วันสิ้นเดือนย้อนหลัง 3 เดือนจากเดือนปัจจุบัน`

ใช้ค่า Months ติดลบเพื่อย้อนกลับตามจำนวนเดือนที่ต้องการ เช่นการดึงข้อมูลรายไตรมาส

### 4. ตัวอย่างที่ 4: เปรียบเทียบยอดขายกับเดือนก่อนหน้า

```excel
PrevMonth Sales Comparison =
VAR CurrentMonthEnd = EOMONTH(MAX(Sales[OrderDate]), 0)
VAR PrevMonthEnd = EOMONTH(MAX(Sales[OrderDate]), -1)
RETURN
  CALCULATE(
    SUM(Sales[Amount]),
    Sales[OrderDate] <= PrevMonthEnd
  )
```

**ผลลัพธ์:** `ยอดขายรวมสำหรับเดือนก่อนหน้า`

หา EOMONTH ของเดือนปัจจุบัน จากนั้นเลื่อนไป -1 เดือน ใช้ CALCULATE ระบุระยะเวลา

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

- EOMONTH ไม่ขึ้นกับ Filter Context เพื่อให้ผลลัพธ์นั้น ต่างจาก CALCULATE ที่ปรับเปลี่ยน Filter Context ได้

- ใช้ EOMONTH ร่วมกับ MAX() เมื่อต้องการหา End of Current Month เช่น EOMONTH(MAX(Sales[OrderDate]), 0)

- สำหรับการหาวันต้นเดือน ให้ใช้ EOMONTH(date, -1) + 1 เนื่องจากไม่มีฟังก์ชัน SOMONTH (Start of Month)

- ใช้ EOMONTH ในการสร้าง Calculated Column เพื่อจัดกลุ่มข้อมูลรายเดือน จะช่วยให้ Slicing and Dicing บน Dashboard ทำได้ง่าย

- ระวัง Leap Year: EOMONTH จะคืนค่า 29 Feb ในปีอธิกสุร เช่น 2024 แต่เฉพาะ 28 Feb ในปีธรรมดา เช่น 2025

- ใช้ IFERROR เมื่อนำ EOMONTH มาใช้ร่วมกับฟังก์ชันอื่น เพื่อหลีกเลี่ยงข้อผิดพลาดจากวันที่ที่ไม่ถูกต้อง

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

**Q: EOMONTH คืนค่าเป็นชนิดอะไร?**

คืนค่าเป็นวันที่/เวลา (datetime) ซึ่งเป็นวันสุดท้ายของเดือนที่คำนวณได้ เช่น 31 มกราคม 2024, 29 กุมภาพันธ์ 2024 เป็นต้น

**Q: EOMONTH ต่างจาก EDATE อย่างไร?**

EOMONTH คืนวันสิ้นเดือนของเดือนที่เลื่อนเสมอ ส่วน EDATE เลื่อนวันที่ไปตามจำนวนเดือนโดยพยายามรักษาวันเดิมไว้ เช่น EDATE(31 Jan, 1) = 28 Feb แต่ EOMONTH(31 Jan, 1) = 29 Feb

**Q: วิธีหาวันต้นเดือน (First day of month) ยังไง?**

ใช้ EOMONTH(date, -1) + 1 เพื่อหาวันต้นเดือนของเดือนปัจจุบัน เช่น EOMONTH(15 Jan, -1) + 1 = 1 Jan

**Q: EOMONTH ใช้ได้ใน Calculated Column หรือ Measure เท่านั้น?**

ทั้งสองอย่างได้ แต่พฤติกรรมต่างกัน: ใน Calculated Column มันทำงานตามแต่ละแถว ใน Measure ต้องจัดการ Filter Context อย่างระมัดระวัง

**Q: เกิดข้อผิดพลาด 'Invalid start_date' ยังไง?**

โดยปกติเกิดจากค่า StartDate ไม่ใช่ datetime format หรือเป็น NULL ให้ใช้ IFERROR หรือ IF เพื่อตรวจสอบ เช่น IFERROR(EOMONTH(Sales[OrderDate], 1), "Invalid date")

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

- [Microsoft Learn: EOMONTH function (DAX)](https://learn.microsoft.com/en-us/dax/eomonth-function-dax) _(official)_
- [DAX Guide: EOMONTH](https://dax.guide/eomonth/) _(guide)_
- [SQLBI: EDATE, EOMONTH](https://www.sqlbi.com/tv/edate-eomonth-dax-guide/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/date-and-time/eomonth-dax/](https://www.thepexcel.com/functions/dax/date-and-time/eomonth-dax/)_
