: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

สอบถามการทำ Professional Macro Recording

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

สอบถามการทำ Professional Macro Recording

#1

Post by sakajohn »

ผมลองทำในหัวข้อการใช้ Macro เรียกข้อมูลเก่าขึ้นมา แล้วทำการแก้ไขแล้วใส่ข้อมูลกลับเข้าไปที่เดิม ถ้าเป็นข้อมูลที่ Sheet อยู่ใน ไฟล์งานเดียวกันไม่ติดปัญหาครับ แต่พอจะเรียกข้อมูลที่อยู่คนละเครื่อง เวลาRunมาโครมันติดปัญหาครับ ผมขอสอบถามดังนี้ครับ
1. ผมมีไฟล์งานชื่อ Plannew.XLSM อยู่ที่เครื่อง A ต้องการดึงข้อมูลจากวงแลน ในเครื่อง \\ACCOUNT\DATA (D)\SALE\SaleData.xlsx มาแสดงที่ไฟล์งาน Plannew.xlsm เมื่อแก้ไขเสร็จ จากนั้นก็ส่งข้อมูลกลับไปไว้ที่ตำแหน่งเดิมในเครื่อง \\ACCOUNT\DATA (D)\SALE\SaleData.xlsx
2. ผมใช้คำสั่ง F5 เรียกหน้าต่าง GOTO แล้วพิมพ์ offset([SaleData.xlsx]Total!a1,L1,0,1,21) โดยเปิดไฟล์งาน SaleData ไว้ก่อน มันสามารถไปหาข้อมูลได้ตรงครับ
3. ทำการบันทึกมาโคร code ที่ได้

Code: Select all

Sub Macro33()
'
' Macro33 Macro
'

'
    Workbooks.Open Filename:="\\ACCOUNT\Data (D)\SALE\SaleData.xlsx"
    ThisWorkbook.Activate
    Application.Goto Reference:="OFFSET(TOTAL!R[-8]C,R1C12,0,1,21)"
End Sub
จะ error ที่ บรรทัด

Code: Select all

Application.Goto Reference:="OFFSET(TOTAL!R[-8]C,R1C12,0,1,21)"
ผมลองแก้ไขเป็น

Code: Select all

Application.Goto Reference:="OFFSET([SaleData.xlsx]TOTAL!R[-8]C,R1C12,0,1,21)"
ปรากฎว่าไม่ error ครับ แต่ไม่ตรงตำแหน่งที่ต้องการครับ
ผมต้องอยากทราบ CODE สำหรับการไปหาข้อมูลที่อยู่ต่างเครื่องครับ
Attachments
plannew.xlsm
(15.43 KiB) Downloaded 20 times
SaleData.xlsx
(11.26 KiB) Downloaded 19 times
User avatar
parakorn
Gold
Gold
Posts: 1223
Joined: Thu Mar 14, 2013 9:41 am
Location: Central Chaengwattana[Tops]
Excel Ver: 365
Contact:

Re: สอบถามการทำ Professional Macro Recording

#2

Post by parakorn »

ผมคิดว่าตอนบันทึก น่าจะอ้างอิงไม่ถูกต้องนะครับ
R[-8]C คือ คอลัมภ์ปัจจุบันถอยบรรทัดขึ้นไป 8 บรรทัด ซึ่งหมายถึงต้องมี Cell Ref ที่อ้างอิง
ลองเปลี่ยนเป็น R1C1 ดูครับ
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#3

Post by sakajohn »

ลองแล้วครับ ค่าที่ได้เวลารันมาโคร จะไม่ตรงตำแหน่งครับ
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: สอบถามการทำ Professional Macro Recording

#4

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

offset([SaleData.xlsx]DATA!a1,[plannew.xlsm]Sheet1!E1,0,1,5)
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#5

Post by sakajohn »

ขอบคุณครับอาจารย์
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#6

Post by sakajohn »

อาจารย์ครับรบกวนสอบถามเพิ่มเติมครับ ที่ไฟล์ SaleData.xlsx มี sheet Sale1, Sale2, DATA ที่ Sheet DATA ทำหน้าที่รวมข้อมูลใน Sale1และSale2 มาต่อเรียงลำดับกันครับ ถ้าจำนวนไม่มากทำงานเร็วครับ แต่ถ้า copy สูตรไว้ประมาณ 5,000 บรรทัด โปรแกรมจะทำงานช้าครับ มีวิธีอื่นแนะนำบ้างมั้ยครับ
Attachments
SaleData.xlsx
(11.26 KiB) Downloaded 23 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: สอบถามการทำ Professional Macro Recording

#7

Post by snasui »

:D ลองปรับสูตรที่ A2 เป็นด้านล่างครับ

=IF($E2<>"",OFFSET(INDIRECT("'"&$E2&"'!A2"),ROWS($A2:A2)-1,COLUMNS($A2:A2)-1),"")

Enter > Copy ไปด้านขวาและลงด้านล่าง สูตรลักษณะนี้หากใช้มากจะทำให้ไฟล์คำนวณช้าครับ
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#8

Post by sakajohn »

อาจารย์ครับ copy ไปแล้วครับ ค่าที่ A3 มันเหมือนกับค่า A2 เลยครับ มันไม่ได้เปลี่ยนตามครับ
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: สอบถามการทำ Professional Macro Recording

#9

Post by snasui »

