Page 1 of 1

วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Mon Apr 01, 2013 1:36 pm
by ppichimaru
อยากให้ ตารางในชีท 1 กับ ชีท 2 รวมกัน ไปอยู่ที่ ชีท 3

โดยมีเงื่อนไขว่า
ประมาณว่า ให้เอาคอลัมน์ของแต่ละตารางมาต่อกัน คงไว้แต่ id

หากยังไม่เห็นภาพ เปิดดู ชีท 4 ครับ

เมื่อมีข้อมูลมากๆ จะลากก็อปมาวาง ก็ใช้เวลานาน

สามารถทำ คำสั่ง แมโคร ได้มั้ยครับ
ขอบคุณครับ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Mon Apr 01, 2013 8:23 pm
by joo
:D ลองแบบนี้ดูครับว่าตรงกับที่ต้องการหรือไม่ที่ Sheet3 เซลล์ A2 คีย์
=MATCH(Sheet1!$A2,Sheet1!$A$2:$A$21,0) Enter > Copy ลงล่าง
ที่ B2 คีย์
=INDIRECT("Sheet1!$B$2:$B$21") Enter > Copy ลงล่าง
ที่ C2 คีย์
=INDIRECT("Sheet2!$B$2:$B$21") Enter > Copy ลงล่าง
ที่ D2 คีย์
=INDIRECT("Sheet2!$C$2:$C$21") Enter > Copy ลงล่าง

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Tue Apr 02, 2013 8:36 am
by ppichimaru
เดี๋ยว จะลองดู นะครับ

ขอบคุณมากครับ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Tue Apr 02, 2013 9:19 am
by ppichimaru
รบกวน อีก นิดครับ

มี วิธี แบบ สร้างคำสั่ง แมโคร กดรัน แล้วมัน ทำงานออโต้ มั้ยอ่าครับ

แบบไม่ต้อง copy เอง

สมมติ ข้อมูล หมื่นๆ เรคคอร์ด ครับ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Tue Apr 02, 2013 10:13 am
by joo
:D หากเป็นคำถามที่เกี่ยวกับการใช้ VBA ต้องเขียนมาเองก่อนครับตามกฎข้อที่5 หรือไม่ก็ลองใช้วิธีบันทึก Macro แล้วนำโค๊ดมาปรับใช้ดูครับ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Tue Apr 02, 2013 9:09 pm
by ppichimaru
ครับ

ใช้ code ตัวนี้ พอรัน คำสั่งแล้ว

ตารางในชีท 2 ไปต่อท้าย ลงไปด้านล่าง ตารางที่ 1 ในชีท 3

ซึ่ง ไม่เรียงต่อกันแนวนอน

Code: Select all

Sub CollectData()
    Dim ws As Worksheet
    Dim r As Range
    Dim rTarget As Range
    Dim DataAll As String
    DataAll = "Sheet3"
    Application.ScreenUpdating = False
    For Each ws In Worksheets
        If ws.Name <> DataAll Then
            With Sheets(DataAll)
                Set rTarget = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
            End With
            Set r = ws.Range("A1", ws.Range("A" & Rows.Count).End(xlUp))
                r.SpecialCells(xlCellTypeConstants).EntireRow.Copy
                rTarget.PasteSpecial xlPasteValues
        End If
    Next ws
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Tue Apr 02, 2013 10:41 pm
by tupthai
ชีท3 เป็นชีทรวมข้อมูล

Code: Select all

Sub CollectData()
    Dim ws As Worksheet
    For Each ws In Worksheets
        If ws.Name <> "Sheet3" Then
             ws.UsedRange.Copy Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
        End If
    Next ws
    Application.CutCopyMode = False
End Sub

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Wed Apr 03, 2013 8:50 am
by ppichimaru
ขอบคุณ ท่าน tupthai มากครับ

ใกล้จะ สำเร็จละ ติดตรงที่ว่า มันก๊อป ซ้ำกัน 2 รอบอ่ะครับ

ยังไงรบกวนดู ไฟล์แนบอีกทีนะครับ

