: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

Excel 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#1

Post by mistertenshi »

Excel VBA สามารถที่จะดึงข้อมูลที่ติด Filter Criteria ในแต่ละเดือนไปยังอีกไฟล์ที่เป็นเดือนเดียวกันได้มั้ยครับ และถ้าทำได้จำเป็นต้องใช้วิธีไหนบ้างครับ

ปล.ผมแทบไม่มีความรู้ทางด้าน VBA Macro เลยครับ
Attachments
ไฟล์ปลายทางที่จะดึงมาใส่
ไฟล์ปลายทางที่จะดึงมาใส่
asd.PNG (30.55 KiB) Viewed 137 times
ไฟล์ข้อมูลที่ต้องการดึง ที่วงกลมแดงคือเดือนต่างๆที่ต้องการดึงข้อมูล
ไฟล์ข้อมูลที่ต้องการดึง ที่วงกลมแดงคือเดือนต่างๆที่ต้องการดึงข้อมูล
Capture.PNG (115.18 KiB) Viewed 137 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: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#2

Post by parakorn »

แนบไฟล์ตัวอย่างมาด้วย ทุกคนจะได้เข้าถึงปัญหาและทดลองทำได้ครับ
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#3

Post by mistertenshi »

ที่ผมเขียนมาทั้งหมดคือเป็นการเลือกไฟล์ที่ต้องการแล้ว Copy Data ออกมาคำนวณใหม่แล้วค่อยนำค่าที่คำนวณแล้วนั้นไปวางไว้ในไฟล์ปลายทางครับ
Attachments
Data_Test.xlsx
ไฟล์ที่ต้องการดึง
(180.86 KiB) Downloaded 9 times
Sum_Data.xlsm
ไฟล์ปลายทาง
(473.71 KiB) Downloaded 9 times
วิธีการ Run Macro.docx
วิธีการใช้งาน
(463.79 KiB) Downloaded 9 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: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#4

Post by snasui »

:D กรุณานำ Code ที่เขียนเองแล้วยังติดปัญหามาถามกัน กรณีไม่มีความรู้ยังไม่ควรใช้ VBA จำเป็นต้องศึกษามาเองก่อนตามบำดับ หากเขียนมาแล้วให้ปฏิบัติตามกฎการใช้บอร์ดข้อ 5 ด้านบนครับ :roll:
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#5

Post by mistertenshi »

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

#6

Post by snasui »

:D ไฟล์ปลายทางต้องการนำข้อมูลใดจากไฟล์ต้นทางมาบ้าง ช่วยแสดงตัวอย่างคำตอบที่ถูกต้องมาด้วย จะได้คำนวณเปรียบเทียบได้

สำหรับไฟล์ที่แนบมานั้นเป็นวิธีการใช้งานโปรแกรม ซึ่งมีการเขียน Code ไว้ให้เรียบร้อยแล้ว กรณีมีปัญหาควรนำไปถามจากผู้ที่เขียน VBA หรือหากยังแก้ไม่ได้ให้ผู้ที่เขียน VBA มาถามเองจะสะดวกกว่าครับ
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#7

Post by mistertenshi »

สิ่งที่ต้องการคือ การดึงข้อมูลเงิน EST ที่แยก OGC Rank เป็นกลุ่มๆของแต่ละเดือน และ PL จากไฟล์ต้นทางหรือไฟล์ Data_Test.xlsx ไปยังไฟล์ปลายทางหรือไฟล์ Sum_Data.xlsm ที่มีหมวดหมู่ Rank , OGC / IH ในแต่ละเดือนให้ตรงกัน ครับ โดยมีข้อแม้คือข้อมูล EST ที่ถูกดึงมาจากไฟล์ต้นคือ Data_Test.xlsx จำนวนเงินที่ถูกดึงออกมาจำเป็นต้อง คูณ 1,000,000 ก่อนครับแล้วค่อยนำไปใส่ยังไฟล์ปลายทางหรือไฟล์ Sum_Data.xlsm ตาม หมวดหมู่และเดือน
Attachments
ผลลัพธ์ตัวอย่างครับ ข้อมูลเงินที่ถูกคำนวณแล้วตาม Rank ตามเดือนและ ตาม OGC กับ IH ครับ
ผลลัพธ์ตัวอย่างครับ ข้อมูลเงินที่ถูกคำนวณแล้วตาม Rank ตามเดือนและ ตาม OGC กับ IH ครับ
data.PNG (46.23 KiB) Viewed 110 times
ไฟล์ต้นที่ต้องการดึงข้อมูลในแต่ละเดือนโดยต้องข้อมูลจาก EST
ไฟล์ต้นที่ต้องการดึงข้อมูลในแต่ละเดือนโดยต้องข้อมูลจาก EST
sales1.PNG (17.14 KiB) Viewed 110 times
ไฟล์ต้นที่มีหมวดหมูโดยใช้ OGC และ Rank เป็นตัวแบ่ง และ PL
ไฟล์ต้นที่มีหมวดหมูโดยใช้ OGC และ Rank เป็นตัวแบ่ง และ PL
sales2.PNG (24.01 KiB) Viewed 110 times
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#8

