: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

รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yupradee_sk
Member
Member
Posts: 4
Joined: Thu Oct 23, 2014 2:31 pm

รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#1

Post by yupradee_sk »

เรียนทุกท่าน และอาจารย์ค่ะ

ดิฉันมีปัญหากับการประมวลผลข้อมูลค่ะ คือ โค๊ด VBA ที่ใช้ ประมวลผลนามมากค่ะ ถ้าเป็น โน้ตบุ๊ค ด้วยแล้ว ใช้เวลาเกือบครึ่งชั่วโมงเลยค่ะ จึงอยากขอคำแนะนำสูตรที่ประมวลผลได้เร็วกว่านี้ค่ะ (ดิฉันไม่มีพื้นฐานการเขียน VBA ค่ะ)

ไม่สามารถส่ง File ให้ได้ค่ะ เพราะ File ใหญ่มากค่ะ

Sub insert()
Sheets("DATA030").Range("A3:A60003").Copy Destination:=Sheets("DM").Range("B3:B60003")
Sheets("DATA030").Range("A3:L60003").Copy Destination:=Sheets("REPORT").Range("A4:L60004")
Sheets("DATA030").Range("G3:G60003").Copy Destination:=Sheets("DM").Range("A3:A60003")
Sheets("DATA030").Range("A3:L60003").Copy Destination:=Sheets("DATA").Range("A4:L60004")
Sheets("DATA015").Range("D8:D60003").Copy Destination:=Sheets("WMS").Range("A2:A60003")
Sheets("DATA015").Range("I8:I60003").Copy Destination:=Sheets("WMS").Range("B2:B60003")

End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#2

Post by snasui »

:D ไฟล์แนบควรทำมาเป็นตัวอย่างโดยมีข้อมูลที่เป็นตัวแทนของข้อมูลจริงและไม่ควรมีขนาดใหญ่ครับ

ควรโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกต่อการ Copy และการอ่าน ดูตัวอย่างที่นี่ครับ viewtopic.php?style=3&f=3&t=1187

ตัวอย่างการปรับ Code เพื่อลดการวูบวาบของหน้าจอและปรับการคำนวณให้เป็น Manual เสียก่อนที่จะทำการ Copy เพื่อลดการคำนวณ จากนั้นค่อยปรับกลับมาเหมือนเดิมครับ

Code: Select all

Sub insert()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheets("DATA030").Range("A3:A60003").Copy Destination:=Sheets("DM").Range("B3:B60003")
    Sheets("DATA030").Range("A3:L60003").Copy Destination:=Sheets("REPORT").Range("A4:L60004")
    Sheets("DATA030").Range("G3:G60003").Copy Destination:=Sheets("DM").Range("A3:A60003")
    Sheets("DATA030").Range("A3:L60003").Copy Destination:=Sheets("DATA").Range("A4:L60004")
    Sheets("DATA015").Range("D8:D60003").Copy Destination:=Sheets("WMS").Range("A2:A60003")
    Sheets("DATA015").Range("I8:I60003").Copy Destination:=Sheets("WMS").Range("B2:B60003")
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
yupradee_sk
Member
Member
Posts: 4
Joined: Thu Oct 23, 2014 2:31 pm

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#3

Post by yupradee_sk »

ขอบคุณสำหรับคำแนะนำคะ่ ตอนนี้ทดลองกลับเครื่อง PC เวลาลดลงเหลือประมาณ 10 นาทีค่ะ แต่เครื่องโน๊ดบุคยังไม่ได้ทดลองค่ะ ในการรันข้อมูลช้ามันจะเกี่ยวกับ ฐานข้อมูลที่ Copy ด้วยหรือเปล่า เพราะ ฐานข้อมูลมีสูตร vlookup อยู่ด้วยค่ะ แต่ละชีตประมาณ 60000 บรรทัด (กำลังฝึกเขียน VBA vlookup อยู่ค่ะ แต่ยังไม่สำเร็จเพราะตัวแปรเยอะมาก) ถ้าติดปัญหาตรงไหนขอรบกวนอาจารย์อีกครั้งน่ะค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#4

Post by snasui »

yupradee_sk wrote: ในการรันข้อมูลช้ามันจะเกี่ยวกับ ฐานข้อมูลที่ Copy ด้วยหรือเปล่า เพราะ ฐานข้อมูลมีสูตร vlookup อยู่ด้วยค่ะ แต่ละชีตประมาณ 60000 บรรทัด
:D เกี่ยวข้องอย่างแน่นอนครับ

ในฐานข้อมูลเราไม่ควรมีสูตร เราจะใช้สูตรสำหรับส่วนประมวลผลและส่วนที่เป็นรายงาน โดยพื้นที่ดังกล่าวมีเพียงพอเหมาะ ไม่ควรมีสูตรเป็นหมื่นบรรทัดครับ
User avatar
suka
Silver
Silver
Posts: 920
Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#5

Post by suka »

ขออนุญาตนะคะ

อาจารย์คะ สามารถนำโค๊ดนี้ไปใช้เพื่อกันการทำงานช้าไว้ก่อนได้ไหมคะ

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


และ

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#6

Post by snasui »

:D ต้องทราบว่าเสียก่อนครับว่าช้าเพราะเหตุใด ซึ่งผมอธิบายไว้แล้วว่าเขียน Code นั้นไว้เพื่อการใดครับ :roll:

ถ้าช้าเพราะเหตุอื่นที่ไม่เกี่ยวกับการวูบวาบหน้าจอและการคำนวณก็ไม่สามารถจะนำ Code นั้นไปใช้ได้ผลครับ
yupradee_sk
Member
Member
Posts: 4
Joined: Thu Oct 23, 2014 2:31 pm

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#7

Post by yupradee_sk »

:thup: ทดสอบเครื่อง PC ที่ทำงาน เวลาลดลงเหลือเพียง 3 นาทีค่ะ ขอบคุณสำหรับคำแนะนำอีกครั้งค่ะ
User avatar
suka
Silver
Silver
Posts: 920
Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#8

Post by suka »

ขอบคุณค่ะอาจารย์
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#9

Post by Totem »

:D เรียนถามอาจารย์

Application.Calculation = xlCalculationManual

code...FormulaArray = ...

Application.Calculation = xlCalculationAutomatic

หากข้อมูลมีจำนวนมากเขียน code

Code: Select all

Application.Calculation = xlCalculationManual

Code: Select all

Application.Calculation = xlCalculationAutomatic
บน vba ประมวลผลจะเร็วกว่า การใช้ FormulaArray บน cell ใน excel ไหมครับ หากเร็วกว่าเพราะเหตุใดครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวบแนะนำการเขียน VBA ให้ประมวลได้เร็วขึ้นค่ะ

#10

Post by snasui »

:D การเขียน Code ให้เป็นสูตร Array จะช้ากว่าการเขียนสูตรลงบน Excel โดยตรง และไม่เฉพาะสูตร Array เท่านั้น สูตรใดก็ตามที่เขียนขึ้นมาเองโดย VBA ให้ทำหน้าที่เดียวกันกับสูตรใด ๆ บน Excel ย่อมช้ากว่าสูตรบน Excel ตัวผมเองยังไม่เคยพบว่ามีสูตรใดที่เขียนขึ้นเองแล้วเร็วเท่าสูตรบน Excel (โดยเทียบในทุกความสามารถของสูตรนั้น ๆ)

สูตรที่ Add-on มากับโปรแกรมได้ถูกพัฒนาให้มีประสิทธิภาพดีขึ้นอย่างต่อเนื่องในโปรแกรมแต่ละรุ่นครับ
Post Reply