: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

จัดทำรายงานลักษณะหนังสือเวียน

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

จัดทำรายงานลักษณะหนังสือเวียน

#1

Post by palmy »

เรียน อาจารย์ครับ
ผมได้ลองศึกษาและนำข้อมูลใน Forum ของอาจารย์ไปลองเขียน Code VB
ทำรายงานเพื่อพิมพ์สรุปข้อมูลรายได้ลักษณะเป็นหนังสือเวียน (ตามไฟล์แนบ)
แต่ทั้งนี้ข้อมูลพนักงานจะเยอะมาก หากมีข้อมูลมากกว่า 1000 ราย
การประมวลผลจะช้ามาก ผมเลยอยากให้โปรแกรมสามารถเลือกพิมพ์
รายเขต หรือรายกลุ่มได้ ตามที่เราเลือก (จากSheet Invoice)
แต่ไม่ทราบจะเขียน Code ยังงัย รบกวนอาจารย์ช่วยดูและให้คำแนะนำเขียน
Code ให้ศึกษาด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#2

Post by snasui »

:D ลองสร้าง Database ไว้ที่ชีทอื่นแล้วบันทึก Macro โดยการใช้ Advanced Filter เพื่อนำเฉพาะข้อมูลที่ต้องการมาไว้ที่ชีท Invoice จากนั้นค่อย Run Code ตามปกติครับ
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#3

Post by palmy »

ผมลองทำวิธี Advanced Filter โดยนำข้อมูลกรองออกไปใส่ Sheet ใหม่ มันฟ้องว่า "คุณสามารถคัดลอกเฉพาะข้อมูลที่ถูกกรองเท่านั้นไปสู่แผ่นงานที่ใช้งานอยู่" คือกรองข้อมูลไปอีก Sheet ไม่ได้ครับ แต่ลองใช้การกรองขั้นสูง ในSheet เดียวกัน ก็สามารถทำได้ หรือผมใช้การกรองไม่ถูกต้องครับ
รบกวนอาจารย์ช่วยแนะนำด้วยครับ พอจะทำเป็นรูปบรรยาย + เขียนโค๊ตมาโครแนะนำได้หรือเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#4

Post by snasui »

:D การเขียน Macro จำเป็นต้องเขียนมาเองครับ ติดตรงไหนค่อยถามครับ
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#5

Post by palmy »

เรียนอาจารย์ครับ
ผมเขียน Code ดังนี้ เพื่อพิมพ์หนังสือเวียน แต่ทั้งนี้ ผมได้ขยับแถว(Row)
ใน Sheet Name ลง เริ่มตั้งข้อมูลตั้งแต่แถวที่ 4 ลงไป(หัวCollum)
ทำให้การพิมพ์ข้อมูลรายการไม่ครบถ้วน ข้อมูลรายการ Sheet Report หายเกือบหมด ลองปรับ Range("B" & i)
เป็น Range("B4" & i) รายการใน Sheet Report เริ่มจากแถวข้อมูลที่ได้ 5 ได้ถูกต้อง แต่
รายการข้อมูลพนักงานช่วงหลังลำดับที่ 100 หายไป ขอคำแนะนำด้วยครับ

Public Sub EnvelopePaste()
Dim rSource As Range
Dim rTarget As Range
Dim i As Long, j As Long
Application.ScreenUpdating = False
With Sheets("Report")
.Range("A:O").UnMerge
.Range("A:O").ClearContents
End With
Set rSource = Sheets("Invoice").Range("A1:G8")
j = 1
For i = 1 To 10000 Step 1
Sheets("Invoice").Range("H1") = i
If Sheets("NAME").Range("B" & i) = "" Then Exit For
With Sheets("Report")
Set rTarget = .Range(.Range("A" & j), .Range("G" & j + 7))
End With
rSource.Copy
rTarget.PasteSpecial xlPasteValues
rTarget.PasteSpecial xlPasteFormats
j = j + 8
Next i
Application.CutCopyMode = False
MsgBox "Finish"
Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#6

