Page 1 of 1

การใช้เงื่อนไขเพ่ิมช้อมูลในเซลล์ที่เหมือนว่างแต่ไม่ได้ว่างจร

Posted: Mon Nov 05, 2012 3:32 pm
by Gin R
เรียนอาจารย์ และ ท่านผู้รู้ทุกท่านค่ะ
เนื่องการหนูต้องทำรายการสรุปยอดสินค้าแต่ไฟล์ที่ได้มามันต้องมาลบข้อมูลร้านที่ไม่ต้องการออกก่อน
จึงทำให้หนูต้องเพิ่มข้อมูลชื่อร้านค้าให้ทุกรายการแต่เมื่อใส่เงื่อนไขให้ ก็อปข้อมูลช่อง A-D แถวด้านบนลงมา ถ้าช่องในคอลัม D เป็นช่องว่าง แต่ถ้าไม่ใช่ให้ก็อปเพียงแค่ช่อง A-C แต่ผลที่ได้คือเมื่อมี ช่อง D ที่มีข้อมูลแต่ช่อง A-C ว่าง มันก็จะก็อปข้อมูลช่อง A-D ด้านบนลงมาทั้งหมดอยู่ดีค่ะ ทำให้ข้อมูลผิดพลาด
เมื่อหนูทำการตรวจสอบ เหมือนช่อง ในคอลัม D ที่เป็นช่องว่างๆ มันไม่ว่างจริงๆค่ะ

ชีทที่มีปัญหาคือ ชีท Payable
VBA = Sub Check() ค่ะ

(ก่อนหน้านี้หนูได้ทดลงใช้ Isempty และ Is null ดูแล้วแต่ได้ผลเท่ากันกับ ใช้ ="" ค่ะ)

รบกวนอาจารย์ หรือ ผู้รู้ท่านใด ให้ความกระจ่างด้วยค่ะ

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


Sub check()

For i = 11 To 2000
Set X = Worksheets("account").[C2]
Set O = Worksheets("account").[C4]
If Cells(i, "D").Value = O And Cells(i, "A").Value = X And Cells(i, "J") <> "" Or Cells(i, "J") = X Then
Range(Cells(i - 1, 1), Cells(i - 1, 4)).Copy
Range(Cells(i, 1), Cells(i, 4)).Select
ActiveSheet.Paste

Range(Cells(11, "P"), Cells(11, "S")).Copy
Range(Cells(i, "P"), Cells(i, "S")).Select
ActiveSheet.Paste

ElseIf Cells(i, "D").Value <> O And Cells(i, "A").Value = X And Cells(i, "J") <> "" Or Cells(i, "J") = X Then
Range(Cells(i - 1, 1), Cells(i - 1, 3)).Copy
Range(Cells(i, 1), Cells(i, 3)).Select
ActiveSheet.Paste

Range(Cells(11, "P"), Cells(11, "S")).Copy
Range(Cells(i, "P"), Cells(i, "S")).Select
ActiveSheet.Paste

ElseIf Cells(i, 1).Value <> "" Then
Range(Cells(11, "P"), Cells(11, "S")).Copy
Range(Cells(i, "P"), Cells(i, "S")).Select
ActiveSheet.Paste

End If

Next

End Sub

Re: การใช้เงื่อนไขเพ่ิมช้อมูลในเซลล์ที่เหมือนว่างแต่ไม่ได้ว่

Posted: Mon Nov 05, 2012 6:04 pm
by snasui
:D ลองดูตัวอย่าง Code ด้านล่างซึ่งเป็นการเคลียร์ค่าที่เห็นว่าเป็นค่าว่างให้เป็นค่าว่างจริง ๆ ครับ

Code: Select all

Sub Test()
    Dim rAll As Range
    Dim r As Range
    With Worksheets("Payable")
        Set rAll = .Range("D11", .Range("J" & Rows.Count) _
            .End(xlUp).Offset(0, -6))
    End With
    For Each r In rAll
        With Application
            r = .Trim(r)
            If Len(r) = 0 And Len(.Trim(r.Offset(0, -3))) = 0 Then
                r.Offset(0, -3).Resize(1, 4).ClearContents
            ElseIf Len(r) <> 0 And Len(.Trim(r.Offset(0, -1))) = 0 Then
                r.Offset(0, -3).Resize(1, 3).ClearContents
            End If
        End With
    Next r
