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

ลองแบบนี้ดูครับว่าตรงกับที่ต้องการหรือไม่ที่ 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

หากเป็นคำถามที่เกี่ยวกับการใช้ 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 อันแรกมาใช้ครับแบบเอาหมดทุกคอลัมน์เลย