Page 1 of 1

การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Wed Nov 20, 2019 5:04 pm
by yangkodza
จากแผ่นงาน อยากทราบว่าที่แผ่นงานสรุปเทอม1
เราจะมีวิธีหา มาสาย ลากิจ ลาป่าว ลาคลอด ของแต่ละคนได้อย่างไรครับ
รายเดือน2.xlsm

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Wed Nov 20, 2019 6:22 pm
by parakorn
ตัวอย่างโค้ดครับ

Code: Select all

Sub Save()
'
' Save Macro
'

For i = 2 To Sheets.Count - 1
    Sheets(i).Select
    Application.Goto Reference:="OFFSET(R3C2,1,,COUNTA(C1)-2,5)"
    Selection.Copy
    Sheets("ÊÃØ»à·ÍÁ 1").Select
    Application.Goto Reference:="R4C2"
    If Range("B4") = "" Then Range("B4").Select Else
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Next i

End Sub
แล้วใช้ Pivot Table สรุปผลอีกทีครับ

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Wed Nov 20, 2019 7:25 pm
by yangkodza
ที่แผ่นงาน สรุปเทอม1 cell C4 อยากได้แบบ
ค้นข้อมูลในแต่ละแผ่นงานของเดือน ที่มีชื่อ นางสาวศุภางค์ ถ้ามีชื่อนี้ก็ให้เอาผลมาสายของคนนี้มาบวกกันทั้ง 6 เดือน
ประมาณนี้ครับ ที่แผ่นงานรายเดือนแต่ละแผ่น เรคคอดไม่เท่ากันเพราะว่า ผมจะตัดคนที่ ไม่มีขาดลามาสายออกไปครับ
ช่วงข้อมูลจริงๆ สมมุติว่ามีแค่ 15 คนครับ ตามรายชื่อในแผนงานสรุปเทอม 1
รบกวนชี้แนะด้วยครับ

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Thu Nov 21, 2019 6:39 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Dim rsAll As Range, rs As Range
Dim rtAll As Range, rt As Range
Dim sh As Worksheet
With Worksheets("สรุปเทอม 1")
    Set rsAll = .Range("b4", .Range("b" & .Rows.Count).End(xlUp))
    For Each rs In rsAll
        For Each sh In Worksheets
            If sh.Name <> "สรุปเทอม 1" Then
                Set rtAll = sh.Range("b4", sh.Range("b" & sh.Rows.Count).End(xlUp))
                For Each rt In rtAll
                    If rt.Value = rs.Value Then
                        rs.Offset(0, 1).Value = rs.Offset(0, 1).Value + _
                            rt.Offset(0, 1).Value
                        rs.Offset(0, 2).Value = rs.Offset(0, 2).Value + _
                            rt.Offset(0, 2).Value
                        rs.Offset(0, 3).Value = rs.Offset(0, 3).Value + _
                            rt.Offset(0, 3).Value
                        rs.Offset(0, 4).Value = rs.Offset(0, 4).Value + _
                            rt.Offset(0, 4).Value
                    End If
                Next rt
            End If
        Next sh
    Next rs
End With

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Thu Nov 21, 2019 7:40 am
by yangkodza
snasui wrote: Thu Nov 21, 2019 6:39 am :D ตัวอย่าง Code ครับ

Code: Select all

Dim rsAll As Range, rs As Range
Dim rtAll As Range, rt As Range
Dim sh As Worksheet
With Worksheets("สรุปเทอม 1")
    Set rsAll = .Range("b4", .Range("b" & .Rows.Count).End(xlUp))
    For Each rs In rsAll
        For Each sh In Worksheets
            If sh.Name <> "สรุปเทอม 1" Then
                Set rtAll = sh.Range("b4", sh.Range("b" & sh.Rows.Count).End(xlUp))
                For Each rt In rtAll
                    If rt.Value = rs.Value Then
                        rs.Offset(0, 1).Value = rs.Offset(0, 1).Value + _
                            rt.Offset(0, 1).Value
                        rs.Offset(0, 2).Value = rs.Offset(0, 2).Value + _
                            rt.Offset(0, 2).Value
                        rs.Offset(0, 3).Value = rs.Offset(0, 3).Value + _
                            rt.Offset(0, 3).Value
                        rs.Offset(0, 4).Value = rs.Offset(0, 4).Value + _
                            rt.Offset(0, 4).Value
                    End If
                Next rt
            End If
        Next sh
    Next rs
