Hoangquyenbong
Thành viên thường trực
- Tham gia
- 13/7/18
- Bài viết
- 205
- Được thích
- 39
Thử code sau : .....Kính nhờ các thành viên trên diễn đàn !
Em có 1 file excel ví dụ để nhờ các thành viên giúp đỡ ạ. Chi tiết em đã ghi trong sheet DienGiai ạ.
Em cảm ơn và mong nhận được sự giúp đỡ ạ !
Sub TongHop()
Dim Rng As Range, Ws As Worksheet, iRow&, Vung As Range, iCol&, iR&
For Each Ws In Worksheets
If Ws.Name <> "TongHop" Then
Set Vung = Ws.Range("B:B")
If Not Vung.Find("TOTAL") Is Nothing Then
iRow = Vung.Find("TOTAL").Row
iCol = Ws.Range("B10").CurrentRegion.Columns.Count
If iRow > 9 Then
Set Rng = Ws.Range("B9").Resize(iRow - 8, iCol)
Else
GoTo Tiep
End If
With Sheets("TongHop")
iR = .Range("A" & Rows.Count).End(3).Row + 1
If iR < 9 Then iR = 9 Else iR = iR
.Range("A" & iR).Resize(iRow - 8) = Ws.Name
Rng.Copy .Range("B" & iR)
End With
End If
End If
Tiep:
Next
End Sub
Trong khi chờ các giải pháp khác hãy tham khảo code sau:Kính nhờ các thành viên trên diễn đàn !
Em có 1 file excel ví dụ để nhờ các thành viên giúp đỡ ạ. Chi tiết em đã ghi trong sheet DienGiai ạ.
Em cảm ơn và mong nhận được sự giúp đỡ ạ !
Option Explicit
Sub Gop()
Dim i&, Lr&, t&, R&, Col&, d&
Dim Rng As Range
Dim Ws As Worksheet, Sh As Worksheet
Set Sh = Sheets("TongHop")
For Each Ws In Worksheets
If Ws.Name <> "TongHop" Then
If Not Ws.Range("B9:B10000").Find("TOTAL") Is Nothing Then
R = Ws.Range("B9:B10000").Find("TOTAL").Row
Col = Ws.Cells(10, 1000).End(xlToLeft).Column
Set Rng = Ws.Range(Ws.Cells(9, 2), Ws.Cells(R, Col))
d = Rng.Rows.Count
Lr = Sh.Range("B10000").End(xlUp).Row + 1
If Lr < 9 Then Lr = 9
Rng.Copy Sh.Range("B" & Lr)
Sh.Range("A" & Lr).Resize(d, 1) = Ws.Name
End If
End If
Next Ws
MsgBox "done"
End Sub
Giống nhau tới tận cách nghĩ luôn.Trong khi chờ các giải pháp khác hãy tham khảm code sau:
Hy vọng đúng ý.Mã:Option Explicit Sub Gop() Dim i&, Lr&, t&, R&, Col&, d& Dim Rng As Range Dim Ws As Worksheet, Sh As Worksheet Set Sh = Sheets("TongHop") For Each Ws In Worksheets If Ws.Name <> "TongHop" Then If Not Ws.Range("B9:B10000").Find("TOTAL") Is Nothing Then R = Ws.Range("B9:B10000").Find("TOTAL").Row Col = Ws.Cells(10, 1000).End(xlToLeft).Column Set Rng = Ws.Range(Ws.Cells(9, 2), Ws.Cells(R, Col)) d = Rng.Rows.Count Lr = Sh.Range("B10000").End(xlUp).Row + 1 If Lr < 9 Then Lr = 9 Rng.Copy Sh.Range("B" & Lr) Sh.Range("A" & Lr).Resize(d, 1) = Ws.Name End If End If Next Ws MsgBox "done" End Sub
Mình cảm ơn bạn đã giúp, mình chạy sẽ chạy thử.Thử code sau : .....
Mã:Sub TongHop() Dim Rng As Range, Ws As Worksheet, iRow&, Vung As Range, iCol&, iR& For Each Ws In Worksheets If Ws.Name <> "TongHop" Then Set Vung = Ws.Range("B:B") If Not Vung.Find("TOTAL") Is Nothing Then iRow = Vung.Find("TOTAL").Row iCol = Ws.Range("B10").CurrentRegion.Columns.Count If iRow > 9 Then Set Rng = Ws.Range("B9").Resize(iRow - 8, iCol) Else GoTo Tiep End If With Sheets("TongHop") iR = .Range("A" & Rows.Count).End(3).Row + 1 If iR < 9 Then iR = 9 Else iR = iR .Range("A" & iR).Resize(iRow - 8) = Ws.Name Rng.Copy .Range("B" & iR) End With End If End If Tiep: Next End Sub
Mình cảm ơn bạn nhiều, mình chạy thử xem sao.Trong khi chờ các giải pháp khác hãy tham khảo code sau:
Hy vọng đúng ý.Mã:Option Explicit Sub Gop() Dim i&, Lr&, t&, R&, Col&, d& Dim Rng As Range Dim Ws As Worksheet, Sh As Worksheet Set Sh = Sheets("TongHop") For Each Ws In Worksheets If Ws.Name <> "TongHop" Then If Not Ws.Range("B9:B10000").Find("TOTAL") Is Nothing Then R = Ws.Range("B9:B10000").Find("TOTAL").Row Col = Ws.Cells(10, 1000).End(xlToLeft).Column Set Rng = Ws.Range(Ws.Cells(9, 2), Ws.Cells(R, Col)) d = Rng.Rows.Count Lr = Sh.Range("B10000").End(xlUp).Row + 1 If Lr < 9 Then Lr = 9 Rng.Copy Sh.Range("B" & Lr) Sh.Range("A" & Lr).Resize(d, 1) = Ws.Name End If End If Next Ws MsgBox "done" End Sub
Thử code sau : .....
Mã:Sub TongHop() Dim Rng As Range, Ws As Worksheet, iRow&, Vung As Range, iCol&, iR& For Each Ws In Worksheets If Ws.Name <> "TongHop" Then Set Vung = Ws.Range("B:B") If Not Vung.Find("TOTAL") Is Nothing Then iRow = Vung.Find("TOTAL").Row iCol = Ws.Range("B10").CurrentRegion.Columns.Count If iRow > 9 Then Set Rng = Ws.Range("B9").Resize(iRow - 8, iCol) Else GoTo Tiep End If With Sheets("TongHop") iR = .Range("A" & Rows.Count).End(3).Row + 1 If iR < 9 Then iR = 9 Else iR = iR .Range("A" & iR).Resize(iRow - 8) = Ws.Name Rng.Copy .Range("B" & iR) End With End If End If Tiep: Next End Sub[ [QUOTE="BuiQuangThuan, post: 1098220, member: 420372"] Thử code sau : ..... [CODE]Sub TongHop() Dim Rng As Range, Ws As Worksheet, iRow&, Vung As Range, iCol&, iR& For Each Ws In Worksheets If Ws.Name <> "TongHop" Then Set Vung = Ws.Range("B:B") If Not Vung.Find("TOTAL") Is Nothing Then iRow = Vung.Find("TOTAL").Row iCol = Ws.Range("B10").CurrentRegion.Columns.Count If iRow > 9 Then Set Rng = Ws.Range("B9").Resize(iRow - 8, iCol) Else GoTo Tiep End If With Sheets("TongHop") iR = .Range("A" & Rows.Count).End(3).Row + 1 If iR < 9 Then iR = 9 Else iR = iR .Range("A" & iR).Resize(iRow - 8) = Ws.Name Rng.Copy .Range("B" & iR) End With End If End If Tiep: Next End Sub
Mình cảm ơn bạn nhiều, mình đã chạy thử và đúng như mình mong muốn ạThử code sau : .....
Mã:Sub TongHop() Dim Rng As Range, Ws As Worksheet, iRow&, Vung As Range, iCol&, iR& For Each Ws In Worksheets If Ws.Name <> "TongHop" Then Set Vung = Ws.Range("B:B") If Not Vung.Find("TOTAL") Is Nothing Then iRow = Vung.Find("TOTAL").Row iCol = Ws.Range("B10").CurrentRegion.Columns.Count If iRow > 9 Then Set Rng = Ws.Range("B9").Resize(iRow - 8, iCol) Else GoTo Tiep End If With Sheets("TongHop") iR = .Range("A" & Rows.Count).End(3).Row + 1 If iR < 9 Then iR = 9 Else iR = iR .Range("A" & iR).Resize(iRow - 8) = Ws.Name Rng.Copy .Range("B" & iR) End With End If End If Tiep: Next End Sub
Mình cảm ơn bạn nhiều, mình đã chạy thử và đúng như mình mong muốn ạTrong khi chờ các giải pháp khác hãy tham khảo code sau:
Hy vọng đúng ý.Mã:Option Explicit Sub Gop() Dim i&, Lr&, t&, R&, Col&, d& Dim Rng As Range Dim Ws As Worksheet, Sh As Worksheet Set Sh = Sheets("TongHop") For Each Ws In Worksheets If Ws.Name <> "TongHop" Then If Not Ws.Range("B9:B10000").Find("TOTAL") Is Nothing Then R = Ws.Range("B9:B10000").Find("TOTAL").Row Col = Ws.Cells(10, 1000).End(xlToLeft).Column Set Rng = Ws.Range(Ws.Cells(9, 2), Ws.Cells(R, Col)) d = Rng.Rows.Count Lr = Sh.Range("B10000").End(xlUp).Row + 1 If Lr < 9 Then Lr = 9 Rng.Copy Sh.Range("B" & Lr) Sh.Range("A" & Lr).Resize(d, 1) = Ws.Name End If End If Next Ws MsgBox "done" End Sub
Vậy lẽ ra chủ bài chỉ cần thử một trong hai bài #2 hoặc #3 thôi.Giống nhau tới tận cách nghĩ luôn.