Select Page

มีคนถามผมมาว่าเค้ามีข้อมูลใน Excel ที่ต้อง Print ออกมาจำนวนมาก แต่มีปัญหาในการจัดหน้าไม่รู้จะทำยังไงให้ง่าย เนื่องจากว่าจุดแบ่งหน้าในแต่ละหน้าก็ดันไปไม่เท่ากัน (แต่ละหน้าจำนวนข้อมูลไม่เท่ากัน) การจะมานั่งแบ่งหน้า insert page break เอง ก็จะเสียเวลามากๆ

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

ข้อมูลต้นฉบับ

ดาวน์โหลดไฟล์ได้ที่นี่

ผมมีข้อมูลอยู่จำนวนมาก (5000 บรรทัด) ที่เรียงตามคอลัมน์ร้านค้า (StoreKey) แล้วต้องการจะ print ออกมาเป็น pdf

ซึ่งความยากก็คือ เราต้องการแบ่งหน้าทุกครั้งที่มีขึ้นร้านค้าใหม่เสมอ (แต่ถ้าร้านนึงขายเยอะมาก ก็อาจมีหลายหน้าได้นะ)

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 1

ตั้งค่าเบื้องต้น

ขั้นตอนแรกที่ผมจะทำก็คือ สั่งตั้งค่าการ print ให้ความกว้าง fit พอดีกับกระดาษ 1 หน้า และสั่งให้มัน repeat การ print หัวตารางบรรทัดที่ 1 เสมอ ซึ่งส่วนนี้ทำได้ง่ายมากๆ

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 2

กำหนดจุดที่จะแบ่งหน้า Page Break

ก่อนอื่น เราจะเขียนสูตรขึ้นมา เพื่อให้ mark จุดที่ต้องการจะแบ่งหน้าไว้ก่อน

ในช่อง I2 (ถัดจากข้อมูล) ผมจะใช้สูตร IF เช็คว่าเลข StoreKey มีการเปลี่ยนหรือไม่? ดังนี้

=IF(E2<>E1,"y","n")

จากนั้น Copy ยาวลงไปข้างล่าง เราก็จะได้จุดที่จะทำการ Insert Page Break แล้ว ลอง scroll ลงไปดูข้างล่างได้

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 3

ทำยังไงให้ Insert Page Break ในจุดที่ต้องการ?

มาถึงตรงนี้เราจะต้องใช้ Code VBA เล็กๆ น้อยๆ ในการช่วยแล้ว โดยเราจะใส่ Code นี้ลงไปใน Module ของ VBA

โดยอย่าลืมเปิด Ribbon Developer ขึ้นมาก่อน (อยู่ใน Excel Option->Customize Ribbon)

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 4

จากนั้น กด Alt+F11 เพื่อเข้าสู่ VB Editor แล้วคลิ๊กขวา Insert Module ตามรูป

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 5

แล้ว Paste Code นี้ลงไป เพื่อให้มันวน Loop ใส่ Page Break ในจุดที่เรา Mark ตัว y เอาไว้


Sub InsertBreak_At_Mark()
Dim i As Long
Dim firstAddress As String
Application.ScreenUpdating = False


With Range(ActiveCell, ActiveCell.End(xlDown))
        Set c = .Find("y", LookIn:=xlValues)
        If Not c Is Nothing Then
        firstAddress = c.Address
            Do
                'MsgBox (c.Address)
                c.PageBreak = xlPageBreakManual
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And firstAddress <> c.Address
        End If
    End With

Application.ScreenUpdating = True
End Sub

จากนั้นกลับไปยังหน้า Excel แล้วให้เลือกคอลัมน์ I ที่เราเขียน y/n ไว้ แล้ว Run Code ตามรูป

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 6

เท่านี้มันก็จะกำหนดพื้นที่ Mark ให้เรียบร้อยแล้ว ลองกด Page Break Preview ดูได้

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 7

เก็บตกจุด Break เกิน ที่บรรทัดที่ 2

อย่างไรก็ตามตอนนี้สุตรเราดัน Mark ว่าจะ Break ที่บรรทัดที่ 2 ด้วย ซึ่งไม่ Makesense ดังนั้นถ้าเราแก้ค่าหรือแก้สูตรให้บรรทัดที่ 2 เป็น n ไปก่อนได้ก็จะดีกว่า หรือจะไป remove page break เองก็ได้เช่นกัน โดยเลือกบรรทัดที่ 2 ไว้ แล้ว Remove Page break ดังรูป

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 8

ลอง Print / Save PDF ดู

วิธีจัดหน้า Print ข้อมูลเยอะๆ ใน Excel ให้แบ่งหน้า Page Break ตามต้องการ 9

จะเห็นว่าได้ผลลัธ์ตามต้องการครับ

แชร์ความรู้ให้เพื่อนๆ ของคุณ
  • 1
  •  
  •  
  •  
  •