Post by snasui »

:D ช่วยปรับ Code ให้แสดงเป็น Code โดยดูตัวอย่างจากกระทู้นี้ เพื่อสะดวกในการอ่านและ Copy ไปทดสอบครับ viewtopic.php?f=3&t=1187
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#7

Post by palmy »

ขอโทษด้วยครับอาจารย์ ลง Code ใหม่แล้วครับ

Code: Select all

Public Sub EnvelopePaste()
Dim rSource As Range
Dim rTarget As Range
Dim i As Long, j As Long
Application.ScreenUpdating = False
With Sheets("Report")
    .Range("A:O").UnMerge
    .Range("A:O").ClearContents
End With
Set rSource = Sheets("Invoice").Range("A1:G8")
j = 1
For i = 1 To 10000 Step 1
    Sheets("Invoice").Range("H1") = i
    If Sheets("NAME").[color=#0000FF]Range("B" & i)[/color] = "" Then Exit For
    With Sheets("Report")
    Set rTarget = .Range(.Range("A" & j), .Range("G" & j + 7))
    End With
        rSource.Copy
        rTarget.PasteSpecial xlPasteValues
        rTarget.PasteSpecial xlPasteFormats
        j = j + 8
Next i
Application.CutCopyMode = False
MsgBox "Finish"
Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#8

Post by snasui »

:D จาก Code เดิม If Sheets("NAME").Range("B" & i) = "" Then Exit For ควรเป็น

If Sheets("NAME").Range("B" & 4 + i) = "" Then Exit For เพื่อจะบอกโปรแกรมว่าให้เริ่มที่บรรทัดที่ 5
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#9

Post by palmy »

เรียนอาจารย์ครับ จากการปรับแก้ไข สามารถพิมพ์รายการได้ครบถ้วนแล้วครับ :thup:
ขอเรียนถามเพิ่มเติม เคยตั้งคำถามเกี่ยยวกับการใช้สูตร Offset ดึงข้อมูล กรณี
เป็นตัวเลข อยากให้แสดงผลเป็นหลักพัน จาก 1000 เป็น 1,000
ซึ่งอาจารย์ได้เคยแนะนำให้ตั้งค่า Cell เป็นกำหนดเอง (#,##0) แต่ผมใช้ สูตร ดังนี้

Code: Select all

="ธ.ค. :  "&OFFSET(Name!$A$4,H1,21)&"  ม.ค. :  "&OFFSET(Name!$A$4,H1,22)&"  ก.พ. :  "&OFFSET(Name!$A$4,H1,23)&"  มี.ค. :  "&OFFSET(Name!$A$4,H1,24)
และดึงข้อมูลไปเป็นรายการในอีก Sheet ลองตั้งค่า Cell แบบข้างต้นไม่สามารถใช้ได้
เรียนปรึกษาเพิ่มเติมครับ ควรปรับค่าสูตรอย่างไรครับ :?:
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#10

Post by snasui »

:D ค่าที่ได้จากการเชื่อมข้อความเป็น Text ไม่ใช่ Number การกำหนด Format ในสายอักขระที่ได้จากการเชื่อมกันสามารถใช้ฟังก์ชั่น Fixed เข้าไปด้วยได้ ยกตัวอย่างเช่น

="ธ.ค. : "&Fixed(OFFSET(Name!$A$4,H1,21),0)&" ม.ค. : "&Fixed(OFFSET(Name!$A$4,H1,22),0)&" ก.พ. : "&Fixed(OFFSET(Name!$A$4,H1,23),0)&" มี.ค. : "&Fixed(OFFSET(Name!$A$4,H1,24),0)
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#11

Post by palmy »

:oops: ขอโทษครับอาจารย์ ถามไม่ละเอียดรอบคอบในคำถามเดียว จากสูตรที่อาจารย์แนะนำ ใช้ได้ครับ
แต่บังเอิญเจอกรณีมีทศนิยมด้วยครับ ต้องปรับยังไงครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#12

Post by snasui »

:D ลองเปลี่ยนเลข 0 เป็นเลขใด ๆ แล้วดูผลครับ
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#13

Post by palmy »

ปรับใช้ได้แล้วครับ ขอบคุณมากครับ
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#14

Post by palmy »

เรียนอาจารย์ครับ ผมได้ลองใช้ Validation กับรายงานข้อมูลตัวนี้ โดยศึกษาจาก http://snasui.blogspot.com/2010/07/validation.html
ขอเรียนถามอาจารย์เพิ่มเติมครับ กรณีจากตัวอย่าง Sub_Group ถ้ามีข้อมูลที่ซ้ำกัน จะต้องปรับสูตรอย่างไรครับ จากที่ใช้แบบนี้

Code: Select all

=OFFSET(Sheet1!$D$2,MATCH(Sheet1!$F2,Sheet1!$C$2:$C$7,0)-1,0,COUNTIF(Sheet1!$C$2:$C$7,Sheet1!$F2))
ปรากฎว่ารายการขึ้นทั้งหมดรวมค่าซ้ำๆกัน จะให้กรองเหลือค่าไม่ซ้ำได้หรือเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#15

Post by snasui »

:D
palmy wrote:ปรากฎว่ารายการขึ้นทั้งหมดรวมค่าซ้ำๆกัน จะให้กรองเหลือค่าไม่ซ้ำได้หรือเปล่าครับ
สูตรที่ถามมานั้นเป็นการดึงค่าไปแสดงเฉย ๆ หากต้องการนำค่าไม่ซ้ำปแสดงให้ดูสูตรในบทความตาม Link นี้ครับ http://snasui.blogspot.com/2010/05/blog-post.html
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#16

Post by palmy »

ลองศึกษาดูแล้วครับ คิดว่าน่าจะใช้การกำหนดชื่อ แล้วใช้สูตรที่ 4.การหารายการที่ไม่ซ้ำด้วยฟังค์ชัน
แล้วไปกำหนด Validation > List > F3 ดึงชื่อที่ตั้งไว้ (ไม่ทราบว่าคิดถูกหรือเปล่าครับ)
ทั้งนี้ลอง ใช้สูตรที่ใช้นับว่ามีค่าที่ไม่ซ้ำกี่ค่า คีย์ =Sumproduct(1/Countif(A1:A40000,A1:A40000)) Enter
ได้คำตอบเป็นเลข 0 ข้อมูลเยอะเกินไปหรือตั้งปรับอะไรเพิ่มไหมครับ เพราะข้อมูลซ้ำเยอะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#17

Post by snasui »

:lol: ลองทำเลยครับแล้วจะทราบได้เองว่าคิดถูกหรือไม่ถูก ส่วนที่ยังไม่ได้คำตอบลองแนบไฟล์มาดูกันครับ
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#18

Post by palmy »

กำลังดำเนินการครับ แต่ปรากฎว่า แค่ขั้นตอนแรก จากการใช้สูตร =SUMPRODUCT(1/COUNTIF(C2:C36311,C2:C36311)) เพื่อหาจำนวนค่าไม่ซ้ำ
การประมวลผลช้ามาก แทบจะกด Cell ใดๆ ต่อไม่ได้เลยครับ หลังรอพักใหญ่ คำตอบที่ได้เป็น 0 อีกครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: จัดทำรายงานลักษณะหนังสือเวียน

#19

Post by snasui »

:D หากไฟล์ตัวอย่างมาขนาดใหญ่มาก ลอง Copy รายการในคอลัมน์ C ทั้งหมดมาวางใน Notepad แล้ว Save เป็น .txt จากนั้น Zip แล้วแนบมาดูกันครับ
palmy
Member
Member
Posts: 78
Joined: Fri Nov 12, 2010 3:06 pm

Re: จัดทำรายงานลักษณะหนังสือเวียน

#20

Post by palmy »

แนบไฟล์มาแล้วครับอาจารย์
You do not have the required permissions to view the files attached to this post.
Post Reply