:D แนบไฟล์นั้นมาด้วยแล้วชี้ให้เห็นว่าผิดพลาดตรงไหน อย่างไร จะได้ตอบต่อไปจากนั้นครับ
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#10

Post by sakajohn »

ผมลองวางแล้วเป็นตามไฟล์แนบครับ รบกวนถามต่อครับ นอกจากวิธีเขียนสูรเพื่อให้คัดลอกข้อมูลมาวางแล้ว มีวิธีอื่นที่จะทำแบบนี้กับข้อมูลที่มีจำนวนเยอะๆมั้ยครับ เช่น เขียน code vba ครับ ถ้ามีช่วยแนะนำแนวทางด้วยครับจะได้ไปลองเขียนดูครับ
Attachments
SaleData.xlsx
(12.36 KiB) Downloaded 25 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: สอบถามการทำ Professional Macro Recording

#11

Post by snasui »

:D ปรับสูตรที่ A2 ใหม่ตามด้านล่างครับ

=IF($E2<>"",OFFSET(INDIRECT("'"&$E2&"'!A2"),COUNTIF($E$2:$E2,$E2)-1,COLUMNS($A2:A2)-1),"")

Enter > Copy ไปด้านขวาและลงด้านล่าง
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#12

Post by sakajohn »

วิธีนี้ถ้าเราcopyสูตรไว้เพื่อรอข้อมูลประมาณ 10000 บรรทัด มันจะช้าหรือเปล่าครับ ถ้าช้าเราจะมีวิธีอื่นมั้ยครับ
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: สอบถามการทำ Professional Macro Recording

#13

Post by snasui »

:D การใช้สูตรกับข้อมูลจำนวนมากย่อมส่งผลให้คำนวณช้าเป็นปกติอยู่แล้ว ส่วนจะช้าแค่ไหนขึ้นอยู่กับทรัพยกรของเครื่องนั้นครับ

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

อีกวิธีก็เป็นการใช้ VBA ครับ wordpress/search-multiple-sheets/
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#14

Post by sakajohn »

กรณีการใช้สูตรนำข้อมูลหลายชีตมาต่อกัน วิธีที่จะทำให้เร็วคือหลังจากได้ผลลัพธ์แล้วให้คัดลอกแล้ววางเป็นค่าเอาไว้ เหลือเฉพาะสูตรเพียงบรรทัดแรกบรรทัดเดียว เมื่อมีการปรับปรุงข้อมูลใหม่จึงค่อยคัดลอกสูตรลงไปและคัดลอกเป็นค่าอีกครั้งวนไปเช่นนี้ครับ
อาจารย์ครับวิธีนี้ต้องเขียนเป็น VBA มั้ยครับ ถ้าเป็น VBA มันก็จะเป็น MACRO ใช่มั้ยครับ ผมติดตรงที่ว่า ไฟล์นี้จะต้องแชร์ให้หลายคนใช้ครับ
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: สอบถามการทำ Professional Macro Recording

#15

Post by snasui »

:D สำหรับการคัดลอกแล้ววางเป็นค่าทำด้วย Manual ได้ครับ

ไฟล์ที่ Shared ไม่สามารถใช้ VBA ได้ครับ
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#16

Post by sakajohn »

รบกวนอาจารย์ช่วยแนะนำได้มั้ยครับ ผมติดตรงนี้ครับ พอเขียนเป็น VBA ก็แชร์ไม่ได้ครับ
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: สอบถามการทำ Professional Macro Recording

#17

Post by snasui »

:D ผมตอบไปอย่างละเอียดแล้วในโพสต์ที่ #13 ไม่เข้าใจประเด็นใดครับ :?:
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#18

Post by sakajohn »

กรณีการใช้สูตรนำข้อมูลหลายชีตมาต่อกัน วิธีที่จะทำให้เร็วคือหลังจากได้ผลลัพธ์แล้วให้คัดลอกแล้ววางเป็นค่าเอาไว้ เหลือเฉพาะสูตรเพียงบรรทัดแรกบรรทัดเดียว เมื่อมีการปรับปรุงข้อมูลใหม่จึงค่อยคัดลอกสูตรลงไปและคัดลอกเป็นค่าอีกครั้งวนไปเช่นนี้ครับ
วิธีนี้ใช้สูตรอย่างเดียวก็ทำได้หรือครับ สูตรใดที่จะใช้สั่งให้เมื่อมีการปรับปรุงข้อมูลใหม่จึงค่อยคัดลอกสูตรลงไปและคัดลอกเป็นค่าอีกครั้งวนไป
ผมทำได้แต่เขียน VBA ครับ อยากได้เป็นสูตรช่วยแนะนำได้มั้ยครับ
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: สอบถามการทำ Professional Macro Recording

#19

Post by snasui »

😀 ผมตอบไปในโพสต์ที่ #15 เรียบร้อยแล้วครับ

คำว่าทำด้วย Manual คือทำเองด้วยมือ 😆
sakajohn
Member
Member
Posts: 229
Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010

Re: สอบถามการทำ Professional Macro Recording

#20

Post by sakajohn »

"OFFSET(R9C30,1,0,COUNTIF(C34,"">0""),COUNTA(R9))"
codeนี้ผมได้มาจากการบันทึกมาโคร ใช้ F5 ครับ ถ้าผมต้องการให้ไปทางขวา 30 คอลัมภ์ ต้องเปลี่ยนcode อย่างไรครับ
Post Reply