:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

สูตรคำนวณ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: สูตรคำนวณ

#21

Post by ChoBkuN »

รู้สึกว่า Excel จะมอง b20 เป็นค่าอย่างอื่นที่ไม่ใช่ 0

ยังเป็นปัญหาเหมือนกับ row(indirect("1:"&len()) ในสูตรดึงตัวเลข
อาจารย์เคยบอกไว้ว่า เป็นการมองการเปลี่ยนแปลงครั้งสุดท้าย
แต่ลองดู row = บอกตำแหน่งrow ของ cell นั้นๆ
indirect = อ้างอิง cell ที่อ้างอิง cell นั้นๆ
รวมกันแล้วกลายเป็นจำนวนตัวอักษรได้อย่างไร ????
User avatar
snasui
Site Admin
Site Admin
Posts: 30760
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรคำนวณ

#22

Post by snasui »

:D ช่วยยกตัวอย่างสูตรทั้งหมดมาด้วยครับ จะได้ช่วยดูได้ สำหรับสูตร Row(Indirect("1:"&Len())) ไม่น่าจะมีประเด็นครับ
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: สูตรคำนวณ

#23

Post by ChoBkuN »

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

ยกตัวอย่างว่า "ค่าเช่าลอกเกอร์ 30 บาท" อยู่ใน cell A1

=lookup(9.99999999999999e+307,--mid(a1,min(search({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),row(indirect("1:"&len(a1)))))

ผมคิดว่าเข้าใจทุกอย่างแล้ว ยกเว้น row(indirect())

mid(a1,ค่า min ที่ได้จากการ search, จำนวนตัวอักษร ซึ่งมาจากสูตร Row(Indirect())
สูตร row indirect รู้ได้ไงว่ามีตัวเลข กี่ตัวอักษร
User avatar
snasui
Site Admin
Site Admin
Posts: 30760
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรคำนวณ

#24

Post by snasui »

:tt: สูตรนี้เป็นสูตรที่ซับซ้อนและเป็นสูตร Array มองแต่ row(indirect("1:"&len(a1))) ไม่ได้ครับ

เนื่องจากมันอยู่ในฟังก์ชั่น Mid จึงต้องมอง

mid(a1,min(search({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),row(indirect("1:"&len(a1))))

ซึ่ง row(indirect("1:"&len(a1))) จะให้ตัวเลขลำดับออกมาครับ ลำดับสุดท้ายเป็นเท่าไรก็แล้วแต่ว่านับ Len(A1) เป็นเท่าไร ถ้า Len(A1) แล้วได้ 5 ผลลัพธ์ของสูตรนี้ก็จะเป็น

{1,2,3,4,5} เช่นนี้เป็นต้น

ส่วน min(search({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")) เป็นการหาค่าน้อยที่สุดที่เจอค่าตัวเลขใด ๆ จาก 0-9 ใน A1&"0123456789" ผมสมมุติว่าเจอลำดับที่ 5

เมื่อนำเข้ามาประกอบกันสูตรก็จะกลายเป็น

=Mid(A1,5,{1,2,3,4,5})

หมายความว่าให้ตัด A1 ดังนี้ เริ่มจากอักขระที่ 5 มา 1 ตัว, เริ่มจากอักขระที่ 5 มา 2 ตัว ,..., เริ่มจากอักขระที่ 5 มา 5 ตัว และเมื่อตัดมาแล้วก็ใช้ -- เข้าไปแปลงค่าที่ตัดมาได้ให้เป็นตัวเลข

จากนั้นใช้ Lookup(9.99999999999999e307 เข้าไปหาว่าตัวเลขสุดท้ายคืออะไรให้เอามาแสดงผล
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: สูตรคำนวณ

#25

Post by ChoBkuN »

สมมติผมพิมพ์ 0123456789
มีคีย์ลัดให้กลายเป็น {0,1,2,3,4,5,6,7,8,9} หรือเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30760
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรคำนวณ

#26

Post by snasui »

:D ไม่มีครับ
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: สูตรคำนวณ

#27

Post by ChoBkuN »

ขอบคุณครับ ผมพอจะเข้าใจแล้วครับ
lookup นี้หลักการเดียวกับที่เขียนใน snasui.blog ~~
มองค่าสุดท้ายใน column หรือใน row
=lookup(9.999999999999e307,1:1)
ก็คือจะมองค่าสุดท้ายที่เป็นตัวเลขเท่านั้นนั่นเอง อย่างนี้นี่เอง!!

แล้วสูตรมองค่าสุดท้ายทั้ง ตัวเลขและตัวอักษร
=Lookup(2,1/(A1:A65535<>""),A1:A65535) >> หาในคอลัมน์ A
ทำไม lookup อันนี้ ถึงให้มองค่า 2
lookup vector อ้างอิง 1/(A1:A65535<>"") >> มันไม่ใช่ช่วง array นี่ครับ มี เครื่องหมายหาร กับ logic <>"" ด้วย
result a1:a65535 >> ให้แสดงผลใน column a นั้น

คำถามก็คือ 2 คืออะไร
1/a1:65535<>"" คืออะไร ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30760
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรคำนวณ

#28

Post by snasui »

:D
ChoBkuN wrote:lookup vector อ้างอิง 1/(A1:A65535<>"") >> มันไม่ใช่ช่วง array นี่ครับ
มันคือช่วง Array ครับ

ประการแรกการคำนวณจะดูก่อนว่า (A1:A65535<>"") ได้ค่าอะไรบ้าง ซึ่งเป็นการเทียบช่วงข้อมูลกับค่าเดี่ยว ๆ นั่นคือ

A1<>""
A2<>""
...
A65535<>""

ผลลัพธ์ที่ได้มี 2 ค่าคือ True และ False ซึ่งมองภาพรวมสูตรจะออกมาเป็น

1/({True,False,True,False...) เช่นนั้นเป็นต้น

เมื่อนำ 1 ไปตั้งหารด้วย True ก็จะได้ค่า 1 และเมื่อหารด้วย False ก็จะได้ค่า #Div/0! สูตรก็จะได้ออกมาเป็น

{1,#Div/0!,1,#Div/0!...) เช่นนี้เป็นต้น

และเมื่อมองภาพใหญ่ก็จะได้เป็น

=Lookup(2,{1,#Div/0!,1,#Div/0!...),A1:A65535)

ความหมายคือให้หาค่าที่น้อยกว่าหรือเท่ากับ 2 จาก {1,#Div/0!,1,#Div/0!...) แล้วนำค่าที่ตรงกันใน A1:A65535 มาแสดง

และจากสูตรด้านบนเราจะไม่พบว่ามีค่า 2 อยู่ในนั้นอย่างเด็ดขาดเพราะมันจะมีแต่ 1 เท่านั้นที่เป็นตัวเลข ผลลัพธ์คือค่าใน A1:A65535 ที่ตรงกับเลข 1 ตัวสุดท้ายใน {1,#Div/0!,1,#Div/0!...) ครับ

ซึ่งผมได้เขียนอธิบายไว้แล้วที่ http://snasui.blogspot.com/2009/12/blog-post_4428.html
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: สูตรคำนวณ

#29

Post by ChoBkuN »

ถ้างั้นเราเปลี่ยน 2 เป็น 1 ก็ได้หรือเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30760
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรคำนวณ

#30

Post by snasui »

:D เปลี่ยนได้ครับ แต่การค้นหาด้วย 2 ดูเหมือนเป็นตัวเร่งให้คำนวณได้เร็วกว่า
User avatar
snasui
Site Admin
Site Admin
Posts: 30760
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรคำนวณ

#31

Post by snasui »

snasui wrote:
ChoBkuN wrote:ที่ว่าจำนวนอนันต์ที่ผมบอกให้ใส่ครับ
อาจารย์บอกไม่ต้องใส่ก็ได้คำตอบเหมือนกัน
ทำไมถึงเป็นเช่นนั้น ?
ChoBkuN wrote:ก็คือ min เลือก ค่า ต่ำสุด 0 กับ 500000 ก็น่าจะเลือก 0 สิครับ
:lol: เพื่อไม่ให้งงให้กรอกจำนวนที่บอกไปครับ กรณีผลลัพธ์ที่สูตรแปลผลออกมาเช่นนั้นขอทดสอบเพิ่มเติมก่อนว่าเป็นเพราะเหตุใดครับ :mrgreen:
ChoBkuN wrote:รู้สึกว่า Excel จะมอง b20 เป็นค่าอย่างอื่นที่ไม่ใช่ 0
...
:lol: คำตอบคือ Min จะละเลยค่าว่างเปล่าครับ เมื่อ B20 เป็นค่าว่างเปล่าก็เลยไม่ถูกนำมาคำนวณครับ
User avatar
ChoBkuN
Member
Member
Posts: 239
Joined: Tue Nov 29, 2011 3:43 pm

Re: สูตรคำนวณ

#32

Post by ChoBkuN »

อ๋อ
เยี่ยงนี้เอง
Post Reply