: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

ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#1

Post by kitokids »

จุดประสงค์ของผมคือต้องการ hide row ที่ว่างทั้งหมดในช่วงที่กำหนด

ทีนี้ผมลอง search สูตรจาก Google ดูแล้วนำปรับปรุงนิดหน่อย ปรากฎว่ามันจะ hide เฉพาะ row ที่มีเซลล์เป็นค่าว่างจริงๆเท่านั้น

พวก row ที่ตัวเซลล์ไม่มีค่า แต่มีสูตรอยู่ มันจะไม่ hide ให้

ผมรบกวนขอวิธีที่จะสามารถ hide row ที่ในเซลล์ไม่มีค่าแต่มีสูตร ด้วยนะครับ

นี่เป็นสูตรที่ผมพูดถึงนะครับ

Code: Select all

Public Sub HideBlankRows1()
Dim i As Long

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
        Range("K1:L15").Select
For i = Selection.Rows.Count To 1 Step -1
    If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then
Selection.Rows(i).EntireRow.Hidden = True
    End If
Next i

.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
ขอบคุณล่วงหน้านะครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#2

Post by snasui »

:D ลองดูตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub test0()
   Dim r As Range
   For Each r In Range("k1:k15")
        If r = "" Then
            r.EntireRow.Hidden = True
        End If
   Next r
End Sub
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#3

Post by kitokids »

snasui wrote::D ลองดูตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub test0()
   Dim r As Range
   For Each r In Range("k1:k15")
        If r = "" Then
            r.EntireRow.Hidden = True
        End If
   Next r
End Sub

ได้แล้วครับ ขอบคุณมากๆเลยนะครับ :thup:
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#4

Post by kitokids »

ขอรบกวนอีกทีนะครับ

เกิดการเข้าใจผิดนิดหน่อยครับ สูตรที่ให้คุณ snasui ให้มาตอนแรกนั้นมันใช้ไม่ได้อ่ะครับ รันแล้วไม่เกิดอะไรขึ้น

ผมเลยลองแก้สูตรบรรทัดนี้ดู

if r = "" Then ผมแก้เป็น if r = 0 Then

ปรากฎว่ามันสามารถใช้ได้ครับ แต่มันมีปัญหาคือ สมมติว่าเซลล์ A1 มีค่าอยู่ แต่เซลล์ B1 ไม่มีค่า (แต่มีสูตร) มันจะทำการซ่อน row นั้นไปเลยอ่ะครับ

แต่สิ่งที่ผมต้องการคือ ถึงแม้ว่าเซลล์ A1 มีค่าอยู่ แต่เซลล์ B1 ไม่มีค่า row นั้นก็จะไม่ถูกซ่อนอ่ะครับ

ประมาณนี้อ่ะครับ

Image
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#5

Post by snasui »

:D ก่อนที่จะตอบว่าได้หรือไม่ได้ให้ทดลองก่อนครับ สำหรับที่ถามมาใหม่นั้น ให้แนบไฟล์ตัวอย่างพร้อม Code ที่ได้ปรับปรุงเองแล้วมาด้วยครับ
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#6

Post by kitokids »

ขอโทษด้วยนะครับที่ลืมแนบ code มาด้วย

สำหรับไฟล์ตัวอย่าง ผมได้ทำปุ่มแล้วลิงค์กับ Macro ไว้นะครับ จะได้สะดวกในการดู

ปุ่มสีแดง = module1 เป็น code ที่คุณ snasui ให้มา
ปุ่มสีเหลือง = module2 เป็น code ที่ผมได้ทำการแก้
ปุ่มสีฟ้า = module3 เป็นปุ่มไว้สำหรับ unhide (จะได้สะดวกในการลอง code)


P.S. ผมเพิ่งเริ่มหัดเขียน VBA นะครับ เลยยังไม่ค่อยรู้เรื่อง code เท่าไหร่ เลยแก้ไปนิดๆหน่อยๆตามที่เข้าใจ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#7

Post by snasui »

