snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#1
Post
by kikuaemii » Mon Feb 27, 2012 9:16 pm
สวัสดีคะ
วันนี้มีปัญหามีปรึกษาคะ คือว่าเนื่องจากใส่สูตรผิดทำให้รันค่าไปเรื่อยๆจน row 30,000 กว่า แล้วยิ่งลบก้อยิ่งเพิ่มคะ จนตอนนี้ 65,000กว่าแล้ว ไม่ทราบว่าจะแก้ยังไงดีคะ
ขอบคุณล่วงหน้านะคะ
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Mon Feb 27, 2012 9:56 pm
แนบไฟล์ตัวอย่างที่เป็นปัญหามาดูกันครับ จะได้ทราบว่าทำอะไรไว้บ้าง จะได้แก้ได้ถูกจุดครับ
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#3
Post
by kikuaemii » Mon Feb 27, 2012 10:37 pm
คือไฟล์ที่จะแนบมันใหญ่กว่า 300 kb แล้วคะ เพราะว่าตอนแรกใส่โค้ดผิดมันเลยรันตัวอักษร C ไปจนถึง row ที่ 30,000 คะ แต่ตอนนี้ลบตัว Cหมดแล้วแต่ว่า row ไม่หายคะ
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Mon Feb 27, 2012 10:54 pm
ไฟล์
ตัวอย่าง ไม่ควรจะใหญ่ขนาดนั้นครับ ลบเรื่องอื่น ๆ ที่ไม่เกี่ยวข้องออกให้หมดครับ เอาเฉพาะที่เป็นปัญหา ถ้าเป็น Code ก็ช่วยระบุว่าอยู่ใน Module ใด ชื่อ Procedure ว่าอะไร จะได้เข้าถึงข้อมูลได้โดยไวครับ
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#5
Post
by kikuaemii » Mon Feb 27, 2012 11:05 pm
ตอนนี้แก้ได้แล้วคะอาจารย์ หนูขอปรึกษาเรื่องโค้ดนิดนึงนะคะ
คือว่าหนูจะ ดาต้าเบส ให้ออกมาเป็นรายงานสรุปคะ โดยใช้โค้ด VBA
โดยที่หนูอยากให้รายงานนี้สามารถเลือกได้ว่า จะออกรายงานของพนักงานขายคนไหนและ เดือนไหนบ้าง หรือว่าทั้งปี
หนูแนบไฟล์มาแล้วคะ
Attachments
โปรแกรมค่าคอมมิชชั่น.xlsm
(122.35 KiB) Downloaded 5 times
โปรแกรมค่าคอมมิชชั่น.xlsm
(125.84 KiB) Downloaded 1 time
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Mon Feb 27, 2012 11:15 pm
ปัจจุบันเขียน Code ในการดึงข้อมูลมาทำรายงานแล้วยังครับ อยู่ใน Module ใด Procedure ใด และติดปัญหาใด จะได้ช่วยทดสอบได้ สำหรับ VBA แล้ว กรณีที่ยังไม่เขียนให้เขียนมาก่อนเสมอ ติดปัญหาแล้วค่อยมาถามกันได้เรื่อย ๆ ครับ
สำหรับการดึงข้อมูลมาทำรายงาน สามารถใช้ความสามารถของ Advanced Filter มาช่วยได้โดยลองบันทึก Macro การทำ Advanced Filter และนำ Code มาปรับใช้ครับ ส่วน Database หัว Field ควรจะมีเพียงทัดเดียวเท่านั้น เพื่อจะนำไปใช้กับ Advanced Filter หรือการสรุปเป็นรายงานต่าง ๆ ด้วย PivotTable ได้ครับ
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#7
Post
by kikuaemii » Mon Feb 27, 2012 11:22 pm
หนูเขียนโค้ดแล้วคะแต่ว่าพอคำนวณแล้วมันได้ 0.00 บาท ตลอดเลย ไม่ทราบว่าผิดตรงไหน มีโมดูลเดียวคะ
Attachments
โปรแกรมค่าคอมมิชชั่น.xlsm
(125.84 KiB) Downloaded 4 times
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Mon Feb 27, 2012 11:45 pm
ท่าทางจะยาวครับ ช่วยบอกวิธีทดสอบและการคีย์ข้อมูลทดสอบมาให้ด้วยครับ จะได้เข้าถึงปัญหาได้โดยไวครับ
คลิกปุ่มไหน กรอกค่าใดบ้าง คำตอบที่ถูกต้องจะแสดงที่ไหนเป็นค่าใด ผมลองคลิกปุ่มรายงานแล้วไม่มีพนักงานและเดือนให้เลือกครับ
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#9
Post
by kikuaemii » Tue Feb 28, 2012 12:09 am
เริ่มจากเข้าหน้า REPORT คะ กดปุ่ม "แสดงรายงาน" จะมีข้อมูลจาก comboBox ให้เลือก2 ข้อมูลคะ คือ ให้เลือก (ในที่นี้หนูคิดว่ามันคือเงื่อนไข) คือ1.เลือกพนักงาน 2.เลือกเดือนที่ต้องการคำนวณ
พอได้ข้อมูลที่ต้องการกดปุ่ม Report เพื่อให้ข้อมูลที่เลือก ไปแสดงในหน้า REPORT คะ
[ ที่คิดไว้คร่าวๆ คือ ให้วนหาข้อมูลพนักงานจาก คอลัม sale_name_col เมื่อเจอแล้วให้ตรวจสอบคอลัม เดือน date_col ว่าตรงกับที่เราเลือกไว้ ถ้าตรงทั้ง 2 เงื่อนไข ก็ให้นำข้อมูลจาก คอลัม ยอดคอม com_sale_col มาคำนวณ เก็บไว้ในตัวแปรชื่อ com_sale วนจนกว่าจะเจอ "" แล้วนำค่าตัวแปรที่ได้ มาแสดงในหน้า report คะ ]
ขอโทษที่ส่งข้อมูลมาไม่ครบแต่แรกคะ
Attachments
โปรแกรมค่าคอมมิชชั่น.xlsm
(131.68 KiB) Downloaded 14 times
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#10
Post
by snasui » Tue Feb 28, 2012 7:36 am
ช่องพนักงานตามภาพด้านล่างไม่สามารถ Match กันได้กับชื่อพนักงานในคอลัมน์ F ของชีท COMMISSIONDB ครับ
หากนำชื่อพนักงานมาแสดงในช่องรายงานแล้วลองเปลี่ยน Code เดิมเป็นตามด้านล่างแล้วทดสอบดูครับ
Code: Select all
Sub netCom()
Dim rSource As Range
Dim rTarget As Range
Dim r As Range
With Sheets("COMMISSIONDB")
Set rSource = .Range("F3", .Range("F" & Rows.Count).End(xlUp))
End With
For Each r In rSource
Set rTarget = Sheets("Report").Range("B" & Rows.Count).End(xlUp) _
.Offset(1, 0)
If r = FrmReport.cnnSale.Text And r.Offset(0, -4) = FrmReport.cbbMonth.Text Then
rTarget = r.Offset(0, -4)
rTarget.Offset(0, 1) = r
rTarget.Offset(0, 4) = r.Offset(0, 3)
End If
Next r
End Sub
Attachments
Emp.png (5.52 KiB) Viewed 54 times
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#11
Post
by kikuaemii » Tue Feb 28, 2012 6:31 pm
เยี่ยมเลยคะอาจารย์ ขอบคุณนะคะ
อันนี้หนูขอความรู้เพิ่มเติมสักนิดนะคะ ถ้าเกิดว่าหนูจะทำแบบว่าให้สามารถเลือกให้แสดงยอดสรุปของ1เดือน แต่ว่าพนักงานหลายคน หรือ พนักงาน 1 คนแต่ว่าแสดงหลายเดือน หนูต้องเปลี่ยน combobox เป็น listbox แบบ 2 แถว หรือว่ายังไงดีคะ คือ หนูไม่เก่งอัลกอลิทึ่ม เวลาทำเงื่อนไขแบบซับซ้อน หนูจะมึนๆ อยากขอคำปรึกษาคะ
snasui
Site Admin
Posts: 31191 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#12
Post
by snasui » Tue Feb 28, 2012 7:41 pm
ตอบให้แบบกว้าง ๆ นะครับ การทำเช่นที่ถามมาคงต้องทำ Form ให้เลือกครับว่าต้องการช่วงเวลาไหน จะดูพนักงานทุกคนหรือคนใดคนหนึ่ง หรือ เลือกมาเฉพาะบางคน สามารถทำ Option, ListBox, TextBox ก็แล้วแต่จะออกแบบครับ ช่วงเวลาก็อาจจะให้เลือกได้จากไหนถึงไหน คือทำเป็น 2 ListBox ให้เลือกเป็น From และ To เช่นนี้เป็นต้น
เนื่องจากว่า Excel มีความสามารถด้านการแสดงรายงานให้เลือกใช้อยู่แล้วครับ นั่นคือ PivotTable แทนที่จะเสียเวลาเขียนเองน่าจะลองใช้ PivotTable ดูก่อนครับ
kikuaemii
Member
Posts: 7 Joined: Sat Feb 25, 2012 12:30 am
#13
Post
by kikuaemii » Tue Feb 28, 2012 7:57 pm
ได้ไอเดียไปพัฒนางานต่อแล้ว ขอบคุณมากมายนะคะอาจารย์