มีวิธีใดบ้างครับให้เราคิดดอกเบี้ยรายวันได้
กระทู้เก่าบอร์ด อ.Yeadram

 1,101   6
URL.หัวข้อ / URL
มีวิธีใดบ้างครับให้เราคิดดอกเบี้ยรายวันได้

เรียนอาจารย์ทุกท่าน พอดีผมมีปัญหาอยากทราบว่า เรามีวิธีไหนบ้างครับให้เราหาดอกเบี้ยรายวันได้ จากสูตรที่ผมทำ

((([เงินต้น]*.09)*30)/365) หมายถึง เงินต้นคูณดอกเบี้ย คูณวันของเดือนนั้น ๆ หารด้วยจำนวนปี ของปีนั้นๆ

ปัญหามันคือ เมื่อเปลี่ยนเดือน หรือปี ซึ่งแต่ละเดือนและปีนั้น จะไม่เท่ากัน มีวิธีไหนบ้างครับที่ให้มันเปลี่ยนจำนวนวันของแต่ละเดือน และจำนวนปีของแต่ละปีแบบอัตโนมัติบ้างครับ
อีกอย่างหนึ่งครับ ถ้าสมุติมันหาดอกเบี้ย มาเป็นเศษทศนิยม ให้ปัดเศษขึ้นเป็นจำนวนเต็ม โดยไม่ให้ปัดเศษลง เช่น คำนวนได้ 9.10 ให้ปัดเป็น 10.00 เลย
ขอบคุณครับ

6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R20547
ดอกเบี้ยอะไรครับโหดมากๆครับ

1. ถ้าคุณต้องการหาจำนวนวันของเดือนเป้าหมายใช้ฟังก์ชั่น DateSerial()

Day(DateSerial(Year(วันที่เป้าหมาย), Month(วันที่เป้าหมาย) + 1, 0))

2. ถ้าคุณต้องการหาจำนวนวันของปีเป้าหมาย ว่าเป็นปีอธิกสุรทิน Leap Year คือมี 366 วันหรือไม่ ก็สามารถใช้ฟังก์ชั่น DateSerial() เช่นกัน

Month(DateSerial(Year(วันที่เป้าหมาย), 2, 29)) = 2

โดยก็จะประมาณว่าตรวจสอบดูว่าเดือนสองของปีนั้นมีวันที่ 29 หรือไม่ ถ้ามีก็เป็นปีอธิกสุรทิน ซึ่งจริงๆแล้วปีอธิกสุรทิน มาจากเงื่อนไขคือ

1. ปีคริสตศักราชใด หารด้วย 4 แล้วลงตัวคือไม่มีเศษ และ หารด้วย 100 แล้วไม่ลงตัวคือมีเศษ ถือเป็นปีอธิกสุรทิน
2. ปีคริสตศักราชที่หารด้วย 400 แล้วลงตัวคือไม่มีเศษ ถือเป็นปีอธิกสุรทิน

เราจึงสามารถเขียนสูตรเงื่อนไขได้ดังนี้
(ปี ค.ศ. Mod 4 = 0 And ปี ค.ศ. Mod 100 > 0) Or (ปี ค.ศ. Mod 400 = 0)
จะใช้แบบนี้หรือ
Month(DateSerial(Year(วันที่เป้าหมาย), 2, 29)) = 2
ก็ได้ครับ
ในตัวอย่างนี้เราใช้แบบ Month(DateSerial(Year(วันที่เป้าหมาย), 2, 29)) = 2

เขียนโค๊ดได้ประมาณนี้ครับ
สมมุติ ณ วันที่ปัจจุบัน เงินต้น 100 บาท

    Dim iDate As Date
    Dim iMonth As Integer
    Dim LeapYear As Integer

    iDate = Date ' วันที่ปัจจุบัน
    iMonth = Day(DateSerial(Year(iDate), Month(iDate) + 1, 0)) ' จำนวนวันในเดือนเป้าหมาย
    LeapYear = IIf(Month(DateSerial(Year(iDate), 2, 29)) = 2, 366, 365) ' จำนวนวันในปีเป้าหมาย
    MsgBox -Int(-((100 * 0.09) * iMonth) / LeapYear) ' เงินต้น 100 บาท

1
แสดงว่าถ้าเงินต้น 100 บาท ดอกเบี้ยคิดเป็น 1 บาทต่อวัน (โหดมากๆครับ)

ปล. หวังเป็นอย่างยิ่งว่าโจทย์นี้คุณคงตั้งมาเล่นๆ ไม่ได้ไปปล่อยเงินกู้ใครนะครับ สงสารคนกู้


2 @R20548
หาจำนวนวันของเดือนนั้นๆ

Function DaysInMonth(MyDate)

   ' This function takes a date as an argument and returns
   ' the total number of days in the month.
   Dim NextMonth, EndOfMonth

   NextMonth = DateAdd("m", 1, MyDate)
   EndOfMonth = NextMonth - DatePart("d", NextMonth)
   DaysInMonth = DatePart("d", EndOfMonth)
msgbox DaysInMonth
End Function
       
Credit : https://support.microsoft.com/en-us/kb/210448

หาจำนวนวันในปีนั้นๆ

Private Sub btnFindDayInYear_Click()
Dim dtMyDate As Date
dtMyDate = InputBox("Put your're date", "Cal day of year")

MsgBox DateDiff("d", "01/01/" & Year(dtMyDate), "31/12/" & Year(dtMyDate)) + 1

End Sub

Credit : http://www.w3schools.com/sql/func_datediff.asp
3 @R20549
ของอาจารย์ TTT ง่ายกว่าเยอะครับ
4 @R20550


ขอรบกวนอาจารย์ TTT อีกครั้งน่ะครับ ถ้าผมต้องการนำสูตรเข้าไปใส่ในแบบ สอบถาม และในฟอร์ม จะนำไปใส่อย่างไงได้บ้างครับ

ปล.ดอกไม่ได้โหดครับ
ถ้าเงินต้น 100 บาท ดอกเบี้ยคิดเป็น 1 บาทต่อเดือนครับ (แก้ข่าว)
ขอบคุณครับ
5 @R20551
D1: -Int(-(([M_Emer] * 0.09) * (Day(DateSerial(Year([ฟิลด์วันที่]), Month([ฟิลด์วันที่]) + 1, 0)))) / (IIf(Month(DateSerial(Year([ฟิลด์วันที่]), 2, 29)) = 2, 366, 365)))

ประมาณนี้ครับ
6 @R20553
ขอบคุณ อาจารย์ TTT มากครับ ทำได้แล้วครับ
และอาจารย์ TIDE ที่ให้ความรู้

ขอบคุณอาจารย์ทั้งสองอีกครั้งน่ะครับ ที่ให้ความรู้ใหม่ ๆ เพิ่มเติมสำหรับผม และคนอื่น ๆ ที่ยังไม่ทราบ

ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2242s