: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 8 times
SaleData.xlsx
(11.26 KiB) Downloaded 5 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: 31191
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 5 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
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: 31191
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 1 time
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
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: 31191
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: 31191
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: 31191
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: 31191
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