End Sub

Re: การใช้เงื่อนไขเพ่ิมช้อมูลในเซลล์ที่เหมือนว่างแต่ไม่ได้ว่

Posted: Tue Nov 06, 2012 9:51 am
by Gin R
ขอบคุณมากค่ะ
ขอหนูลองทำก่อนถ้าติดขัดอะไรจะรบกวนถามอีกรอบค่ะ

Re: การใช้เงื่อนไขเพ่ิมช้อมูลในเซลล์ที่เหมือนว่างแต่ไม่ได้ว่

Posted: Tue Nov 06, 2012 4:58 pm
by Gin R
หนูได้นำไปใช้แล้วปรากฏรันในเครื่องหนูทำได้แต่พอไปรันในเครื่องคนอื่นมันรัน Sub ที่อาจารย์ให้มานานมากจนเหมือนมันค้าง ทั้งๆที่หนูเปลี่ยนที่อยู่ไฟล์เรียบร้อยแล้วค่ะ
หนูจึงขอรบกวนถามว่าเพื่อความเข้าใจว่า

With Worksheets("Payable")
Set rAll = .Range("D11", .Range("J" & Rows.Count) _
.End(xlUp).Offset(0, -6))
End With

คือการกำหนดพื้นที่ที่จะใช้งานใช่หรือเปล่าค่ะ แล้วทำไมหลัง .Range("J" & Rows.Count) ต้องมี _ ค่ะ

With Application
r = .Trim(r)
If Len(r) = 0 And Len(.Trim(r.Offset(0, -3))) = 0 Then
r.Offset(0, -3).Resize(1, 4).ClearContents
ElseIf Len(r) <> 0 And Len(.Trim(r.Offset(0, -1))) = 0 Then
r.Offset(0, -3).Resize(1, 3).ClearContents
End If
End With

คือการใช้ Trim ตัดข้อมูลที่เป็นการเคาะออกใช่ใหม่ค่ะ แล้วทำไมต้องใช้ Resize ด้วยค่ะ


ขอบคุณมากค่ะ

Gin R

Re: การใช้เงื่อนไขเพ่ิมช้อมูลในเซลล์ที่เหมือนว่างแต่ไม่ได้ว่

Posted: Tue Nov 06, 2012 6:15 pm
by snasui
:D
Gin R wrote:With Worksheets("Payable")
Set rAll = .Range("D11", .Range("J" & Rows.Count) _
.End(xlUp).Offset(0, -6))
End With

คือการกำหนดพื้นที่ที่จะใช้งานใช่หรือเปล่าค่ะ แล้วทำไมหลัง .Range("J" & Rows.Count) ต้องมี _ ค่ะ
ถูกต้องครับ สำหรับเครื่องหมาย _ เป็นการบอกว่าบรรทัดด้านล่างกับบรรทัดนี้คือบรรทัดเดียวกัน
Gin R wrote:With Application
r = .Trim(r)
If Len(r) = 0 And Len(.Trim(r.Offset(0, -3))) = 0 Then
r.Offset(0, -3).Resize(1, 4).ClearContents
ElseIf Len(r) <> 0 And Len(.Trim(r.Offset(0, -1))) = 0 Then
r.Offset(0, -3).Resize(1, 3).ClearContents
End If
End With

คือการใช้ Trim ตัดข้อมูลที่เป็นการเคาะออกใช่ใหม่คะ
ใช่ครับ
Gin R wrote:แล้วทำไมต้องใช้ Resize ด้วยค่ะ
เพื่อกำหนดขนาดช่วงข้อมูลที่ต้องการจะ Clear Contents ครับ

การโพสต์ Code ให้เป็น Code เพื่อสะดวกในการอ่านดูตัวอย่างที่นี่ครับ viewtopic.php?f=3&t=1187

Re: การใช้เงื่อนไขเพ่ิมช้อมูลในเซลล์ที่เหมือนว่างแต่ไม่ได้ว่

Posted: Wed Nov 07, 2012 10:01 am
by Gin R
ขอบคุณมากค่ะ ได้ความรู้สำหรับการทำงานเพิ่มขี้นมาอีกหลายอย่างเลยค่ะ

Gin R