Page 1 of 1
นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Sat Sep 16, 2017 8:59 pm
by kio2002
นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
ผมต้องการนำยอดtotalจากทุกชีทมารวมไว้ที่ชีท"รวมสรุปยอด"โดยเรียงลำดับลงมาเรื่อยๆ
ยอดtotalจะอยู่ที่เซลล์D5ทุกชีทครับ
(ต้องขออภัยด้วยครับ ไฟล์นี้ผมยกตัวอย่างมา เนื่องจากไฟล์ของจริง ไม่สามารถเปิดเผยได้)
code ที่ได้เขียนไว้ มีดังนี้ครับ
Code: Select all
Sub Button2_Click()
Sheets("sheet2").Select
Range("d5").Copy
Sheets("ÃÇÁÊÃØ»ÂÍ´").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("sheet3").Select
Range("d5").Copy
Sheets("ÃÇÁÊÃØ»ÂÍ´").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("sheet4").Select
Range("d5").Copy
Sheets("ÃÇÁÊÃØ»ÂÍ´").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("sheet5").Select
Range("d5").Copy
Sheets("ÃÇÁÊÃØ»ÂÍ´").Select
Range("A5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("sheet6").Select
Range("d5").Copy
Sheets("ÃÇÁÊÃØ»ÂÍ´").Select
Range("A6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
แต่ติดตรงที่ว่า ผมต้อง new sheet ขึ้นมาเรื่อยๆ เป็นร้อยๆชีท และมีการเปลี่ยนชื่อชีททุกชีทด้วย
จึงรบกวนสมาชิกทุกๆท่านช่วยหน่อยครับ
ขอบคุณมากๆครับ
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Sat Sep 16, 2017 11:32 pm
by snasui

ตัวอย่าง Code ครับ
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("a2:a1000").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Value = sh.Range("d5").Value
End With
End If
Next sh
End Sub
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Sun Sep 17, 2017 8:01 pm
by kio2002
ขอบคุณมากครับ
code ตรงตามที่ต้องการเลยครับอาจารย์
แต่ผมปรับให้มันเริ่มวางตั้งแต่เซลล์ A2ลงมา ปรากฎว่ามันดึงค่าเฉพาะชีทสุดท้ายมา
รบกวนอาจารย์ช่วยหน่อยครับ
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("a2:a1000").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("a2", .Range("a" & .Rows.Count)).End(xlUp).Offset(1, 0).Value = sh.Range("d5").Value
End With
End If
Next sh
End Sub
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Mon Sep 18, 2017 12:09 am
by puriwutpokin
ใช่ให้ค่าแรกอยู่ที่ A3 หรือเปล่าถ้าใช่ปรับเป็น
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("a2:a1000").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("a3").Offset(Application.CountA(.Range("a3:a" & .Rows.Count)), 0).Value = sh.Range("d5").Value
End With
End If
Next sh
End Sub
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Mon Sep 18, 2017 10:11 pm
by kio2002
ผมลองใช้ code ของคุณ puriwutpokin แล้วครับ
เซลล์บางคอลัมน์ ค่ามันไม่เริ่มแถวเดียวกัน ทั้งๆที่เขียนcodeให้เริ่มแถวเดียวกัน คือแถวที่4
รบกวนกวนเช็คให้อีกทีครับ
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("b4:g31").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("b4").Offset(Application.CountA(.Range("b4:b" & .Rows.Count)), 0).Value = sh.Range("a4").Value
.Range("c4").Offset(Application.CountA(.Range("c4:c" & .Rows.Count)), 0).Value = sh.Range("b4").Value
.Range("d4").Offset(Application.CountA(.Range("d4:d" & .Rows.Count)), 0).Value = sh.Range("c4").Value
.Range("e4").Offset(Application.CountA(.Range("e4:e" & .Rows.Count)), 0).Value = sh.Range("d4").Value
.Range("f4").Offset(Application.CountA(.Range("f4:f" & .Rows.Count)), 0).Value = sh.Range("e4").Value
.Range("g4").Offset(Application.CountA(.Range("g4:g" & .Rows.Count)), 0).Value = sh.Range("f4").Value
End With
End If
Next sh
End Sub
ขอบคุณครับ
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Mon Sep 18, 2017 10:24 pm
by puriwutpokin
ปรับเป็น
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("b4:g31").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("b4:g4").Offset(Application.CountA(.Range("b4:b" & .Rows.Count)), 0).Value = sh.Range("a4:f4").Value
End With
End If
Next sh
End Sub
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Tue Sep 19, 2017 11:16 am
by menem
Code: Select all
Sub AllTotal()
StartRow = 2
StartCol = 1
TargetCell = "D5"
SheetsCount = ThisWorkbook.Worksheets.Count
CurrSheet = ActiveSheet.Name
'
' Clear Answer Area
'
WorkRow = StartRow - 1
For i = 1 To SheetsCount - 1
WorkRow = WorkRow + 1
Cells(WorkRow, StartCol).ClearContents
Next i
'
' Put Answer
'
WorkRow = StartRow - 1
For i = 1 To SheetsCount
If Worksheets(i).Name <> CurrSheet Then
WorkRow = WorkRow + 1
Cells(WorkRow, StartCol).Value = Worksheets(i).Range(TargetCell).Value
End If
Next i
End Sub
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Tue Sep 19, 2017 3:11 pm
by kio2002
puriwutpokin wrote:ปรับเป็น
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("b4:g31").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("b4:g4").Offset(Application.CountA(.Range("b4:b" & .Rows.Count)), 0).Value = sh.Range("a4:f4").Value
End With
End If
Next sh
End Sub
ขอโทดทีครับ คุณ puriwutpokin ข้อมูลจากชีทที่ต้นทาง อาจจะไม่ได้เรียงแบบนี้ครับ
sh.Range("a4:f4").Value
ข้อมูลต้นทางจะกระจายกันอยู่ ขอยกตัวอย่างอีกรอบนะครับ code ตามไฟล์แนบครับ
ขอบคุณครับ
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Tue Sep 19, 2017 3:50 pm
by puriwutpokin
ปรับเป็น
Code: Select all
Sub Button2_Click()
Dim sh As Worksheet
Worksheets("รวมสรุปยอด").Range("b4:g31").ClearContents
For Each sh In Worksheets
If sh.Name <> "รวมสรุปยอด" Then
With Worksheets("รวมสรุปยอด")
.Range("b4").Offset(Application.CountA(.Range("b4:b" & .Rows.Count)), 0).Value = sh.Range("b1").Value
.Range("c4").Offset(Application.CountA(.Range("c4:c" & .Rows.Count)), 0).Value = sh.Range("b10").Value
.Range("d3").Offset(Application.CountA(.Range("d4:d" & .Rows.Count)), 0).Value = sh.Range("b3").Value
.Range("e4").Offset(Application.CountA(.Range("e4:e" & .Rows.Count)), 0).Value = sh.Range("b5").Value
.Range("f3").Offset(Application.CountA(.Range("f4:f" & .Rows.Count)), 0).Value = sh.Range("c7").Value
.Range("g3").Offset(Application.CountA(.Range("g4:g" & .Rows.Count)), 0).Value = sh.Range("d7").Value
End With
End If
Next sh
End Sub
Re: นำยอดtotalจากทุกชีทมารวมไว้ในชีทเดียวแบบเรียงลำดับลงมาเรื่อยๆ
Posted: Wed Sep 20, 2017 7:52 pm
by kio2002
ได้แล้วครับ ของคุณท่านอาจารย์ snasui คุณpuriwutpokin และ คุณ menem ที่คอยช่วยเหลือครับ
code ของคุณ menem ผมจะลองเอาไปปรับใช้นะครับ