: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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sutham
Member
Member
Posts: 118
Joined: Thu Nov 17, 2011 1:54 pm

การใช้ VBA ในการดึงข้อมูล

#1

Post by sutham »

เนื่องจากผมได้ทำการเขียน code VBA เพื่อใช้ในการดึงมาใส่ในเซลล์ต่างๆ โดย code ที่ผมใช้ ดังนี้

Code: Select all

Sub Edit_Project()
Sheets("data").Range("e9").Value = Sheets("fdata").Range("b2").Value
Sheets("data").Range("g9").Value = Sheets("fdata").Range("b3").Value
Sheets("data").Range("e10").Value = Sheets("fdata").Range("b4").Value
Sheets("data").Range("e11").Value = Sheets("fdata").Range("b5").Value
Sheets("data").Range("g11").Value = Sheets("fdata").Range("b6").Value
Sheets("data").Range("e12").Value = Sheets("fdata").Range("b7").Value
Sheets("data").Range("I12").Value = Sheets("fdata").Range("b8").Value
Sheets("data").Range("e13").Value = Sheets("fdata").Range("b9").Value
Sheets("data").Range("e14").Value = Sheets("fdata").Range("b10").Value
Sheets("data").Range("e16").Value = Sheets("fdata").Range("b11").Value
Sheets("data").Range("g16").Value = Sheets("fdata").Range("b12").Value
Sheets("data").Range("e17").Value = Sheets("fdata").Range("b13").Value
Sheets("data").Range("g17").Value = Sheets("fdata").Range("b14").Value
Sheets("data").Range("e18").Value = Sheets("fdata").Range("b15").Value
Sheets("data").Range("g18").Value = Sheets("fdata").Range("b16").Value
Sheets("data").Range("e20").Value = Sheets("fdata").Range("b17").Value
Sheets("data").Range("g20").Value = Sheets("fdata").Range("b18").Value
Sheets("data").Range("e21").Value = Sheets("fdata").Range("b19").Value
Sheets("data").Range("g21").Value = Sheets("fdata").Range("b20").Value
End Sub

ในไฟล์แนบเป็นตัวอย่าง ซึ่งข้อมูลจริงมีเซลล์ที่ดึงข้อมูลอีกมากครับ ปัญหาคือ เมื่อกดปุ่ม "ค้นข้อมูล" ในชีท data ต้องใช้เวลารอนานประมาณ 2-3 นาที กว่าที่โปรแกรมจะประมวลผลเสร็จ จึงรบกวนขอคำแนะนำว่าผมควรจะต้องการปรับอะไร อย่างไรบ้าง เพื่อให้การประมวลผลเร็วขึ้น หรือต้องปรับปรุง code ใหม่ :P
Attachments
ตย.การดึงข้อมูล.xlsm
(23.57 KiB) Downloaded 20 times
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 แบบนั้นเป็นการดึงค่ามาตรง ๆ ไม่มีอะไรที่ผิดปกติและต้องปรับ สิ่งที่ต้องพิจารณาคือ มีสูตรอื่นใดในการดึงข้อมูลเข้ามาในชีต fdata หรือไม่ จำเป็นต้องแจ้งมาอย่างละเอียดครับ
sutham
Member
Member
Posts: 118
Joined: Thu Nov 17, 2011 1:54 pm

Re: การใช้ VBA ในการดึงข้อมูล

#3

Post by sutham »

ไม่มีครับ เนื่องจากผมสั่งให้คำนวณแยกส่วนคือ ระบบจะคำนวณข้อมูลมาไว้ในชีต fdata ให้เสร็จเรียบร้อยก่อน จากนั้นจึงสั่งให้ระบบคำนวณดึงข้อมูลจากชีต fdata โดยการกดปุ่ม "ค้นข้อมูล" ครับ ที่ผมขอคำแนะนำ คือ ถ้าเราเขียน code แบบนี้ โปรแกรมจะรัน code ไปทีละบรรทัด ใช่หรือไม่ (ไม่แน่ใจว่าผมเข้าใจถูกหรือไม่) ถึงคราวนี้ code ที่ผมเขียนใช้จริงประมาณ 60 กว่าบรรทัด ครับ
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 »

:D ไม่ว่าจะเขียน Code แบบใดก็ Run ไปทีละบรรทัดอยู่แล้วครับ ส่วน Code จริงต่อให้มีเป็น 1000 บรรทัดก็ไม่ควรจะใช้เวลาหลายนาที

ระบบคำนวณที่ว่านั้นมีสูตรหรือมีวิธีการทำงานเช่นไร หากเป็นสูตรที่ทำงานกับข้อมูลปริมาณมาก ในแต่ละบรรทัดที่ Code นี้ทำงานจะเกิดการคำนวณทุกครั้ง และเมื่อเกิดการคำนวณ จะเป็นภาระในการดึงค่ามาแสดงตาม Code นี้ครับ

กรณีที่เกิดการคำนวณแล้วทำให้หน่วง เราสามารถใช้ Application.Calculation = xlCalculationManual เพื่อปรับการคำนวณเป็น Manual ในบรรทัดแรกก่อน Code อื่น ๆ แล้วก่อนจะ End Sub ให้ปิดด้วย Application.Calculation = xlCalculationAutomatic เพื่ปรับกลับมาให้คำนวณแบบอัตโนมัติตามเดิมครับ
Post Reply