Post by mistertenshi »

นี่ตัวอย่างไฟล์ครับ
Attachments
Data_Test.xlsx
ไฟล์ต้น
(188.04 KiB) Downloaded 9 times
Sum_Data.xlsm
ไฟล์ปลายทาง
(428.06 KiB) Downloaded 9 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: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#9

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปครับ

เซลล์ E6 ในชีต EST ของไฟล์ Sum_Data.xlsm มีค่า 1785130 นำมาจากเซลล์ไหนของไฟล์ต้นทางบ้าง พิจารณาอย่างไรว่าให้นำค่านั้นมาครับ :?:
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#10

Post by mistertenshi »

เซลล์ E6 ใน sheet EST ในไฟล์ Sum_Data.xlsm มาจาก การใช้ Filter ของ OGC ให้โชว์แค่ตัว g และ Filter Rank ให้โชว์แค่ A และ A B/S แล้วใช้สูตร Subtotal ในเดือน เม.ย.-18 ของช่อง EST โดยสูตร Subtotal นี้คลุมเซลล์ทั้งหมดในช่อง EST ของเดือน เม.ย.-18 ครับ และนำค่านั้นมาคูณด้วย 1,000,000 ครับ จึงได้ค่า 1,785,130 จากไฟล์ที่ชื่อว่า Data_Test.xlsx
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: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#11

Post by snasui »

:D ตัวอย่างสูตรที่เซลล์ E6 ครับ

=SUMPRODUCT(--([Data_Test.xlsx]Sheet1!$BT$3:$BT$396="g"),--(ISNUMBER(SEARCH("A",[Data_Test.xlsx]Sheet1!$BY$3:$BY$396))),INDEX([Data_Test.xlsx]Sheet1!$N$3:$BI$396,0,MATCH(LOOKUP(9.99999999999999E+307,$E$4:E$4),[Data_Test.xlsx]Sheet1!$N$1:$BI$1,0)+1))*1000000

Enter > คัดลอกไปด้านขวาเฉพาะเซลล์ที่เกี่ยวข้อง

กรณีเป็น Rank อื่นจะต้องอธิบายมาอย่างละเอียดเช่นเดิมว่ามีวิธีคิดอย่างไรจะได้เขียนสูตรเปรียบเทียบได้ครับ
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#12

Post by mistertenshi »

ได้ผลตามที่ต้องการครับ ขอบคุณอาจารย์ คนควน มากครับ :thup:

จะสอบถามเพิ่มเติ่มเกี่ยวกับกรณีที่ ต้องใช้ในการดึงข้อมูลจากไฟล์อื่นนอกจากไฟล์นี้ครับ
เพราะจำเป็นต้องดึงข้อมูลออกมาโดยวิธีเดิมๆแต่ไฟล์ต้นทางที่ต้องดึงออกมา จำเป็นต้องเปลี่ยนไปเรื่อยๆครับ
รบกวนอาจารย์ ช่วยอธิบายขั้นตอนคิดของสูตร
=SUMPRODUCT(--([Data_Test.xlsx]Sheet1!$BT$3:$BT$396="g"),--(ISNUMBER(SEARCH("A",[Data_Test.xlsx]Sheet1!$BY$3:$BY$396))),INDEX([Data_Test.xlsx]Sheet1!$N$3:$BI$396,0,MATCH(LOOKUP(9.99999999999999E+307,$E$4:E$4),[Data_Test.xlsx]Sheet1!$N$1:$BI$1,0)+1))*1000000

