Sub CopyFrom3Sheet()
Dim Dong As Long, Cot As Integer
Dim Sh As Worksheet, Rng As Range
On Error Resume Next
With Sheets("THop")
[A3:Z49].ClearContents
For Each Sh In ThisWorkbook.Worksheets
Dong = 3
If IsNumeric(Sh.Name) Then
Cot = Choose(CInt(Sh.Name), 2, 8, 14, 35)
Set Rng = Sh.[b3].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot)
Dong = Dong + Rng.Rows.Count + 2
Set Rng = Sh.[G16].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot)
Dong = Dong + 2 + Rng.Rows.Count
Set Rng = Sh.[e31].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot)
End If
Next Sh
End With
End Sub
Cảm ơn anh @SA_DQBạn thử chạy macro này:
PHP:Sub CopyFrom3Sheet() Dim Dong As Long, Cot As Integer Dim Sh As Worksheet, Rng As Range On Error Resume Next With Sheets("THop") [A3:Z49].ClearContents For Each Sh In ThisWorkbook.Worksheets Dong = 3 If IsNumeric(Sh.Name) Then Cot = Choose(CInt(Sh.Name), 2, 8, 14, 35) Set Rng = Sh.[b3].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot) Dong = Dong + Rng.Rows.Count + 2 Set Rng = Sh.[G16].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot) Dong = Dong + 2 + Rng.Rows.Count Set Rng = Sh.[e31].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot) End If Next Sh End With End Sub
Cảm ơn anh @SA_DQ rất nhiều1: Hãy đổi tên trang tính 'TongHop' thành 'THop' như trong macro hay ngược lại
2: Nếu vẫn kết quả cũ thì vô hiệu hóa dòng lệnh On Error Resume Next & bạn sẽ biết lỗi do đâu ở chương trình.
Báo cáo anh @SA_DQ kết quả mong muốn của mình là như nàyMình vừa chép macro bài trên đưa vô file bài 13 & cho chạy ra kết quả bình thường mà?
Hay chưa đạt iêu cầu của bạn ở chổ nào vậy; Bạn cần mô tả kỹ để chúng ta sửa cho đạt;
Còn vụ chép vùng thì macro nó làm được rồi mà: Qua mỗi trang tính (mang số) nó chép lần lượt từng vùng từ trên xuống dưới đó thây.
???
Kết quả mong muốn. |
* Cột đầu tiên cùng nằm trên cột "B" |
* Các vùng cách nhau 2 dòng |
* Và các vùng của các sheet cách nhau 3 cột |
Cảm ơn các bạn |
Sai ra làm sao thì chỉ mình bạn biết, sao lại nói "cái gì đó"....Nhưng code của anh đang bị sai cái gì đó.
Báo cáo anh @VetMini theo như kết quả mong muốn của mình thì như này:Sai ra làm sao thì chỉ mình bạn biết, sao lại nói "cái gì đó".
Code chạy ra kết quả A, nếu đúng thì phải là B.
Giải thích A và B khác nhau thế nào thì người ta mới biết.
Kết quả mong muốn. |
* Cột đầu tiên cùng nằm trên cột "B" |
* Các vùng cách nhau 2 dòng |
* Và các vùng của các sheet cách nhau 3 cột |
Sub CopyFrom3Sheets()
Dim Dong As Long
Dim Cot1 As Integer, Cot2 As Integer, Cot3 As Integer
Dim Sh As Worksheet, Rng As Range
'On Error Resume Next
With Sheets("THop")
[A3:Z49].EntireRow.Delete
Cot1 = 2
Cot2 = 2
Cot3 = 2
For Each Sh In ThisWorkbook.Worksheets
Dong = 3
If IsNumeric(Sh.Name) Then
'Cot = Choose(CInt(Sh.Name), 2, 8, 14, 35)
Set Rng = Sh.[b3].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot1)
Cot1 = Cot1 + Rng.Columns.Count + 3
Dong = Dong + Rng.Rows.Count + 2
Set Rng = Sh.[G16].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot2)
Cot2 = Cot2 + Rng.Columns.Count + 3
Dong = Dong + 2 + Rng.Rows.Count
Set Rng = Sh.[e31].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot3)
Cot3 = Cot3 + Rng.Columns.Count + 3
End If
Next Sh
End With
End Sub
Cảm ơn anh @VetMini và anh @SA_DQ đã nhiết tình giúp đỡ, bài đã rất chuẩnSửa code trên như sau:
Mã:Sub CopyFrom3Sheets() Dim Dong As Long Dim Cot1 As Integer, Cot2 As Integer, Cot3 As Integer Dim Sh As Worksheet, Rng As Range 'On Error Resume Next With Sheets("THop") [A3:Z49].EntireRow.Delete Cot1 = 2 Cot2 = 2 Cot3 = 2 For Each Sh In ThisWorkbook.Worksheets Dong = 3 If IsNumeric(Sh.Name) Then 'Cot = Choose(CInt(Sh.Name), 2, 8, 14, 35) Set Rng = Sh.[b3].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot1) Cot1 = Cot1 + Rng.Columns.Count + 3 Dong = Dong + Rng.Rows.Count + 2 Set Rng = Sh.[G16].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot2) Cot2 = Cot2 + Rng.Columns.Count + 3 Dong = Dong + 2 + Rng.Rows.Count Set Rng = Sh.[e31].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot3) Cot3 = Cot3 + Rng.Columns.Count + 3 End If Next Sh End With End Sub
Bởi vì bạn đặt tên sheet là 1, 2, 3 cho nên bài kia mới làm vậy....anh @VetMini cho mình hỏi cái dòng lệnh bên dưới có phải là (Nếu sheet nào có tên là chữ số thì nó mới tổng hợp phải không 2 anh?)
If IsNumeric(Sh.Name) Then
Cảm ơn anh @VetMini đã giải thíchBởi vì bạn đặt tên sheet là 1, 2, 3 cho nên bài kia mới làm vậy.
Bình thường thì người ta đặt một array sheets
Forv Each Sh In Array(WorkSheets("tên sheet 1"), WorkSheets("tên sheet 2"), WorkSheets("tên sheet 3", ...) )
Tức là trong trường hợp bài này:
Forv Each Sh In Array(WorkSheets("1"), WorkSheets("2"), WorkSheets("3") )
Hai điều trên thường ít khi đi với nhau....Anh cho mình một phương án tốt nhất để dễ làm và dễ hiểu được không?
...Anh có thể viết code ngán gọn hơn được không?
Lại phải phiền anh @VetMini chỉnh giúpBởi vì bạn đặt tên sheet là 1, 2, 3 cho nên bài kia mới làm vậy.
Bình thường thì người ta đặt một array sheets
Forv Each Sh In Array(WorkSheets("tên sheet 1"), WorkSheets("tên sheet 2"), WorkSheets("tên sheet 3", ...) )
Tức là trong trường hợp bài này:
Forv Each Sh In Array(WorkSheets("1"), WorkSheets("2"), WorkSheets("3") )
Sub CopyFrom3Sheets_2()
Dim Dong As Long
Dim Cot1 As Integer, Cot2 As Integer, Cot3 As Integer
Dim Sh As Worksheet, Rng As Range
'Set Sh = Array(Worksheets("1"), Worksheets("2"), Worksheets("3"))
'On Error Resume Next
With Sheets("THop")
'[A3:Z49].EntireRow.Delete
Cot1 = 2
Cot2 = 2
Cot3 = 2
'For Each Sh In ThisWorkbook.Worksheets
For Each Sh In Array(Worksheets("1"), Worksheets("2"), Worksheets("3"))
Dong = 3
'If IsNumeric(Sh.Name) Then
'Cot = Choose(CInt(Sh.Name), 2, 8, 14, 35)
Set Rng = Sh.[b3].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot1)
Cot1 = Cot1 + Rng.Columns.Count + 3
Dong = Dong + Rng.Rows.Count + 2
Set Rng = Sh.[G16].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot2)
Cot2 = Cot2 + Rng.Columns.Count + 3
Dong = Dong + 2 + Rng.Rows.Count
Set Rng = Sh.[e31].CurrentRegion
Rng.Copy Destination:=.Cells(Dong, Cot3)
Cot3 = Cot3 + Rng.Columns.Count + 3
'End If
Next Sh
End With
End Sub
Anh @VetMini sửa giúp mình tại sao nó lại không chạy nhỉ.Lại phải phiền anh @VetMini chỉnh giúp
Mình sửa như này thì nó sai ở đâu vậy anh @VetMini giúp mình với
Cảm ơn anh.
Mã:Sub CopyFrom3Sheets_2() Dim Dong As Long Dim Cot1 As Integer, Cot2 As Integer, Cot3 As Integer Dim Sh As Worksheet, Rng As Range 'Set Sh = Array(Worksheets("1"), Worksheets("2"), Worksheets("3")) 'On Error Resume Next With Sheets("THop") '[A3:Z49].EntireRow.Delete Cot1 = 2 Cot2 = 2 Cot3 = 2 'For Each Sh In ThisWorkbook.Worksheets For Each Sh In Array(Worksheets("1"), Worksheets("2"), Worksheets("3")) Dong = 3 'If IsNumeric(Sh.Name) Then 'Cot = Choose(CInt(Sh.Name), 2, 8, 14, 35) Set Rng = Sh.[b3].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot1) Cot1 = Cot1 + Rng.Columns.Count + 3 Dong = Dong + Rng.Rows.Count + 2 Set Rng = Sh.[G16].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot2) Cot2 = Cot2 + Rng.Columns.Count + 3 Dong = Dong + 2 + Rng.Rows.Count Set Rng = Sh.[e31].CurrentRegion Rng.Copy Destination:=.Cells(Dong, Cot3) Cot3 = Cot3 + Rng.Columns.Count + 3 'End If Next Sh End With End Sub