snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
lotto009
Member
Posts: 157 Joined: Sat Sep 22, 2012 11:53 am
#1
Post
by lotto009 » Tue Jan 22, 2013 2:44 pm
เรียนอาจาร์ยและทุกท่านครับ
ผมต้องการแก้ไขสูตรsumifเพื่อให้ประมวลผลเร็วขึ้น ดังนี้ครับ
-ข้อมูลของผมมีประมาณ 7000บรรทัด
-ในsheet DataWk01 ผมใช้สูตร=SUMIF(ReferWk01!A:A,DataWk01!A:A,ReferWk01!C:C)
-ก็สามารถทำงานได้นะครับแต่ว่าช้ามาก เลย พอจะมีสูตรที่รวดเร็วกว่านี้ใหมครับ
ขอบพระคุณมากครับ
อาร์ต
You do not have the required permissions to view the files attached to this post.
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#2
Post
by bank9597 » Tue Jan 22, 2013 4:03 pm
วิธีการแก้คือ ดึงข้อมูลมาแสดงทีละรหัสครับ จะใช้วิธีการลากสูตรตามจำนวนข้อมูลที่มี ไม่ว่าสูตรไหนก็ชาครับ
อนึ่ง สูตรที่คุณแสดงมา =SUMIF(ReferWk01!
A:A ,DataWk01!
A:A ,ReferWk01!
C:C ) ก็เป็นสาเหตุหลักที่ทำให้การคำนวนช้า เราควรใส่ช่วงเซลล์ตามปริมาณข้อมูลที่มีอยู่จริง ไม่ใช่ A:A , C:C ซึ่งเท่ากับสั่งให้สูตรหาทั้งคอลัมน์ ย่อมช้าอย่างแน่นอน ควรเปลี่ยนเป็น =SUMIF(Sheet1!$A$2:$A$6,$A2,Sheet1!C$2:C$6) ประมาณนี้จึงจะเหมาะ หรือ ใช้ RangeName มาช่วยครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
lotto009
Member
Posts: 157 Joined: Sat Sep 22, 2012 11:53 am
#3
Post
by lotto009 » Wed Jan 23, 2013 11:56 pm
ผมอยากให้คุณBankช่วยอธิบาย Ranknameด้วยครับ ใช้อย่างไรผมไช้ไม่เป็นครับ
ขอโทษที่ตอบช้าครับเพราะว่างานเยอะครับ
ขอบคุณมากครับ
อาร์ต
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#4
Post
by bank9597 » Thu Jan 24, 2013 11:37 am
lotto009 wrote: ผมอยากให้คุณBankช่วยอธิบาย Ranknameด้วยครับ ใช้อย่างไรผมไช้ไม่เป็นครับ
ขอโทษที่ตอบช้าครับเพราะว่างานเยอะครับ
ขอบคุณมากครับ
อาร์ต
ดาวน์โหลดไฟล์ Data ไปก่อนครับ แล้วค่อยทำตามคำตอบโพสต์ถัดไป
You do not have the required permissions to view the files attached to this post.
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#5
Post
by bank9597 » Thu Jan 24, 2013 12:00 pm
อธิบายพอเข้าใจน่ะครับ RangeName คือ การกำหนดชื่อของช่วงข้อมูล เช่น เรากำหนดชื่อช่วงข้อมูล A1:A10 ว่า "MyRange" โปรแกรมก็จะจดจำช่วงข้อมูลนี้ไว้ เราสามารถใช้ชื่อที่เราตั้งไว้นี้ แทนค่าลงไปในสูตรได้ เช่น
=Sumif(MyRange,A2,MyValue) เป็นต้น
RangeName สามารถสร้างได้หลายแบบ ตามความสามารถของผู้ใช้ ดังนี้
1. RangeName ที่มีขอบเขตแน่นอนชัดเจน ไม่เปลี่ยนแปลง
2. RangeName ที่เปลี่ยนแปลงโดยการเพิ่มหรือลด ตามจำนวนข้อมูลจริง ที่เรียกว่า Dynamic
RangeName ยังสมารถทำให้มันมีความสามารถได้อีก หากเรารู้หลักการของมันจริงๆ
ส่วนที่ผมจะตอบคือการทำ RangeName แบบ Dynamic ซึ่งจะเหมาะสำหรับการใช้กับฐานข้อมูลที่มีการเพิ่มของข้อมูลตลอดเวลา โดยให้มันกำหนดช่วงของข้อมูลตามจริง เช่น ข้อมูลมี 1000 บรรทัด RangeName ชนิดนี้ ก็จะกำหนดช่วงไว้ 1000 บรรทัดเช่นกัน
ตอบตามโจทย์ในโพสต์ด้านบน
โหลดไฟล์ Data แล้วเปิดขึ้นมา
1. ไปที่แท็บ Formulas เลือก NameManager กด New จะปรากฏหน้าต่างใหม่ ให้ตั้งชื่อว่า "num" ในช่อง Refer To คีย์ =OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1) แล้วกด Ok
2. ทำตามข้อ 1 โดยตั้งชื่อว่า "amt" คีย์สตร =OFFSET(Sheet1!$B$2,0,0,COUNTA(num)) แล้วกด OK แล้วออกจากหน้าต่าง NameManager
3. การทำ DataValidation (DropDown) เพื่อเลือกรหัสมาแสดงข้อมูล โดยคลิ๊กที่ D2 แล้วไปที่แท็บ Data เลือก DataValidation > DataValidation จะปรากฏหน้าต่าง DataValidation ในช่อง Allow เลือกเป็น List ในช่อง Source คีย์ =num กด OK จะได้ DropDown
4. แสดงค่าของรหัสที่เราเลือก ที่ E2 คีย์ =SUMIF(num,D2,amt)
วิธีการดังกล่าวช่วยให้การทำงานของโปรแกรมเร็วขึ้น เนื่องจากกำหนดตามข้อมูลจริง แต่อย่างไรก็ดีหากข้อมูลมีมากขึ้นเป็นหมื่นเป็นแสนบรรทัด ก็จำเป็นต้องใช้ VBA เข้ามาช่วย โดยตัดการใช้สูตรออกไปให้มากที่สุดเท่าที่จะทำได้ เนื่องจากสูตรเป็นตัวการหลักในการทำให้โปรแกรมทำงานช้าครับ
สงสัยสูตรไหนอย่างไร ค่อยตั้งคำถามมาอีกทีครับ
You do not have the required permissions to view the files attached to this post.
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
lotto009
Member
Posts: 157 Joined: Sat Sep 22, 2012 11:53 am
#6
Post
by lotto009 » Thu Jan 24, 2013 2:36 pm
ขอบคุณคุณแบงค์มากเลยครับ กระจ่างตามที่คุณแบงค์สอนเลย ขอให้สุขภาพแข็งแรงครับ
อาร์ต
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#7
Post
by bank9597 » Thu Jan 24, 2013 3:16 pm
lotto009 wrote: ขอบคุณคุณแบงค์มากเลยครับ กระจ่างตามที่คุณแบงค์สอนเลย ขอให้สุขภาพแข็งแรงครับ
อาร์ต
ขอบคุณครับ ขอให้สุขภาพแข็งแรงเช่นกันครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