: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

สอบถามการใช้ If 2 เงื่อนไข

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
lnongkungl
Member
Member
Posts: 92
Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013

สอบถามการใช้ If 2 เงื่อนไข

#1

Post by lnongkungl »

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

ปกติ If ก็จะมีเงื่อนไขเดียว เช่น

Code: Select all

If 2 > 0 Then
MsgBox "Yes"
End If
รูปแบบการเขียนก็จะประมาณนี้ถูกต้องนะครับ แต่ถ้ามี 2 เงื่อนไข ก่อนที่จะไป then ครับ ต้องเขียนยังไง ผมพยายามหาวิธีการเขียนจากเว็บแล้ว หาไม่เจอจริงๆครับ

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

Code: Select all

.
.
.
If range("a") =>0 & range("b")<100 then
range("c").copy
.
.
.
รบกวนขอแนวทางการเขียนว่าต้องใช้ code ประมาณไหนด้วยครับ ผมลองมั่วๆ ดูแล้วไม่ได้จริงๆ แล้วผมจะลองเขียนดูถ้าติดอะไรจะแนบไฟล์และ Code ที่ลองเขียนมาสอบถามอีกครั้งครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ If 2 เงื่อนไข

#2

Post by snasui »

lnongkungl wrote: Thu Apr 22, 2021 3:14 pm

Code: Select all

If range("a") =>0 & range("b")<100 then
range("c").copy
:D เขียนด้วยเงื่อนไขนี้ก็ใช้ได้เพียงแต่ Statement ไม่ถูกต้องเท่านั้น การอ้างอิงเซลล์ต้องระบุเป็นเช่น range("a1"), range("b1") เป็นต้น ไม่ใช่ range("a"), range("b") ครับ

ไม่ทราบติดปัญหาตรงไหน อย่างไร ควรแนบไฟล์พร้อม Code ที่เขียนเอาไว้เองแล้วมาด้วยจะได้ช่วยดูต่อไปจากนั้นครับ
lnongkungl
Member
Member
Posts: 92
Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013

Re: สอบถามการใช้ If 2 เงื่อนไข

#3

Post by lnongkungl »

concept คือ จะดึงข้อมูลใน sheet Data มาแสดงใน sheet Show โดยมีเงื่อนไข 2 ตัวคือ order id และ order no. ภายใน if แรกคือ ถ้าใส่เงื่อนไขตัวเดียวคือ order id (ปล่อยเงื่อนไขที่ 2 ว่าง)ก็ให้ดึงข้อมูลที่เป็น order id นั้นมาทั้งหมด แต่หลัง else คือ ถ้าใส่เงื่อนไข 2 ตัว ก็จะให้ดึงมาเฉพาะที่เป็น order id และ order no. นั้นมาครับ

ผมใส่ & ไปก็ไม่เกิดผลลัพธ์อะไรออกมา ใส่ , ก็ error ครับ

Code: Select all

Sub collectNO()

Dim i As Long
Dim desRow As Long
Dim a As Range, b As Range
Set a = Sheets("Show").Range("G1")
Set b = Sheets("Show").Range("G2")

If b.Value = "" Then
Application.ScreenUpdating = False
    For i = 2 To Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row
        If Sheets("Data").Range("A" & i).Value = a.Value Then
            destRow = Sheets("Show").Range("A" & Rows.Count).End(xlUp).Row + 1
            Sheets("Data").Range("A" & i & ":B" & i).Copy
            Sheets("Show").Range("A" & destRow).PasteSpecial xlPasteValues
    
            Sheets("Data").Range("G" & i).Copy
            Sheets("Show").Range("C" & destRow).PasteSpecial xlPasteValues
        End If
    Next i
Else
    For i = 2 To Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row
    'บรรทัดนี้ครับใส่ If 2 เงื่อนไขก่อนไป then
        If Sheets("Data").Range("A" & i).Value = a.Value & Sheets("Data").Range("B" & i).Value = b.Value Then
            destRow = Sheets("Show").Range("A" & Rows.Count).End(xlUp).Row + 1
            Sheets("Data").Range("A" & i & ":B" & i).Copy
            Sheets("Show").Range("A" & destRow).PasteSpecial xlPasteValues
    
            Sheets("Data").Range("G" & i).Copy
            Sheets("Show").Range("C" & destRow).PasteSpecial xlPasteValues
        End If
    Next i