kitokids wrote:เกิดการเข้าใจผิดนิดหน่อยครับ สูตรที่ให้คุณ snasui ให้มาตอนแรกนั้นมันใช้ไม่ได้อ่ะครับ รันแล้วไม่เกิดอะไรขึ้น
:D เนื่องจากมันไม่มีค่าว่าง ค่าตามตัวอย่างเป็น 0 แล้วใช้การซ่อนค่า 0 จะนำไปเทียบกับค่าว่างเช่นที่ผมเขียนมาไม่ได้ ต้องประยุกต์ให้เป็นไปตามค่าที่แท้จริง

ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Public Sub FixCode()
Dim r As Range
   For Each r In Range("A1:A10")
        If Application.Sum(r.Resize(, 2)) = 0 Then
            r.EntireRow.Hidden = True
        End If
   Next r
End Sub
ในฟอรัมถามตอบขอให้งดใช้ภาษาแชทด้วยครับ คำว่าอ่ะไม่จำเป็นต้องใช้ถือเป็นภาษาปากหรือภาษาพูดครับ
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#8

Post by kitokids »

Code: Select all

Public Sub FixCode()
Dim r As Range
   For Each r In Range("A1:A10")
        If Application.Sum(r.Resize(, 2)) = 0 Then
            r.EntireRow.Hidden = True
        End If
   Next r
End Sub
รบกวนถามอีกนิดนึงครับ

สมมติเปลี่ยนจากตัวเลขเป็น ข้อความ (String) ต้องประกาศตัวแปรหรือแก้สูตรตรงไหนครับ ?

เพราะตอนนี้ถ้าเปลี่ยนจากตัวเลขเป็นข้อความ (โดยที่ row นั้นมีแต่เซลล์ที่เป็นข้อความ ไม่มีเซลล์ที่เป็นตัวเลขเลย)มันจะทำการ hide row นั้นไปเลยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#9

Post by snasui »

:D ลองปรับมาเองดูก่อน ได้เท่าไรก็เท่านั้น การใช้ VBA จำเป็นต้องปรับเองได้บ้างครับ
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#10

Post by kitokids »

Code: Select all

Public Sub FixCode()
Dim r As Range
Dim a As String
    Set r = .Range("A1:A10")
    
   For Each a In r
        If Application.Sum(a.Resize(, 3)) = 0 Then
            a.EntireRow.Hidden = True
        End If
   Next a
End Sub
ตามที่ผมคิดจะประมาณนี้นะครับ

แต่ผมยังงงเรื่องการประกาศตัวแปรอยู่ครับ

แก้ทีไรมันจะฟ้อง error ที่บรรทัดแรกตลอดเลย

ลองเปลี่ยนจาก public เป็น private แล้วก็ยัง error อยู่ดี

รบกวนช่วยอธิบายด้วยนะครับ :)
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#11

Post by snasui »

:D ลองปรับ Code เป็นด้านล่างครับ

Code: Select all

Public Sub FixCode()
Dim r As Range
   For Each r In Range("A1:A10")
        If Application.Countif(r.Resize(, 3),0) = 3 Then
            r.EntireRow.Hidden = True
        End If
   Next r
End Sub
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#12

Post by kitokids »

ขอบคุณมากๆเลยนะครับ

สงสัยจบจากงานนี้ผมคงต้องไปซื้อหนังสือ VBA มาอ่านอย่างจริงจังสักที ;)

ไว้คราวหน้าถ้าผมมีอะไรสงสัยผมคงต้องขอรบกวนอีกทีนะครับ

ขอบคุณอีกครั้งนะครับ :thup:
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#13

Post by kitokids »

Code: Select all

If Application.Countif(r.Resize(, 3),0) = 3 Then

รบกวนอาจารย์ช่วยอธิบายบรรทัดนี้หน่อยนะครับ

ผมไม่ค่อยเข้าใจค่าในวงเล็บครับ :?:
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#14

Post by snasui »

