: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)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kio2002
Member
Member
Posts: 177
Joined: Thu Sep 20, 2012 8:40 am

ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#1

Post by kio2002 »

เรียนทุกท่านครับ
ผมต้องการลบแถวในคอลัมน์A5-A10 โดยให้หาตัวเลขที่เป็น0หรือไม่มีตัวเลขใดๆทิ้งไป โดยใช้ VBA
พอดีผมลองเขียน Code แล้ว มันลบทิ้งทั้งหมดเลยตั้งแต่A5-A10
รบกวนทุกท่านช่วยดูให้หน่อยครับ ว่าจะปรับ code ยังไงดีครับ

Code: Select all

 Sub RoundedRectangle1_Click()
    Sheets("Sheet1").Range("A5", "A10").Select
    Cells.Find ("")
    Selection.EntireRow.Delete
End Sub
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#2

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub RoundedRectangle1_Click()
    Dim rng As Range
    For Each rng In Sheets("Sheet1").Range("A5", "A10")
        If rng.Value = 0 Then
            rng.EntireRow.Delete
        End If
    Next rng
End Sub
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#3

Post by bank9597 »

"คอลัมน์A5-A10" แบบนี้ไม่เข้าใจครับ

ต้องใช้ "เซลล์" เรียก ระหว่าง A5 ถึง A10 (A5-A10) หรือ A5 และ A10 (A5,A10)
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
kio2002
Member
Member
Posts: 177
Joined: Thu Sep 20, 2012 8:40 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#4

Post by kio2002 »

ขอบคุณ คุณ Bank9597 ครับที่อธิบายให้เข้าใจ

เรียนท่านอาจารย์ Snasui ครับ
ผมลองนำ Code ไปใช้แล้วครับ สามารถใช้ได้ตามที่ต้องการครับ
แต่ถ้ากรณีค่า 0 ในเซลล์เยอะมากใน Sheet2 ระหว่าง C6,C54 มันลบไม่หมดในเวลาที่เราคลิ๊กครั้งเดียวครับ

ผมได้แนบไฟล์ตัวอย่างมาให้ด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#5

Post by DhitiBank »

หรือลองอีกแบบหนึ่งครับ

Code: Select all

Sub RoundedRectangle1_Click()
    Dim rng As Range, l As Long, i As Long
    With Sheets("Sheet2")
        l = .Range("c" & .Rows.Count).End(xlUp).Row
        For i = l To 6 Step -1
            If .Cells(i, "c").Value = 0 Then
                .Rows(i).Delete
            End If
        Next i
    End With
End Sub
kio2002
Member
Member
Posts: 177
Joined: Thu Sep 20, 2012 8:40 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#6

Post by kio2002 »

เรียน คุณDhitiBank
Code นี้ใช้ลบค่าที่เป็น 0 ใน column C ได้เหมือนกันครับ และลบค่าที่เป็น 0 ได้หมดด้วย
แต่ผมอยากจะให้ลบเฉพาะค่า 0 ที่อยู่ในเซลล์ ระหว่าง C6,C54 ครับ

ขอบคุณล่วงหน้าครับ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#7

Post by DhitiBank »

อ๋อ ผมเข้าใจผิดนึกว่าให้ลบทั้งแถว หากค่าในคอลัมน์ C เป็น 0
ถ้าอย่างนั้น ลองปรับโค้ดตรง .Row(i).Delete เป็น .Cells(i,"c").ClearContents ครับ
kio2002
Member
Member
Posts: 177
Joined: Thu Sep 20, 2012 8:40 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#8

Post by kio2002 »

DhitiBank wrote:อ๋อ ผมเข้าใจผิดนึกว่าให้ลบทั้งแถว หากค่าในคอลัมน์ C เป็น 0
ถ้าอย่างนั้น ลองปรับโค้ดตรง .Row(i).Delete เป็น .Cells(i,"c").ClearContents ครับ
เรียน คุณDhitiBankครับ
คุณDhitiBank เข้าใจถูกแล้วครับ ให้ลบแถวที่มีค่า 0 ทิ้งไปเลยครับ พอดีผมอธิบายไม่หมด
เพราะถ้าปรับใหม่เป็น
.Cells(i,"c").ClearContents
จะเป็นการ ClearContents เฉยๆ
แต่ผมอยากให้ลบแถวทิ้งเลยครับ

ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#9

Post by snasui »

kio2002 wrote:เรียน คุณDhitiBank
Code นี้ใช้ลบค่าที่เป็น 0 ใน column C ได้เหมือนกันครับ และลบค่าที่เป็น 0 ได้หมดด้วย
แต่ผมอยากจะให้ลบเฉพาะค่า 0 ที่อยู่ในเซลล์ ระหว่าง C6,C54 ครับ

ขอบคุณล่วงหน้าครับ
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub RoundedRectangle1_Click()
    Dim rng As Range
    For Each rng In Sheets("Sheet1").Range("A5", "A10")
        If rng.Value = 0 Then
            rng.value = ""  
        End If
    Next rng
    Sheets("Sheet1").Range("A5", "A10").specialcells(xlcelltypeblanks).EntireRow.Delete
End Sub
ปรับช่วงเซลล์ใน Code ด้านบนให้ตรงกับที่ต้องการใช้จริง
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#10

Post by DhitiBank »

Sheets("Sheet1").Range("A5", "A10").specialcells(xlcelltypeblanks).EntireRow.Delete

:o ขอบคุณอาจารย์ครับ specialcells ทีเดียวอยู่เลย ถ้าหากผมต้องการลบเฉพาะเซลล์นั้นๆ แล้วให้เด้งขึ้นหลังลบแล้ว ผมก็ปรับเป็น
Sheets("Sheet1").Range("A5", "A10").specialcells(xlcelltypeblanks).Delete Shift:=xlUp
ใช่หรือเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#11

Post by snasui »

DhitiBank wrote: ขอบคุณอาจารย์ครับ specialcells ทีเดียวอยู่เลย ถ้าหากผมต้องการลบเฉพาะเซลล์นั้นๆ แล้วให้เด้งขึ้นหลังลบแล้ว ผมก็ปรับเป็น
Sheets("Sheet1").Range("A5", "A10").specialcells(xlcelltypeblanks).Delete Shift:=xlUp
ใช่หรือเปล่าครับ
:thup: ใช่แล้วครับ
kio2002
Member
Member
Posts: 177
Joined: Thu Sep 20, 2012 8:40 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#12

Post by kio2002 »

Code นี้แหละครับที่ผมต้องการเลย ตรงคำถามเลย
ขอบคุณท่านอาจารย์ Snasui ครับ เว็บของอาจารย์ทำให้ผมได้มีความรู้เรื่อง Excel เยอะเลยครับ
และขอบคุณ คุณDhitiBankครับที่เข้ามาช่วยอีกแรง เดี๋ยวผมจะเอาไปใช้จริงก่อน ถ้าติดตรงไหนจะมาถามอีกครับ

แต่ Code ตามด้านล่างนี้ที่อาจารย์เขียนมาให้ก็ใช้ดีเหมือนกันนะครับ แต่พอมีค่า 0 ในเซลล์เยอะๆ มันลบแถวไม่หมดในครั้งเดียว

Code: Select all

Sub RoundedRectangle1_Click()
    Dim rng As Range
    For Each rng In Sheets("Sheet1").Range("A5", "A10")
        If rng.Value = 0 Then
            rng.EntireRow.Delete
        End If
    Next rng
