snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#1
Post
by ppichimaru » Mon Apr 01, 2013 1:36 pm
อยากให้ ตารางในชีท 1 กับ ชีท 2 รวมกัน ไปอยู่ที่ ชีท 3
โดยมีเงื่อนไขว่า
ประมาณว่า ให้เอาคอลัมน์ของแต่ละตารางมาต่อกัน คงไว้แต่ id
หากยังไม่เห็นภาพ เปิดดู ชีท 4 ครับ
เมื่อมีข้อมูลมากๆ จะลากก็อปมาวาง ก็ใช้เวลานาน
สามารถทำ คำสั่ง แมโคร ได้มั้ยครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
joo
Gold
Posts: 1213 Joined: Sat Apr 17, 2010 3:50 pm
#2
Post
by joo » Mon Apr 01, 2013 8:23 pm
ลองแบบนี้ดูครับว่าตรงกับที่ต้องการหรือไม่ที่ 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 ลงล่าง
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#3
Post
by ppichimaru » Tue Apr 02, 2013 8:36 am
เดี๋ยว จะลองดู นะครับ
ขอบคุณมากครับ
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#4
Post
by ppichimaru » Tue Apr 02, 2013 9:19 am
รบกวน อีก นิดครับ
มี วิธี แบบ สร้างคำสั่ง แมโคร กดรัน แล้วมัน ทำงานออโต้ มั้ยอ่าครับ
แบบไม่ต้อง copy เอง
สมมติ ข้อมูล หมื่นๆ เรคคอร์ด ครับ
joo
Gold
Posts: 1213 Joined: Sat Apr 17, 2010 3:50 pm
#5
Post
by joo » Tue Apr 02, 2013 10:13 am
หากเป็นคำถามที่เกี่ยวกับการใช้ VBA ต้องเขียนมาเองก่อนครับตามกฎข้อที่5 หรือไม่ก็ลองใช้วิธีบันทึก Macro แล้วนำโค๊ดมาปรับใช้ดูครับ
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#6
Post
by ppichimaru » Tue Apr 02, 2013 9:09 pm
ครับ
ใช้ 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
tupthai
Bronze
Posts: 302 Joined: Sat Feb 04, 2012 2:49 pm
#7
Post
by tupthai » Tue Apr 02, 2013 10:41 pm
ชีท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
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#8
Post
by ppichimaru » Wed Apr 03, 2013 8:50 am
ขอบคุณ ท่าน tupthai มากครับ
ใกล้จะ สำเร็จละ ติดตรงที่ว่า มันก๊อป ซ้ำกัน 2 รอบอ่ะครับ
ยังไงรบกวนดู ไฟล์แนบอีกทีนะครับ
ขอบคุณมากครับ
You do not have the required permissions to view the files attached to this post.
tupthai
Bronze
Posts: 302 Joined: Sat Feb 04, 2012 2:49 pm
#9
Post
by tupthai » Wed Apr 03, 2013 9:26 am
code ทำการรวมข้อมูลทุกชีท ยกเว้นชีทที่ชื่อ Sheet3 ซึ่งเป็นชีทสรุป
จะใช้ชีทไหนเป็นชีทสรุปก็เปลี่ยน code ตรงนี้
If ws.Name <> "Sheet3 " Then
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#10
Post
by ppichimaru » Wed Apr 03, 2013 10:13 am
ในตาราง sheet3 ที่รวมออกมา อ่ะครับ
อยากให้มี คอลัมน์ id เพียง คอลัมน์เดียวอ่ะครับ
คือ ประมาณว่า หัวคอลัมน์
| ID | LAB | BP | TEST|
ให้เรียงตามนี้ สามารถ ทำได้มั้ยครับ
ท่าน tubthai
ขอบคุณมากครับ
joo
Gold
Posts: 1213 Joined: Sat Apr 17, 2010 3:50 pm
#11
Post
by joo » Wed Apr 03, 2013 10:24 am
เปลี่ยนโค๊ดที่บรรทัดนี้ครับจาก
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)
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#12
Post
by ppichimaru » Wed Apr 03, 2013 10:33 am
คอลัมน์ lab จาก sheet1 ไม่มา ครับ
มาแต่ คอลัมน์ bp กับ test จาก sheet 2
tupthai
Bronze
Posts: 302 Joined: Sat Feb 04, 2012 2:49 pm
#13
Post
by tupthai » Wed Apr 03, 2013 11:49 am
Code: Select all
ws.UsedRange.Resize(ws.UsedRange.Rows().Count, 1).Copy Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#14
Post
by ppichimaru » Mon Apr 08, 2013 11:11 am
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
tupthai
Bronze
Posts: 302 Joined: Sat Feb 04, 2012 2:49 pm
#15
Post
by tupthai » Mon Apr 08, 2013 2:45 pm
ลองดูครับ
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
ppichimaru
Member
Posts: 9 Joined: Mon Apr 01, 2013 11:57 am
#16
Post
by ppichimaru » Mon Apr 08, 2013 6:49 pm
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 เลย
สงสัย จะ ทำไม่ได้ละ เฮ้อออ
tupthai
Bronze
Posts: 302 Joined: Sat Feb 04, 2012 2:49 pm
#17
Post
by tupthai » Mon Apr 08, 2013 7:23 pm
ตามที่ให้code ไป เรียงตามลำดับที่ผมตอบไปcode จะทำงานดังนี้ครับ
อันแรก code จะเอามาทุกคอลัมน์
อันสอง code จะเอามาเฉพาะคอลัมน์แรก ซึ่งก็คือ ID
อันสาม code จะเอาทั้งหมดยกเว้น คอลัมน์แรก ซึ่งก็คือ ID
ทีนี้ code นี้ column id ไม่มา นอกนั้น มาครบ เลย จากชีท 1 , 2
ต้องกลับไปเอา code อันแรกมาใช้ครับแบบเอาหมดทุกคอลัมน์เลย