ขอบคุณมากครับ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Wed Apr 03, 2013 9:26 am
by tupthai
code ทำการรวมข้อมูลทุกชีท ยกเว้นชีทที่ชื่อ Sheet3 ซึ่งเป็นชีทสรุป
จะใช้ชีทไหนเป็นชีทสรุปก็เปลี่ยน code ตรงนี้
If ws.Name <> "Sheet3" Then

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Wed Apr 03, 2013 10:13 am
by ppichimaru
ในตาราง sheet3 ที่รวมออกมา อ่ะครับ

อยากให้มี คอลัมน์ id เพียง คอลัมน์เดียวอ่ะครับ

คือ ประมาณว่า หัวคอลัมน์

| ID | LAB | BP | TEST|

ให้เรียงตามนี้ สามารถ ทำได้มั้ยครับ

ท่าน tubthai

ขอบคุณมากครับ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Wed Apr 03, 2013 10:24 am
by joo
เปลี่ยนโค๊ดที่บรรทัดนี้ครับจาก

Code: Select all

ws.UsedRange.Copy Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)

ปรับเป็น

Code: Select all

ws.UsedRange.Copy Cells(1, Columns.Count).End(xlToLeft).Offset(1, 0)

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Wed Apr 03, 2013 10:33 am
by ppichimaru
คอลัมน์ lab จาก sheet1 ไม่มา ครับ

มาแต่ คอลัมน์ bp กับ test จาก sheet 2

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Wed Apr 03, 2013 11:49 am
by tupthai

Code: Select all

ws.UsedRange.Resize(ws.UsedRange.Rows().Count, 1).Copy Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Mon Apr 08, 2013 11:11 am
by ppichimaru
tupthai wrote:

Code: Select all

ws.UsedRange.Resize(ws.UsedRange.Rows().Count, 1).Copy Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)

ใช้ code นี้ แล้ว มันดึงแต่คอมลัมน์ id มา 2 คอลัมน์ อ่ะครับ

ที่มารวมใน ชีท 3

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Mon Apr 08, 2013 2:45 pm
by tupthai
ลองดูครับ

Code: Select all

Sub CollectData()
    Dim ws As Worksheet
    Dim source As Range
    Dim target As Range
    For Each ws In Worksheets
        If ws.Name <> "Sheet3" Then
            With ws.UsedRange
                     Set source = .Offset(0, 1).Resize(.Rows.Count)
                     Set target = Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
                     source.Copy target
            End With
        End If
    Next ws
    Application.CutCopyMode = False
End Sub

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Mon Apr 08, 2013 6:49 pm
by ppichimaru
tupthai wrote:ลองดูครับ

Code: Select all

Sub CollectData()
    Dim ws As Worksheet
    Dim source As Range
    Dim target As Range
    For Each ws In Worksheets
        If ws.Name <> "Sheet3" Then
            With ws.UsedRange
                     Set source = .Offset(0, 1).Resize(.Rows.Count)
                     Set target = Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
                     source.Copy target
            End With
        End If
    Next ws
    Application.CutCopyMode = False
End Sub
ขอบคุณมากๆครับ ที่ตอบ

สงสัย คงจะหมดหนทางละ

ทีนี้ code นี้ column id ไม่มา นอกนั้น มาครบ เลย จากชีท 1 , 2

ผมไม่มีความรู้ด้าน code vb เลย

สงสัย จะ ทำไม่ได้ละ เฮ้อออ

Re: วิธีการ รวมข้อมูล หลายชีท ครับ

Posted: Mon Apr 08, 2013 7:23 pm
by tupthai
ตามที่ให้code ไป เรียงตามลำดับที่ผมตอบไปcode จะทำงานดังนี้ครับ

อันแรก code จะเอามาทุกคอลัมน์
อันสอง code จะเอามาเฉพาะคอลัมน์แรก ซึ่งก็คือ ID
อันสาม code จะเอาทั้งหมดยกเว้น คอลัมน์แรก ซึ่งก็คือ ID
ทีนี้ code นี้ column id ไม่มา นอกนั้น มาครบ เลย จากชีท 1 , 2
ต้องกลับไปเอา code อันแรกมาใช้ครับแบบเอาหมดทุกคอลัมน์เลย