End Sub
ตามที่ผมเข้าใจนะครับ ผมจะลองแปลความหมายก่อน
Dim rng As Range ก็คือให้ตัวแปร rng เป็น Range
แต่ For Each ยังไม่เข้าใจความหมาย
ส่วน rng In Sheets("Sheet1").Range("A5", "A10") ถ้ามีตัวแปร rng อยู่ใน Sheets1 ให้ Range เซลล์ระหว่าง A5,A10
if rng.value = 0 Then ให้ rng แทนค่าด้วย 0
rng.EntireRow.Delete ให้ทำการลบแถวที่มีตัวแปร rng ที่มีค่าเป็น 0
end if ยังไม่เข้าใจความ
Next rng ก็ยังไม่เข้าใจความหมายเหมือนกัน

ผมแปลความหมายถูกหรือไม่ครับ ถ้าแปลไม่ถูกรบกวนช่วยอธิบายให้ผมกระจ่างด้วยครับ
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#13

Post by snasui »

:D ตัวอย่างคำอธิบายตามด้านล่างครับ

Code: Select all

'เริ่ม Procedure ที่ชื่อว่า RoundedRectangle1_Click
Sub RoundedRectangle1_Click()
    'ประกาศตัวแปร ให้ rng เป็น Range
    Dim rng As Range
    'Loop แต่ละเซลล์ในช่วง A5:A10
    For Each rng In Sheets("Sheet1").Range("A5", "A10")
        'ถ้าเซลล์มีค่าเป็น 0 แล้ว
        If rng.Value = 0 Then
            'ให้ลบเซลล์นั้นทั้งบรรทัด
            rng.EntireRow.Delete
        'จบ if
        End If
    'ไปยังเซลล์ถัดไป
    Next rng
'จบ Procedure
End Sub
Code นี้เป็นเพียงตัวอย่างการลบเท่านั้น โอกาสจะลบไม่หมดมีมากเพราะเป็นการลบจากบนลงด้านล่าง ซึ่งเมื่อมีการลบบรรทัดแล้วโปรแกรมจะขยับบรรทัดล่างขึ้นมาแทนบรรทัดที่ลบไป จึงเป็นเหตุที่ทำให้ลบไม่หมด หากจะลบให้หมด สามารถลบจากด้านล่างขึ้นด้านบน หรือสร้างตัวแปรเก็บ Range ที่เข้าเงื่อนไขแล้วลบทีเดียวหรือกำหนดให้ค่าที่เข้าเงื่อนไขเป็นค่าว่างแล้วค่อยลบทีเดียวเช่นนี้เป็นต้น
kio2002
Member
Member
Posts: 177
Joined: Thu Sep 20, 2012 8:40 am

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#14

Post by kio2002 »

Code: Select all

Sub RoundedRectangle1_Click()
    Dim rng As Range
    For Each rng In Sheets("Sheet1").Range("A5", "A10")
        If rng.Value = 0 Then
            rng.value = ""  ส่วนตัวนี้ก็คือ กำหนดให้ค่าที่เข้าเงื่อนไขเป็นค่าว่าง
        End If
    Next rng
    Sheets("Sheet1").Range("A5", "A10").specialcells(xlcelltypeblanks).EntireRow.Delete  ส่วนคำสั่งนี้ก็คือให้ลบทีเดียว และ xlcelltypeblanks ก็คือให้ลบค่าว่างจากล่างขึ้นบน
End Sub
ความหมายประมาณนี้ใช้ไมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการลบแถว(row)ในคอลัมน์Aที่มีค่าเป็น0หรือไม่มีค่าทิ้งไป

#15

Post by snasui »

:D ความหมายของ Sheets("Sheet1").Range("A5", "A10").specialcells(xlcelltypeblanks).EntireRow.Delete คือให้ลบเซลล์ว่างทุกเซลล์ในช่วง A5:A10 โดยลบทั้งบรรทัดพร้อมกันทีเดียว ไม่มี Code ใดที่บอกว่าเป็นการลบจากล่างขึ้นบน ในกรณีลบทั้งบรรทัดโปรแกรมจะขยับบรรทัดล่างขึ้นด้านบนให้เองอัตโนมัติครับ
Post Reply