MsgBox "เพิ่ม Code 2 เงื่อนไข"
End If

Application.CutCopyMode = False
Application.ScreenUpdating = True

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

Re: สอบถามการใช้ If 2 เงื่อนไข

#4

Post by snasui »

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

Code: Select all

Sub collectNO()
    Dim i As Long
    Dim desRow As Long
    Dim a As Range, b As Range
    Set a = Sheets("Show").Range("G1")
    Set b = Sheets("Show").Range("G2")
    Dim strF As String, strCp As String
    
    Application.ScreenUpdating = False

    With Sheets("Data")
        For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
            If a.Value <> "" And b.Value <> "" Then
                strF = a.Value & "_" & b.Value
                strCp = .Range("a" & i).Value & "_" & .Range("b" & i).Value
            ElseIf a.Value <> "" Then
                strF = a.Value & "_" & b.Value
                strCp = .Range("a" & i).Value
            ElseIf b.Value <> "" Then
                strF = ab.Value
                strCp = .Range("b" & i).Value
            End If
            If strF = strCp Then
                If .Range("A" & i).Value = a.Value Then
                    destRow = Sheets("Show").Range("A" & Rows.Count).End(xlUp).Row + 1
                    Application.Union(.Range("a" & i), .Range("b" & i), .Range("g" & i)).Copy
                    Sheets("Show").Range("a" & destRow).PasteSpecial xlPasteValues
                    Application.CutCopyMode = False
                End If
            End If
        Next i
    End With
    MsgBox "เพิ่ม Code 2 เงื่อนไข"
    Application.ScreenUpdating = True
End Sub
lnongkungl
Member
Member
Posts: 92
Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013

Re: สอบถามการใช้ If 2 เงื่อนไข

#5

Post by lnongkungl »

ผลลัพธ์ 2 เงื่อนไขออกครับ แต่แบบใส่แค่เงื่อนไขแรก a กลับไม่มีอะไรออกมาเลย

ผลเลยลองเอา code ที่ผมเขียนตอนแรก เข้ามาคั่นใน if แรก ผลปรากฏว่า ไม่ error แต่ก็ไม่มีผลลัพธ์ออกมาเช่นกัน

รบกวนอาจารย์อีกทีครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ If 2 เงื่อนไข

#6

Post by snasui »

:D จาก Code นี้
snasui wrote: Fri Apr 23, 2021 12:20 pm

Code: Select all

ElseIf a.Value <> "" Then
	strF = a.Value & "_" & b.Value
	strCp = .Range("a" & i).Value
ElseIf b.Value <> "" Then
	strF = ab.Value
	strCp = .Range("b" & i).Value
End If
ปรับเป็นด้านล่างครับ

Code: Select all

ElseIf a.Value <> "" Then
	strF = a.Value
	strCp = .Range("a" & i).Value
ElseIf b.Value <> "" Then
	strF = b.Value
	strCp = .Range("b" & i).Value
End If
กรุณาทำความเข้าใจและฝึก Debug Code ด้วยตนเอง จะได้หาสาเหตุของความผิดพลาดได้ครับ
lnongkungl
Member
Member
Posts: 92
Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013

Re: สอบถามการใช้ If 2 เงื่อนไข

#7

Post by lnongkungl »

ขออภัยครับ เพราะผมยังไม่ชำนาญเท่าไรครับ แค่พอไปได้ เจอ code ลึกๆ ก็ งง เหมือนกัน

ก่อนมาเห็นที่อาจารย์ตอบ ผมปรับเป็นแบบนี้ครับ ก็ได้ผลลัพธ์ตามต้องการ

แต่เหมือน code มันจะซ้ำซ้อนไปหน่อย

Code: Select all

