ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
- ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
- ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
- กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
- กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
- กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
- กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
-
Xcelvba
- Bronze

- Posts: 344
- Joined: Thu Feb 03, 2022 9:04 am
- Excel Ver: 2019
#1
Post
by Xcelvba »
ต้องการนำข้อมูลใน Sheet "Data" มาใส่ ใน Sheet schedule ตั้งแต่ D7:AH1057 ครับ
โดย อ้างอิงจาก
วันที่ และ รหัส ในชีท Data มาใส่ ตัวย่อจาก Symbol ครับ
You do not have the required permissions to view the files attached to this post.
-
Xcelvba
- Bronze

- Posts: 344
- Joined: Thu Feb 03, 2022 9:04 am
- Excel Ver: 2019
#2
Post
by Xcelvba »
ตอนนี้สามารถนำสูตรมาใส่ได้แล้วครับ แต่ปัญหาที่พบคือ ใช้เวลาคำนวณ ค่อนข้างนาน ขอช่วยแก้สูตรให้หน่อยครับ
=IFERROR(INDEX(data!$E:$E,AGGREGATE(15,6,ROW(data!$C$2:$C$2293)/((DAY(data!$C$2:$C$2293)=schedule!D$6)*(data!$A$2:$A$2293=schedule!$B7)),ROWS(schedule!D7:D7))),"")
*ใส่ตั้งแต่ D7:AH1051 *
-
snasui
- Site Admin

- Posts: 29982
- Joined: Sun Jan 24, 2010 12:33 pm
- Location: Songkhla, Thailand
- Excel Ver: 2010, 365
-
Contact:
#3
Post
by snasui »

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

- Posts: 344
- Joined: Thu Feb 03, 2022 9:04 am
- Excel Ver: 2019
#4
Post
by Xcelvba »
คลิกเพื่อดูเป็น ชุดๆ นี้อย่างไรครับ สร้างปุ่มขึ้นมาแล้ว
แยกแต่ละ ชีท ให้มีข้อมูล 30 บรรทัดใช่ไหมครับ
-
snasui
- Site Admin

- Posts: 29982
- Joined: Sun Jan 24, 2010 12:33 pm
- Location: Songkhla, Thailand
- Excel Ver: 2010, 365
-
Contact:
#5
Post
by snasui »

ดูตัวอย่างในไฟล์แนบครับ
วิธีการ
- เข้าเมนู Developer > เข้าเมนู Insert > ลาก Scroll bar มาวาง สำหรับการสร้างขึ้นมาใหม่
- สำหรับในไฟล์ที่แนบมาด้วย คลิกขวาที่ Scroll bar > Format Control > ดูการกำหนดค่า เปลี่ยนค่าให้สอดคล้องกับข้อมูลที่มีอยู่จริง
- เซลล์ B7 คีย์สูตร
=INDEX(data!$A$2:$A$2293,(30*($B$5-1))+ROWS(D$7:D7))
Enter > Copy ลงด้านล่าง
- เซลล์ D7 คีย์สูตร
=IFERROR(LOOKUP(2,1/((DAY(data!$C$2:$C$2293)=D$6)*(data!$A$2:$A$2293=$B7)),data!$E$2:$E$2293),"")
Enter > Copy ไปด้านขวาและลงด้านล่าง
- คลิก Scroll bar เพื่อเลื่อนซ้าย ขวา ตามต้องการ
You do not have the required permissions to view the files attached to this post.
-
Xcelvba
- Bronze

- Posts: 344
- Joined: Thu Feb 03, 2022 9:04 am
- Excel Ver: 2019
#6
Post
by Xcelvba »
ขอบคุณครับ อ. มีวิธีที่ให้ โชว์ เฉพาะ รหัส ละ 1 แถวไหมครับ
You do not have the required permissions to view the files attached to this post.
-
snasui
- Site Admin

- Posts: 29982
- Joined: Sun Jan 24, 2010 12:33 pm
- Location: Songkhla, Thailand
- Excel Ver: 2010, 365
-
Contact:
#7
Post
by snasui »

ควรสร้างข้อมูลนั้นไว้ต่างหากแล้วค่อยดึงมาใช้แทนเพื่อลดภาระการทำงานของสูตรครับ
-
Xcelvba
- Bronze

- Posts: 344
- Joined: Thu Feb 03, 2022 9:04 am
- Excel Ver: 2019
#8
Post
by Xcelvba »
ขอบคุณ สำหรับคำแนะนำครับ ขอสอบถามเพิ่มเติมครับ
1.=INDEX(data!$A$2:$A$2293,(30*($B$5-1))+ROWS(D$7:D7))
1.130 คือ จำนวนชุดนึงมี 30 แถวใช่ไหมครับ
1.2ส่วน -1 คืออะไรครับ
2.Form controls กับ Active X Controls ต่างกันอย่างไรครับ
-
snasui
- Site Admin

- Posts: 29982
- Joined: Sun Jan 24, 2010 12:33 pm
- Location: Songkhla, Thailand
- Excel Ver: 2010, 365
-
Contact:
#9
Post
by snasui »
Xcelvba wrote: ↑Fri Dec 09, 2022 9:03 am
30 คือ จำนวนชุดนึงมี 30 แถวใช่ไหมครับ

ใช่ครับ
Xcelvba wrote: ↑Fri Dec 09, 2022 9:03 am
-1 คืออะไรครับ
คือตัวเลขที่จะต้องไปหักออกจาก B5 โดยคำนึงถึงว่าหาก
B5 เป็น 1 แล้วคำตอบของ (30*($B$5-1))+ROWS(D$7:D7) มีค่าเป็น 1 เสมอนั่นคือ
30*(
1-1)+ROWS(D$7:D7)
Xcelvba wrote: ↑Fri Dec 09, 2022 9:03 am
Form controls กับ Active X Controls ต่างกันอย่างไรครับ
ActiveX Control สามารถใช้ VBA เข้าไปควบคุมได้อย่างครอบคลุมมากกว่าครับ
-
Xcelvba
- Bronze

- Posts: 344
- Joined: Thu Feb 03, 2022 9:04 am
- Excel Ver: 2019
#10
Post
by Xcelvba »

ขอบคุณมากๆ ครับ