Page 1 of 1

สอบถามแนวทางการใช้VBA copyค่าจากชีทอื่นตามเงื่อนไขครับ

Posted: Wed Jan 04, 2023 3:41 pm
by klot5678
สวัสดีครับ ต้องการ ก๊อปปี้ค่าจาก sheet3 มาวางที่ sheet1 แบบหลายเงื่อนไขครับ
- สิ่งที่ต้องการคือ copy column O จาก Sheet3 มาวางที่ column AL ของ Sheet1 และ copy column F จาก Sheet3 มาวางที่ column AP ของ Sheet1 ถ้าเข้าเงื่อนไขครับ
- เงื่อนไขคือ column H ของ Sheet1 ต้อง = column J ของ Sheet3 และ column G ของ Sheet1 ต้อง = column K ของ Sheet3 ครับ

Code: Select all

Sub mc()
    Dim i As Long
    Dim j As Long
    
    j = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = 3 To j
        If Sheet1.Cells(i, "H") = Sheet3.Cells(i, "J") And Sheet1.Cells(i, "G") = Sheet3.Cells(i, "K") Then
            Sheet3.Cells(i, "O").Copy Destiantion:=Sheet1.Cells(i, "AL")
            Sheet3.Cells(i, "F").Copy Destiantion:=Sheet1.Cells(i, "AP")
            
        End If
    Next
    
End Sub 
จากที่ไปทดลองเขียนโค้ดดูปัญหาคือกดรันมาโครแล้วไม่เกิดอะไรขึ้นครับ จึงรบกวนของแนวทางการเขียนมาโครในการก๊อปปี้ค่าแบบหลายเงื่อนไขครับ ขอบคุณครับ
ปล.เงื่อนไขจริงมีมากกว่านี้ครับ และจำนวน column ที่ต้องการก๊อปปี้ไปวางก็มีมากกว่านี้ครับ แต่ยกตัวอย่างมาแค่สองเงื่อนไขและสองคอลัมน์ครับ

Re: สอบถามแนวทางการใช้VBA copyค่าจากชีทอื่นตามเงื่อนไขครับ

Posted: Wed Jan 04, 2023 4:18 pm
by snasui
:D กรุณาแนบไฟล์ตัวอย่างซึ่งได้แนบ Code นี้เอาไว้แล้วมาด้วยจะได้สะดวกในการตอบของเพื่อนสมาชิกครับ

Re: สอบถามแนวทางการใช้VBA copyค่าจากชีทอื่นตามเงื่อนไขครับ

Posted: Wed Jan 04, 2023 4:55 pm
by klot5678
พอดีไปจำลองไฟล์ข้อมูลแล้วปรับโค้ดดูบางส่วน ดังไฟล์แนบครับ แต่เกิด runtime error '424'

Code: Select all

Sub testmc()
    Dim i As Long
    Dim j As Long
    
    j = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = 1 To j
        If Sheet3.Cells(i, "J") = Sheet1.Cells(i, "H") And Sheet3.Cells(i, "K") = Sheet1.Cells(i, "G") Then
            Sheet3.Cells(i, "O").Copy Destiantion:=Sheet1.Cells(i, "AL")
            Sheet3.Cells(i, "F").Copy Destiantion:=Sheet1.Cells(i, "AP")
            
        End If
    Next
    
End Sub

Re: สอบถามแนวทางการใช้VBA copyค่าจากชีทอื่นตามเงื่อนไขครับ

Posted: Wed Jan 04, 2023 7:24 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub testmc()
'    Dim i As Long
'    Dim j As Long
'
'    j = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
'
'    For i = 1 To j
'        If Sheet3.Cells(i, "J") = Sheet1.Cells(i, "H") And _
'            Sheet3.Cells(i, "K") = Sheet1.Cells(i, "G") Then
'            Sheet3.Cells(i, "O").Copy Destiantion:=Sheet1.Cells(i, "AL")
'            Sheet3.Cells(i, "F").Copy Destiantion:=Sheet1.Cells(i, "AP")
'        End If
'    Next
    Dim srAll As Range, rngSr As Range
    Dim tgAll As Range, rngTg As Range
    With Worksheets("Sheet3")
        Set srAll = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
    End With
    With Worksheets("Sheet1")
        Set tgAll = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
    End With
    
    For Each rngSr In srAll
        For Each rngTg In tgAll
            If rngSr.Parent.Cells(rngSr.Row, "j").Value = _
                    rngTg.Parent.Cells(rngTg.Row, "g").Value And _
                rngSr.Parent.Cells(rngSr.Row, "k").Value = _
                    rngTg.Parent.Cells(rngTg.Row, "h").Value Then
                rngTg.Parent.Cells(rngTg.Row, "al").Value = _
                    rngSr.Parent.Cells(rngSr.Row, "f").Value
                rngTg.Parent.Cells(rngTg.Row, "ap").Value = _
                    rngSr.Parent.Cells(rngSr.Row, "o").Value
            End If
        Next rngTg
    Next rngSr
End Sub

Re: สอบถามแนวทางการใช้VBA copyค่าจากชีทอื่นตามเงื่อนไขครับ

Posted: Thu Jan 05, 2023 8:34 am
by klot5678
ตัวแปร rngSr และ rngTg ต้องกำหนดค่าไหมครับ พอดีลองนำมาปรับแล้วค่อนข้างงง

Re: สอบถามแนวทางการใช้VBA copyค่าจากชีทอื่นตามเงื่อนไขครับ

Posted: Thu Jan 05, 2023 8:39 am
by klot5678
ได้ผลลัพธ์แล้วครับ ลองสลับเงื่อนไขนิดหน่อย ขอบคุณมากครับ

Code: Select all

    Dim srAll As Range, rngSr As Range
    Dim tgAll As Range, rngTg As Range
    With Worksheets("Sheet3")
        Set srAll = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
    End With
    With Worksheets("Sheet1")
        Set tgAll = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
    End With
    
    For Each rngSr In srAll
        For Each rngTg In tgAll
            If rngSr.Parent.Cells(rngSr.Row, "k").Value = _
                    rngTg.Parent.Cells(rngTg.Row, "g").Value And _
                rngSr.Parent.Cells(rngSr.Row, "j").Value = _
                    rngTg.Parent.Cells(rngTg.Row, "h").Value Then
                rngTg.Parent.Cells(rngTg.Row, "al").Value = _
                    rngSr.Parent.Cells(rngSr.Row, "f").Value
                rngTg.Parent.Cells(rngTg.Row, "ap").Value = _
                    rngSr.Parent.Cells(rngSr.Row, "o").Value
            End If
        Next rngTg
    Next rngSr
End Sub