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