Sub collectNO()
    Dim i As Long
    Dim k As Long
    Dim desRow As Long
    Dim a As Range, b As Range
    Set a = Sheets("Show").Range("G1")
    Set b = Sheets("Show").Range("G2")
    Dim strF As String, strCp As String
    
    Application.ScreenUpdating = False

    With Sheets("Data")
        For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
            If a.Value <> "" And b.Value <> "" Then
                strF = a.Value & "_" & b.Value
                strCp = .Range("a" & i).Value & "_" & .Range("b" & i).Value
            ElseIf a.Value <> "" Then
                strF = a.Value & "_" & b.Value
                strCp = .Range("a" & i).Value
            ElseIf b.Value <> "" Then
                strF = ab.Value
                strCp = .Range("b" & i).Value
            End If
            
            If b.Value = "" Then
                     If Sheets("Data").Range("A" & i).Value = a.Value Then
                        destRow = Sheets("Show").Range("A" & Rows.Count).End(xlUp).Row + 1
                        Sheets("Data").Range("A" & i & ":B" & i).Copy
                        Sheets("Show").Range("A" & destRow).PasteSpecial xlPasteValues
    
                        Sheets("Data").Range("G" & i).Copy
                        Sheets("Show").Range("C" & destRow).PasteSpecial xlPasteValues
                     End If
        ElseIf strF = strCp Then
                If .Range("A" & i).Value = a.Value Then
                    destRow = Sheets("Show").Range("A" & Rows.Count).End(xlUp).Row + 1
                    Application.Union(.Range("a" & i), .Range("b" & i), .Range("g" & i)).Copy
                    Sheets("Show").Range("a" & destRow).PasteSpecial xlPasteValues
                     Application.CutCopyMode = False
                End If
            End If
        Next i
    End With
    Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ If 2 เงื่อนไข

#8

Post by snasui »

:D ปรับ Code ตามที่ผมตอบในโพสต์ #6 ติดตรงไหนค่อยนำมาถามกันต่อครับ
lnongkungl
Member
Member
Posts: 92
Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013

Re: สอบถามการใช้ If 2 เงื่อนไข

#9

Post by lnongkungl »

ปัญหาใหม่ครับ เมื่อทดสอบแยก workbook ผมเพิ่ม code เจอ error ไล่ F8 เช็คทีละบรรทัด จนไม่มี error แล้วครับ

แต่ผลลัพธ์ไม่ออก เปิดไฟล์ที่มี Data อยู่ได้ แต่ไม่ดึงข้อมูลมาวางใน workbook ที่ run code ครับ

Code: Select all

Sub collectNO2()
    Dim wb As Workbook, wbf As Workbook
    Dim wn As Range
    Dim nsh As Range
    Dim i As Long
    Dim desRow As Long
    Dim a As Range, b As Range
    Dim strF As String, strCp As String
    Set a = Sheets("Show").Range("G1")
    Set b = Sheets("Show").Range("G2")
    Set wn = Range("I1")
    Set nsh = Range("I2")
    Set wbf = ThisWorkbook
        
    
    Application.ScreenUpdating = False
    Set wb = Application.Workbooks.Open(Filename:=wn.Value, ReadOnly:=True)
    With wb.Sheets(nsh.Value)
        For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
            If a.Value <> "" And b.Value <> "" Then
                strF = a.Value & "_" & b.Value
                strCp = .Range("a" & i).Value & "_" & .Range("b" & i).Value
            ElseIf a.Value <> "" Then
                strF = a.Value
                strCp = .Range("a" & i).Value
            ElseIf b.Value <> "" Then
                strF = ab.Value
                strCp = .Range("b" & i).Value
            End If
            If strF = strCp Then
                If .Range("A" & i).Value = a.Value Then
                    With wbf.Sheets("Show")
                        destRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
                        Application.Union(.Range("a" & i), .Range("b" & i), .Range("g" & i)).Copy
                        .Range("a" & destRow).PasteSpecial xlPasteValues
                        Application.CutCopyMode = False
                    End With
                End If
            End If
        Next i
    End With
  
    Application.ScreenUpdating = True
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: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ If 2 เงื่อนไข

#10

Post by snasui »

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

Code: Select all

'Other code
If strF = strCp Then
    With wbf.Sheets("Show")
        destRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
        Application.Union(wb.Sheets(nsh.Value).Range("a" & i), _
            wb.Sheets(nsh.Value).Range("b" & i), _
            wb.Sheets(nsh.Value).Range("g" & i)).Copy
        .Range("a" & destRow).PasteSpecial xlPasteValues
        Application.CutCopyMode = False
    End With
End If
'Other code
lnongkungl
Member
Member
Posts: 92
Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013

Re: สอบถามการใช้ If 2 เงื่อนไข

#11

Post by lnongkungl »

ผลลัพธ์ถูกต้องครับ และผมได้เพิ่ม on error goto เข้าไป ก็ได้ผลเมื่อใส่ชื่อไฟล์ผิด (หาวิธีใช้ on error อยู่นานกว่าจะเข้าใจ)

ทีนี้มาติดตรงที่ว่า ถ้าเงื่อนไขแรกที่ค้นหา (คือข้อมูลใน column A) ไม่ได้เป็นแค่ตัวเลขอย่างเดียว เช่น 1024(ก) , A1011(ยน) แบบนี้ครับ แต่เราไม่รู้ว่า ข้างหน้า หรือ ข้างหลังเลขที่เราจะค้นหาเป็นตัวอะไรบ้าง เราจะกำหนดได้มั้ยครับว่าให้ใช้แค่ตัวเลข แต่สามารถค้นหามาได้ทั้งหมด เช่น

ต้องการค้นหา เลข 1011 เมื่อ run code แล้วจะได้ผลลัพธ์เป็น
1011
1011(ก)
1011(12)
1011
ฺB1011

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

ผมพยายามหาวิธีปรับแล้วใน goole แต่หาไม่เจอจริงๆครับ หรือผมอาจจะใช้ keyword ในการค้นหาไม่ถูกกับโจทย์ เลยหาไม่เจอซักที

Code: Select all

Sub collectNO2()
    Dim wb As Workbook, wbf As Workbook
    Dim wn As Range
    Dim nsh As Range
    Dim i As Long
    Dim desRow As Long
    Dim a As Range, b As Range
    Dim strF As String, strCp As String
    Set a = Sheets("Show").Range("G1")
    Set b = Sheets("Show").Range("G2")
    Set wn = Range("I1")
    Set nsh = Range("I2")
    Set wbf = ThisWorkbook
        
    
    Application.ScreenUpdating = False
    On Error GoTo err1:
    Set wb = Application.Workbooks.Open(Filename:=wn.Value, ReadOnly:=True)
    With wb.Sheets(nsh.Value)
        For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
            If a.Value <> "" And b.Value <> "" Then
                strF = a.Value & "_" & b.Value
                strCp = .Range("a" & i).Value & "_" & .Range("b" & i).Value
            ElseIf a.Value <> "" Then
                strF = a.Value
                strCp = .Range("a" & i).Value
            ElseIf b.Value <> "" Then
                strF = ab.Value
                strCp = .Range("b" & i).Value
            End If
            If strF = strCp Then
               'If .Range("A" & i).Value Like a.Value Then
                    With wbf.Sheets("Show")
                        destRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
                        Application.Union(wb.Sheets(nsh.Value).Range("a" & i), _
                            wb.Sheets(nsh.Value).Range("b" & i), _
                            wb.Sheets(nsh.Value).Range("g" & i)).Copy
                        .Range("a" & destRow).PasteSpecial xlPasteValues
                        Application.CutCopyMode = False
                    End With
               ' End If
            End If
        Next i
    End With
    
   wb.Close False
    Application.ScreenUpdating = True
Exit Sub
err1:
        MsgBox "ไม่พบข้อมูลที่ค้นหา หรือ ใส่ที่อยู่ไฟล์ , ชื่อไฟล์ ผิด!!!", vbCritical, "SK-FOODS"
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ If 2 เงื่อนไข

#12

Post by snasui »

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

Code: Select all

'Other code
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
    If a.Value <> "" And b.Value <> "" Then
        strF = "*" & a.Value & "*" & b.Value & "*"
        strCp = .Range("a" & i).Value & "*" & .Range("b" & i).Value
    ElseIf a.Value <> "" Then
        strF = "*" & a.Value & "*"
        strCp = .Range("a" & i).Value
    ElseIf b.Value <> "" Then
        strF = "*" & b.Value & "*"
        strCp = .Range("b" & i).Value
    End If
    If strCp Like strF Then
        With wbf.Sheets("Show")
            destRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
            Application.Union(wb.Sheets(nsh.Value).Range("a" & i), _
                wb.Sheets(nsh.Value).Range("b" & i), _
                wb.Sheets(nsh.Value).Range("g" & i)).Copy
            .Range("a" & destRow).PasteSpecial xlPasteValues
            Application.CutCopyMode = False
        End With
    End If
Next i
'Other code
ในโอกาสถัดไปกรุณาแนบไฟล์ที่ได้ปรับ Code ล่าสุดมาแล้วด้วยจะได้สะดวกในการตอบของเพื่อนสมาชิกครับ
Post Reply