ตั้งแต่ --(ISNUMBER(SEARCH("A",[Data_Test.xlsx]Sheet1!$BY$3:$BY$396))),INDEX([Data_Test.xlsx]Sheet1!$N$3:$BI$396,0,MATCH(LOOKUP(9.99999999999999E+307,$E$4:E$4),[Data_Test.xlsx]Sheet1!$N$1:$BI$1,0)+1))*1000000
ทำไมถึงต้องเป็น -- แล้วMATCH(LOOKUP9.99999999999999E+307 หมายความว่าอะไรครับ :?:
User avatar
parakorn
Gold
Gold
Posts: 1223
Joined: Thu Mar 14, 2013 9:41 am
Location: Central Chaengwattana[Tops]
Excel Ver: 365
Contact:

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#13

Post by parakorn »

--(ISNUMBER(SEARCH("A",[Data_Test.xlsx]Sheet1!$BY$3:$BY$396))) คือการค้นหาว่า บรรทัดไหนมีตัว A บ้าง แล้วเปลี่ยนเป็นค่า TRUE FALSE ด้วยสูตร ISNUMBER ครับ แล้วใช้ -- เปลี่ยน TRUE เป็น 1 เปลี่ยน FALSE เป็น 0

INDEX([Data_Test.xlsx]Sheet1!$N$3:$BI$396,0,MATCH(LOOKUP(9.99999999999999E+307,$E$4:E$4),[Data_Test.xlsx]Sheet1!$N$1:$BI$1,0)+1) คือการเลือกข้อมูลในช่วง [Data_Test.xlsx]Sheet1!$N$3:$BI$396 ที่มีหัว Column เป็นเดือนที่ตรงกับ หัวตารางในชีต EST ครับ การที่อาจารย์ใช้ MATCH ตามด้วย LOOKUP เพราะการอ้างอิง Cell ที่ Merge ไม่สามารถอ้างอิงได้ทุก Cell เช่นว่า Merge Cell E4 ถึง G4 แต่ถ้าเราต้องการอ้างอิงข้อมูลจะสามารถอ้างอิงได้แค่ E4 สูตร LOOKUP(9.99999999999999E+307,$E$4:E$4) จึงเป็นการขยายการอ้างอิงช่วงข้อมูลเรื่อยๆ โดยเริ่มตั้งแต่ E4 เป็นต้นไป ถ้าพบข้อความล่าสุดคือข้อความใด จะนำข้อความนั้นมาอ้างอิง ดังนั้นจึงตอบโจทย์ เมื่ออ้างอิง F4 G4 สูตร LOOKUP จะนำ E4 มาอ้างอิง แต่เมื่อ Copy ไปทางขวาต่อ ไปพบข้อความที่ H4 ดังนั้น H4 ถึง I4 จะนำข้อมูลจาก H4 มาอ้างอิง

หลังจากได้ผลลัพท์ทั้ง 3 Array แล้ว สูตร Sumproduct จะนำมาคูณกัน

Array ที่ 1 คือ --([Data_Test.xlsx]Sheet1!$BT$3:$BT$396="g") จะคืนค่าเป็น 0 หรือ 1 กรณีบรรทัดนั้นตรงเงื่อนไข
Array ที่ 2 คือ --(ISNUMBER(SEARCH("A",[Data_Test.xlsx]Sheet1!$BY$3:$BY$396))) จะคืนค่าเป็น 0 หรือ 1 กรณีบรรทัดนั้นตรงเงื่อนไขเช่นกัน
Array ที่ 3 คือ INDEX([Data_Test.xlsx]Sheet1!$N$3:$BI$396,0,MATCH(LOOKUP(9.99999999999999E+307,$E$4:E$4),[Data_Test.xlsx]Sheet1!$N$1:$BI$1,0)+1) จะได้เป็นยอดที่มีหัว Column ตรงกับเงื่อนไข

นำทั้ง 3 Array มาคูณกับ Array อื่นๆ (ถ้าผลลัพท์ใดๆคูณด้วย 0 จะได้0) แล้วนำมารวมกันจะได้เป็นผลลัพท์ครับ
mistertenshi
Member
Member
Posts: 12
Joined: Thu Jul 26, 2018 8:49 am

Re: Excel VBA ในการดึงข้อมูลแต่ละเดือนไปยังอีกไฟล์ที่มีเดือนตรงกัน

#14

Post by mistertenshi »

ขอขอบคุณ อาจารย์ parakorn มากเลยครับ ที่มาอธิบายให้ผมเข้าใจมากขึ้นในส่วนนี้
Post Reply