End With
ยอดเลยครับสะดวกมากเลย รบกวนอาจารย์ช่วยปรับ Code ให้อีกนิดครับ
ตัวแผ่นงานของผมจะเรียงแบบนี้ หน้าหลัก,พ.ค.,มิ.ย.,ก.ค.,ส.ค.,ก.ย.,ต.ค.1,เทอม 1,ต.ค.2,พ.ย.,ธ.ค.,ม.ค.,ก.พ.,มี.ค.
อยากให้แผ่นงาน macro ดังกล่าว อ้างอิงแผนงานที่ 2 ถึง 7 ครับ ขอบคุณครับ

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Thu Nov 21, 2019 8:41 pm
by snasui
:D สามารถปรับตรง If sh.Name <> "สรุปเทอม 1" Then ได้เลยครับ

ลองศึกษา Link นี้เป็นการใช้ sh.Index เข้ามาช่วย viewtopic.php?f=3&t=3884&view=next#p25118 จากนั้นลองปรับมาเองก่อน ติดตรงไหนค่อยถามกันต่อ ทุกคำถามต้องผ่านการทดลองเขียนมาเองก่อนแล้วครับ

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Mon Nov 25, 2019 8:55 am
by yangkodza

Code: Select all

Sub Macro1()
Dim rsAll As Range, rs As Range
Dim rtAll As Range, rt As Range
Dim sh As Worksheet
Application.ScreenUpdating = False
    Range("C4:F18").Select
    Selection.ClearContents
    Range("C4").Select
With Worksheets("สรุปเทอม 1")
    Set rsAll = .Range("b4", .Range("b" & .Rows.Count).End(xlUp))
    For Each rs In rsAll
        For Each sh In Worksheets
            'If sh.Name <> "สรุปเทอม 1" Then      'ถูกต้องต้นฉบับ
            'If sh.Name <> "สรุปเทอม 1,ต.ค.2,พ.ย.,ธ.ค.,ม.ค.,ก.พ.,มี.ค.,สรุปเทอม 2,สรุปทั้งปี" Then 'ไม่ผ่าน
            'If sh.Name <> Worksheets.Count Then      'ถูกต้องต้นฉบับ  'ไม่ผ่าน
           If sh.Name <> Sheets(Array("สรุปเทอม 1", "ต.ค.2", "พ.ย.", "ธ.ค.", "ม.ค.", "ก.พ.", "มี.ค.", _
           "สรุปเทอม 2", "สรุปทั้งปี")) Then
            Sheets("สรุปเทอม 1").Activate
                            Set rtAll = sh.Range("b4", sh.Range("b" & sh.Rows.Count).End(xlUp))
                For Each rt In rtAll
                    If rt.Value = rs.Value Then
                        rs.Offset(0, 1).Value = rs.Offset(0, 1).Value + _
                            rt.Offset(0, 1).Value
                        rs.Offset(0, 2).Value = rs.Offset(0, 2).Value + _
                            rt.Offset(0, 2).Value
                        rs.Offset(0, 3).Value = rs.Offset(0, 3).Value + _
                            rt.Offset(0, 3).Value
                        rs.Offset(0, 4).Value = rs.Offset(0, 4).Value + _
                            rt.Offset(0, 4).Value
                    End If
                Next rt
            End If
        Next sh
    Next rs
End With
Application.ScreenUpdating = True
End Sub
ผมหาวิธีทำยังไม่ผ่านครับ รบกวนอาจารย์ชี้แนะเพิ่มเติมครับ

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Mon Nov 25, 2019 6:46 pm
by snasui
yangkodza wrote: Thu Nov 21, 2019 7:40 am อยากให้แผ่นงาน macro ดังกล่าว อ้างอิงแผนงานที่ 2 ถึง 7 ครับ
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
If sh.Index >= 2 and sh.Index <= 7 Then
'Other code

Re: การรวมข้ามชีตแบบมีเงื่อนไข

Posted: Mon Nov 25, 2019 8:54 pm
by yangkodza
snasui wrote: Mon Nov 25, 2019 6:46 pm
yangkodza wrote: Thu Nov 21, 2019 7:40 am อยากให้แผ่นงาน macro ดังกล่าว อ้างอิงแผนงานที่ 2 ถึง 7 ครับ
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
If sh.Index >= 2 and sh.Index <= 7 Then
'Other code
ขอบคุณมากครับ สามารถนำไปประยุกต์กับเทอม2 ได้แล้วครับ :thup: