🔊 โปรดทราบ Image
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ดครับ Image
  2. การสมัครสมาชิกเพื่อโพสต์คำถาม ดาวน์โหลดไฟล์แนบไปศึกษา ทำตามขั้นตอนด้านล่างครับ
    1. สมัครสมาชิก ดูขั้นตอนตาม Link นี้ครับ => สมัครสมาชิก กรณีลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่นี่ครับ => Reset รหัสผ่านImage
    2. Login เข้าระบบโดยคลิก Login ตรงมุมขวาบนของหน้านี้ Image กรณีมีปัญหาในการเข้าใช้งาน คลิก Link นี้เพื่อแจ้งผู้ดูแลระบบครับ => ติดต่อผู้ดูแลระบบ
  3. เมื่อ Login แล้วสามารถกำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษได้ที่ Link นี้ครับ => ตั้งค่าส่วนตัว Image
  4. วิธีการตั้งและตอบกระทู้ดูได้ที่ Link นี้ครับ => วิธีการตั้งและตอบกระทู้ Image
  5. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ Link นี้ครับ => จัดรูปแบบตัวอักษร และสามารถกำหนดขนาดตัวอักษรใน Browser ได้ที่นี่ครับ ==> กำหนดขนาดตัวอักษรใน Browser Image

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

ฟอรั่มถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถาม-ตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบ ต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. อธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. ควรแนบตัวอย่างไฟล์มาที่ฟอรั่มนี้เพื่อเพิ่มความสะดวกในการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่น นอกจากนี้ไม่ควรแนบไฟลที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. สำหรับคำถามเกี่ยวกับ VBA ให้ลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน ควรโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. แจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kio2002
Member
Member
Posts: 150
Joined: Thu Sep 20, 2012 8:40 am

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

#1

Post by kio2002 » Sat Aug 15, 2015 5:23 pm

เรียนทุกท่านครับ
ผมต้องการลบแถวในคอลัมน์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: 22567
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#2

Post by snasui » Sat Aug 15, 2015 5:27 pm

: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: 3857
Joined: Wed Aug 17, 2011 11:49 am

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

#3

Post by bank9597 » Sat Aug 15, 2015 6:01 pm

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

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

kio2002
Member
Member
Posts: 150
Joined: Thu Sep 20, 2012 8:40 am

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

#4

Post by kio2002 » Sat Aug 29, 2015 8:36 am

ขอบคุณ คุณ 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: 1610
Joined: Mon Oct 15, 2012 12:07 am

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

#5

Post by DhitiBank » Sat Aug 29, 2015 9:12 am

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

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: 150
Joined: Thu Sep 20, 2012 8:40 am

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

#6

Post by kio2002 » Sat Aug 29, 2015 3:04 pm

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

ขอบคุณล่วงหน้าครับ

User avatar
DhitiBank
Gold
Gold
Posts: 1610
Joined: Mon Oct 15, 2012 12:07 am

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

#7

Post by DhitiBank » Sat Aug 29, 2015 4:10 pm

อ๋อ ผมเข้าใจผิดนึกว่าให้ลบทั้งแถว หากค่าในคอลัมน์ C เป็น 0
ถ้าอย่างนั้น ลองปรับโค้ดตรง .Row(i).Delete เป็น .Cells(i,"c").ClearContents ครับ

kio2002
Member
Member
Posts: 150
Joined: Thu Sep 20, 2012 8:40 am

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

#8

Post by kio2002 » Sat Aug 29, 2015 5:26 pm

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: 22567
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#9

Post by snasui » Sat Aug 29, 2015 5:47 pm

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: 1610
Joined: Mon Oct 15, 2012 12:07 am

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

#10

Post by DhitiBank » Sat Aug 29, 2015 5:54 pm

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: 22567
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#11

Post by snasui » Sat Aug 29, 2015 5:59 pm

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

kio2002
Member
Member
Posts: 150
Joined: Thu Sep 20, 2012 8:40 am

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

#12

Post by kio2002 » Sat Aug 29, 2015 10:18 pm

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: 22567
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#13

Post by snasui » Sat Aug 29, 2015 10:35 pm

: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: 150
Joined: Thu Sep 20, 2012 8:40 am

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

#14

Post by kio2002 » Sat Aug 29, 2015 11:17 pm

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: 22567
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#15

Post by snasui » Sat Aug 29, 2015 11:25 pm

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

Post Reply