เพื่อมุ่งให้เกิดคุณภาพจากการอบรมสูงสุด Excel Expert Training ให้การอบรม Excel กลุ่มเล็กๆ ไม่เกิน 6 คนทุกคนสามารถเรียนรู้ Excel อย่างใกล้ชิด จะมาคนเดียวหรือมาเป็นกลุ่มแล้วนัดวันอบรมแบบส่วนตัวก็ได้
ผู้เข้าอบรมทุกคนสามารถติดตามเนื้อหาที่อบรมได้อย่างชัดเจนจากจอภาพด้านหน้าของตัวเอง
-

Originally Posted by
NEO889
แนะนำสร้างฐานข้อมูลใหม่ ดูที่ Sheet1 แล้ใช้Pivot Table กับสูตร Vlookup ดูสิครับแล้วทำการแก้ไขตกแต่งนิดหน่อยก็ได้แล้ว ไม่แน่ใจว่าตรงตามที่ต้องการหรือเปล่า ดูไฟล์แนบครับ
Download Now
พอคลิก Download Now แล้วจะปรากฏหน้าเว็บเพจใหม่ ให้เลื่อนลงมาด้านล่าง จะเจอตัวนับถอยหลัง รอให้ตัวนับถอยหลังนับจนเสร็จก่อน
ทำไมต้องทำ link จากเว็บอื่นด้วยครับ ผมลองคลิกไป doanload มาแล้วไม่เห็นมีข้อมูลอะไรเลย ที่สงสัยอีกอย่างก็คือคำตอบที่ตอบมาว่าให้ใช้ Pivot/VLookup ไม่น่าจะเกี่ยวข้องกันกับกระทู้นี้เลยครับ :???:
-
ผมลองทำ โดยนำไฟล์แนบไฟล์แรกของคุณ p_d มาทำเป็นตัวอย่าง
โดยไม่ได้ไปแก้ไขส่วนข้อมูลเดิมทั้งสิ้น เพียงแต่ขยับไปวางไว้ที่คอลัมน์ N:S ส่วนคอลัมน์ A:F จะเป็นส่วนที่จะ Print
ผมกำหนดให้เซลล์ A11 คลิกเลือกรหัส vendor แล้วจะแสดงรายการของแต่ละ vendor ออกมาโดยอัตโนมัติ จากช่วงข้อมูลที่ตั้งชื่อแบบ dynamic ว่า vendor
เสร็จแล้วก็กำหนด Print_Area ให้เป็น dynamic ด้วยเช่นกัน
เพียงแค่เลือกรหัสของแต่ละ vendor ก็สั่ง Print ได้ทันที โดยไม่ต้องเขียน macro
กรณีที่ได้ข้อมูลมาใหม่ ก็ให้วางทับในพื้นที่คอลัมน์ N:S เหมือนเดิม ถ้าจำนวนข้อมูลมากกว่าข้อมูลเดิม ก็ต้องลากสูตรในคอลัมน์ M ลงไปให้เท่ากับจำนวนข้อมูล นอกนั้น (คิดว่า)ก็ไม่ต้องแก้อะไรครับ
ดูคำอธิบายรายละเอียดในไฟล์แนบครับ
-
เพิ่งเห็นว่าแฟ้มแรกที่แนบมีตัวอย่างที่ต้องการแบ่งพิมพ์แยกหน้า ก่อนอื่นให้แก้ไขเซลล์ที่ merge ให้เป็นเซลล์ปกติก่อน
จากนั้นตั้งชื่อ Range Name > NumVendor
=SUMPRODUCT(ISNUMBER(FIND("Vendor",'AP PAYMENT200908_A'!$A$1:$A$20000))*1)
เพื่อนับจำนวน Vendor โดยผมเผื่อให้นับในพืนที่ถึง row 20000
แล้วใช้รหัสต่อไปนี้
Code:
Sub SetMyPrint()
ActiveWorkbook.Save
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
ActiveSheet.PageSetup.PrintArea = Selection.Address
Range("A1").Select
With ActiveSheet.PageSetup
.PrintTitleRows = "$1:$9"
.PrintTitleColumns = ""
End With
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
For i = 1 To [numVendor] - 1
Selection.End(xlDown).Select
Selection.End(xlDown).Select
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Next i
Range("A1").Select
End Sub
รหัสนี้ส่วนใหญ่ได้จากการบันทึก Macro จะใชัได้กรณีที่หัวตารางเป็นตามที่ยกมา และในส่วนของใต้ชื่อและที่อยู่ของ Vendor ใน Column A เป็นช่องว่างไปตลอดครับ
-
ลองอีกวิธีครับ
g11 = IF(LEFT(A11,6)="Vendor",G10+1,G10)
Copy g11 ลงไป
h9 = MAX(G:G)
แล้วใช้ Code ทำ AutoFilter แบบวนลูป
Code:
Sub PrintByVendor()
Range("G9:G10").AutoFilter Field:=1, Criteria1:="1"
For i = 1 To Range("lastVendor").Value
Range("G9:G10").AutoFilter Field:=1, Criteria1:=i
ActiveWindow.SelectedSheets.PrintPreview
Next i
ActiveSheet.AutoFilterMode = False
End Sub
จาก Attached File "Print each Vendor"ทำแบบ Print Preview
-
ขอบคุณทุกท่านมากนะคะที่ช่วยให้คำแนะนำและวิธีการทำทุก ๆ วิธี จะนำไปใช้ดูคะ
Similar Threads
-
By narit in forum Excel Expert Forum Library 2012 - 2007
Replies: 1
Last Post: 13 Nov 2009, 10:31
-
By nink2527 in forum Excel Expert Forum Library 2012 - 2007
Replies: 5
Last Post: 10 Nov 2008, 22:33
-
By noong101 in forum Excel Expert Forum Library 2012 - 2007
Replies: 3
Last Post: 2 May 2008, 13:40
-
By Nattawee in forum Excel Expert Forum Library 2012 - 2007
Replies: 3
Last Post: 20 Mar 2008, 10:21
-
By stromrider in forum Excel Expert Forum Library 2012 - 2007
Replies: 1
Last Post: 13 Feb 2008, 10:14
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules