snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน 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] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
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: 31176 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: 31176 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
โดยที่หนูอยากให้รายงานนี้สามารถเลือกได้ว่า จะออกรายงานของพนักงานขายคนไหนและ เดือนไหนบ้าง หรือว่าทั้งปี
หนูแนบไฟล์มาแล้วคะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 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 บาท ตลอดเลย ไม่ทราบว่าผิดตรงไหน มีโมดูลเดียวคะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 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 คะ ]
ขอโทษที่ส่งข้อมูลมาไม่ครบแต่แรกคะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 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
You do not have the required permissions to view the files attached to this post.
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: 31176 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
ได้ไอเดียไปพัฒนางานต่อแล้ว ขอบคุณมากมายนะคะอาจารย์