:D r.Resize(, 3) หมายถึงให้ขยาย r ไปด้านขวา 3 เซลล์ ยกตัวอย่างเช่น หาก r คือ A1 ก็จะกลายเป็น A1:C1 ส่วน Countif เป็นฟังก์ชั่นของ Excel จำเป็นต้องศึกษาเข้าใจ เนื่องจากเป็นฟังก์ชั่นพื้นฐานที่ใช้บ่อย สามารถศึกษาได้ที่นี่ครับ http://office.microsoft.com/th-th/excel ... aspx?CTT=1
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#15

Post by kitokids »

อาจารย์ครับ ผมมีเรื่องรบกวนถามอีกแล้วครับ :D

พอดีผมลองนำสูตรที่ได้ไปใส่ไว้ในไฟล์ที่ผมต้องการจะใช้งานแล้ว แต่มันว่ามันไม่สามารถใช้งานได้

รายละเอียดไฟล์ที่ผมทำมีดังนี้ครับ

คือผมจะมีไฟล์นึงคือไฟล์ Compare TSR ไว้สำหรับเป็นตัว Template ที่จะทำการลิงค์ข้อมูลจากไฟล์ TSR_Old และ ไฟล์ TSR_New มาใช้งาน

โดยในไฟล์ Compare TSR ผมได้ทำการใส่สูตรสำหรับเปรียบเทียบข้อมูลในไฟล์ TSR_Old และ ไฟล์ TSR_New เพื่อเปรียบเทียบว่า 2 ไฟล์นี้มีข้อมูลแตกต่างกันอย่างไร

ในไฟล์ Compare TSR ผมได้ทำการใส่สูตรไว้ถึง row 200 เพื่อว่าในอนาคตอาจจะมีข้อมูลเพิ่มขึ้นมา แต่ในปัจจุบันมีการใช้ข้อมูลถึงแค่ประมาณ 115 row

ทีนี้พอผมใส่สูตรทุกอย่างเสร็จแล้วทั้งสูตรการเปรียบเทียบและสูตรที่จะซ่อน row ที่ว่าง (Macro) แต่ปรากฎว่ามันสามารถซ่อน row ได้แค่ตั้งแต่ row 121 - row 200

row ก่อนหน้านั้นมันจะไม่ทำการซ่อน

ผมไม่รู้ว่าสาเหตุมันมาจากการที่ผมทำการลิงค์ข้อมูลข้ามไฟล์รึเปล่า :?:

รบกวนอาจารย์ช่วยชี้แนะด้วยครับ ขอบคุณครับ

ป.ล. ถ้าผมอธิบายไม่เข้าใจ ขอโทษมา ณ ที่นี้ด้วยนะครับ ผมเรียบเรียงคำพูดไม่ค่อยเก่ง
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#16

Post by snasui »

:D สาเหตุเพราะผลลัพธ์ของสูตรเป็น 0 แต่มีการซ่อนค่า 0 เอาไว้ทำให้เห็นเป็นค่าว่าง เมื่อเราต้องการซ่อนเฉพาะค่าว่างเซลล์ที่มีค่าเป็น 0 จึงไม่ถูกซ่อนไปด้วย

ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Public Sub HideBlankRow()
    Dim r As Range
    For Each r In Range("A5:A199")
        If Application.CountIf(r.Resize(, 4), "") _
            + Application.CountIf(r.Resize(, 4), 0) = 4 Then
            r.EntireRow.Hidden = True
        End If
    Next r
End Sub
การทำงานกับ Excel เราจะยังไม่จัด Format ใด ๆ จนกว่าจะทำงานให้เสร็จเรียบร้อยแล้ว เรื่องตกแต่งเพื่อความสวยงามจะทำทีหลังสุด ไม่ว่าจะเป็นเรื่องใส่สี ตีเส้น การซ่อนค่า 0 ฯลฯ
kitokids
Member
Member
Posts: 16
Joined: Wed Jul 10, 2013 2:18 pm

Re: ขอถามเรื่องการซ่อน row ที่ว่างโดยใช้ VBA หน่อยครับ

#17

Post by kitokids »

กระจ่างแจ้งแล้วครับอาจารย์

ขอบคุณอีกครั้งนะครับสำหรับการช่วยเหลือ :D
Post Reply