Tách 1 Sheet Thành Nhiều Sheet Theo điều Kiện | Giải Pháp Excel
- Trang chủ Có gì mới Hoạt động gần nhất Tác giả
- Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
- Video
Video về Excel Video về tin học khác Tin tức về tin học chung - Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
- Tài nguyên Đánh giá mới nhất Tìm tài nguyên
- Đóng góp
Tìm kiếm
Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Tìm kiếm Tìm nâng cao…- Tìm bài viết mới
- Tìm theo chuyên mục
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Thread starter Thread starter nguyendinhtutw
- Ngày gửi Ngày gửi 27/6/17
Người dùng đang xem chủ đề này
Đang trực tuyến: 2 (Thành viên: 0, Khách: 2)nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam Dear các bác, Em có 1 file excel như đính kèm, bây giờ em muốn tách sheet "Tong hop" thành các sheet (tạm gọi là "sheet con") dựa theo tên của người quản lý sao cho: - Khi thay đổi nội dung ở các sheet con (Chỉnh sửa nội dung trong cell, insert/delete dòng) thì sheet "Tong hop" cũng thay đổi theo. Các bác giúp em với ạ. Em cảm ơn các bác! Trân trọng, File đính kèm
- Sample 1.xlsx Sample 1.xlsx 9.6 KB · Đọc: 104
Hoang2013
Thành viên gắn bó


Tham gia 15/8/13 Bài viết 1,622 Được thích 1,598 Giới tính Nam Nghề nghiệp Hưu trí Nên chăng tách từ Sheet 'TongHop' vô 1 trang chi tiết; Nhưng thể hiện 'Người quản lí' nào đó mà bạn muốn; Upvote 0 H haonlh
Thành viên tích cực

Tham gia 2/12/07 Bài viết 1,177 Được thích 587 1. Chuyện tách sheet TongHop thành các sheet con là đơn giản. Như vậy các sheet con đều có cùng khuôn dạng. Chương trình này chỉ cần làm 1 lần. 2. Mỗi khi thay đổi nội dung ở các sheet con ( Chỉnh sửa nội dung trong cell, insert/delete dòng) thì sheet "Tong hop" cũng thay đổi theo thì làm theo sơ đồ sau a. Lập sự kiện Worksheet_Activate cho TongHop (viết code cho sự kiện này, gồm 2 mục sau) b. Xóa nội dung của TongHop c. Chép nội dung mọi sheet con về sheet TongHop. Upvote 0 nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam haonlh đã viết: 1. Chuyện tách sheet TongHop thành các sheet con là đơn giản. Như vậy các sheet con đều có cùng khuôn dạng. Chương trình này chỉ cần làm 1 lần. 2. Mỗi khi thay đổi nội dung ở các sheet con ( Chỉnh sửa nội dung trong cell, insert/delete dòng) thì sheet "Tong hop" cũng thay đổi theo thì làm theo sơ đồ sau a. Lập sự kiện Worksheet_Activate cho TongHop (viết code cho sự kiện này, gồm 2 mục sau) b. Xóa nội dung của TongHop c. Chép nội dung mọi sheet con về sheet TongHop. Nhấp chuột vào đây để mở rộng...Em cảm ơn bác, bác có thể giúp em đoạn code này không? em cũng đang tìm hiểu trên mạng nhưng em còn quá yếu về VBA nên chưa thể tự làm được việc này. Em cảm ơn! Upvote 0 H
haonlh
Thành viên tích cực

Tham gia 2/12/07 Bài viết 1,177 Được thích 587 OK. Giờ hơi muộn. Lo công việc đã. Có thể tối nay hoặc mai Upvote 0 phuyen89
Thành viên tích cực

Tham gia 20/11/08 Bài viết 875 Được thích 341 Nghề nghiệp Student haonlh đã viết: 1. Chuyện tách sheet TongHop thành các sheet con là đơn giản. Như vậy các sheet con đều có cùng khuôn dạng. Chương trình này chỉ cần làm 1 lần. 2. Mỗi khi thay đổi nội dung ở các sheet con ( Chỉnh sửa nội dung trong cell, insert/delete dòng) thì sheet "Tong hop" cũng thay đổi theo thì làm theo sơ đồ sau a. Lập sự kiện Worksheet_Activate cho TongHop (viết code cho sự kiện này, gồm 2 mục sau) b. Xóa nội dung của TongHop c. Chép nội dung mọi sheet con về sheet TongHop. Nhấp chuột vào đây để mở rộng...Mục b, và c cứ làm thế thôi, chứ không biết chính xác được sheet con có chỉnh sửa hay không phải không Anh. Upvote 0
phuyen89
Thành viên tích cực

Tham gia 20/11/08 Bài viết 875 Được thích 341 Nghề nghiệp Student haonlh đã viết: 1. Chuyện tách sheet TongHop thành các sheet con là đơn giản. Như vậy các sheet con đều có cùng khuôn dạng. Chương trình này chỉ cần làm 1 lần. 2. Mỗi khi thay đổi nội dung ở các sheet con ( Chỉnh sửa nội dung trong cell, insert/delete dòng) thì sheet "Tong hop" cũng thay đổi theo thì làm theo sơ đồ sau a. Lập sự kiện Worksheet_Activate cho TongHop (viết code cho sự kiện này, gồm 2 mục sau) b. Xóa nội dung của TongHop c. Chép nội dung mọi sheet con về sheet TongHop. Nhấp chuột vào đây để mở rộng...Mình triển khai ý thứ b và c của Anh. các bạn hỗ trợ ý a nhé. PHP: Sao chép. Private Sub Worksheet_Activate() Dim Wks As Worksheet Range("A3:G10000").ClearContents For Each Wks In Worksheets If Wks.Name <> "Tong hop" Then Wks.Range("A3", Wks.Range("C60000").End(xlUp)).Resize(, 5).Copy Sheets("Tong hop").Range("C60000").End(xlUp).Offset(1, -2).PasteSpecial xlPasteValues End If Next Wks End Sub
File đính kèm
- Copy of Sample 1.xlsb Copy of Sample 1.xlsb 18 KB · Đọc: 126
phuyen89
Thành viên tích cực

Tham gia 20/11/08 Bài viết 875 Được thích 341 Nghề nghiệp Student nguyendinhtutw đã viết: Dear các bác, Em có 1 file excel như đính kèm, bây giờ em muốn tách sheet "Tong hop" thành các sheet (tạm gọi là "sheet con") dựa theo tên của người quản lý sao cho: - Khi thay đổi nội dung ở các sheet con (Chỉnh sửa nội dung trong cell, insert/delete dòng) thì sheet "Tong hop" cũng thay đổi theo. Các bác giúp em với ạ. Em cảm ơn các bác! Trân trọng, Nhấp chuột vào đây để mở rộng...Mình tách ra như File đính kèm. Code em viết còn lung tung quá, các anh chị giúp em thay đổi với. Ý tưởng của Em thế này. - Em cho cột Họ và Tên vào 1 đối tượng Dictionary - Em duyệt một mảng lấy từng dòng họ và Tên so với Họ và tên đã lưu trong Dictionary - Sau khi so ra kết quả, Em Add vào một mảng mới - Add new sheet, để dán cái mảng đó xuống bảng tính. Mã: Sao chép. Sub SplitSheet() Dim Dic As New Dictionary Dim sFullName(), dFullName() Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer sFullName = Sheets("Tonghop").Range("A3:G20").Value ReDim dFullName(1 To UBound(sFullName, 1), 1 To UBound(sFullName, 2)) '---------------------------------------------------------------------- For i = 1 To UBound(sFullName, 1) If Not Dic.Exists(sFullName(i, 3)) Then Dic.Add sFullName(i, 3), "" End If Next i '---------------------------------------------------------------------- For j = 1 To Dic.Count For k = 1 To UBound(sFullName, 1) If sFullName(k, 3) = Dic.Keys()(j - 1) Then m = m + 1 For n = 1 To 7 dFullName(m, n) = sFullName(k, n) Next n End If Next k Worksheets.Add After:=Sheets("Tonghop") ActiveSheet.Range("A3").Resize(18, 7) = dFullName ReDim dFullName(1 To UBound(sFullName, 1), 1 To UBound(sFullName, 2)) k = 0: m = 0: n = 0 Next j End Sub
File đính kèm
- Sample 1.xlsb Sample 1.xlsb 23.3 KB · Đọc: 99
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam phuyen89 đã viết: Mình tách ra như File đính kèm. Code em viết còn lung tung quá, các anh chị giúp em thay đổi với. Ý tưởng của Em thế này. - Em cho cột Họ và Tên vào 1 đối tượng Dictionary - Em duyệt một mảng lấy từng dòng họ và Tên so với Họ và tên đã lưu trong Dictionary - Sau khi so ra kết quả, Em Add vào một mảng mới - Add new sheet, để dán cái mảng đó xuống bảng tính. Mã: Sao chép. Sub SplitSheet() Dim Dic As New Dictionary Dim sFullName(), dFullName() Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer sFullName = Sheets("Tonghop").Range("A3:G20").Value ReDim dFullName(1 To UBound(sFullName, 1), 1 To UBound(sFullName, 2)) '---------------------------------------------------------------------- For i = 1 To UBound(sFullName, 1) If Not Dic.Exists(sFullName(i, 3)) Then Dic.Add sFullName(i, 3), "" End If Next i '---------------------------------------------------------------------- For j = 1 To Dic.Count For k = 1 To UBound(sFullName, 1) If sFullName(k, 3) = Dic.Keys()(j - 1) Then m = m + 1 For n = 1 To 7 dFullName(m, n) = sFullName(k, n) Next n End If Next k Worksheets.Add After:=Sheets("Tonghop") ActiveSheet.Range("A3").Resize(18, 7) = dFullName ReDim dFullName(1 To UBound(sFullName, 1), 1 To UBound(sFullName, 2)) k = 0: m = 0: n = 0 Next j End Sub Nhấp chuột vào đây để mở rộng...Cảm ơn phuyen89, tuy nhiên, sau khi xem file của bác em thấy có các vấn đề sau: - Khi click commandbutton nhiều lần thì sheet cũng bị tách theo từng đó lần. - Khi chỉnh sửa giữ liệu trên các Sheet con thì Sheet "Tonghop" chưa được cập nhật. Upvote 0
phuyen89
Thành viên tích cực

Tham gia 20/11/08 Bài viết 875 Được thích 341 Nghề nghiệp Student nguyendinhtutw đã viết: Cảm ơn phuyen89, tuy nhiên, sau khi xem file của bác em thấy có các vấn đề sau: - Khi click commandbutton nhiều lần thì sheet cũng bị tách theo từng đó lần. - Khi chỉnh sửa giữ liệu trên các Sheet con thì Sheet "Tonghop" chưa được cập nhật. Nhấp chuột vào đây để mở rộng...+ Mình tiến hành Xoá Sheet trước khi Tạo ra. PHP: Sao chép. Private Sub Delete_Sheet() Application.DisplayAlerts = True Dim Wks As Worksheet For Each Wks In Worksheets If Wks.Name <> "Tonghop" Then Wks.Delete End If Application.DisplayAlerts = False Next Wks End Sub
File đính kèm
- Copy of Sample 1.xlsb Copy of Sample 1.xlsb 21.9 KB · Đọc: 44
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam hpkhuong đã viết: - Click thì phải biết tự lượng sức. Click rồi thì đừng Click nữa??? Tại sao không kiểm soát mình làm những gì? - Không ai làm 2 chiều. 1 là Sheet Tổng Hợp chuẩn -> Tách ra sheet con. 2 là Các sheet con có sẵn (và là chuẩn) -> Chạy code dữ liệu sẽ tổng hợp về sheet Tổng Hợp. Coi chừng làm kiểu nữa vời 2 chiều có ngày ăn "Hành" đó... Ghi chú: tôi chỉ góp ý, chứ không biết làm nha! Nhấp chuột vào đây để mở rộng...Cảm ơn bác, nhưng em lưu ý là việc tách này chỉ làm 1 lần, để áp dụng cho dữ liệu hiện đã có sẵn trong sheet "tonghop", kể từ sau này thì sẽ không cập nhật dữ liệu mới trực tiếp vào sheet "tong hop" nữa, mà việc này sẽ được thực hiện thông qua việc cập nhật ở các Sheet con Upvote 0
Ba Tê
Cạo Rồi Khỏi Gội
Tham gia 5/5/09 Bài viết 12,123 Được thích 17,590 Giới tính Namnguyendinhtutw đã viết: Cảm ơn bác, nhưng em lưu ý là việc tách này chỉ làm 1 lần, để áp dụng cho dữ liệu hiện đã có sẵn trong sheet "tonghop", kể từ sau này thì sẽ không cập nhật dữ liệu mới trực tiếp vào sheet "tong hop" nữa, mà việc này sẽ được thực hiện thông qua việc cập nhật ở các Sheet con Nhấp chuột vào đây để mở rộng...1 sheet TONGHOP, muốn tìm người nào thì Auto Filter người đó, nhập thêm dữ liệu hay xóa dòng "mút chỉ", Sort lại 1 phát là "gom". Upvote 0
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam Em có tìm hiểu được trên mạng và làm được bảng như đính kèm, tuy nhiên mới chỉ tách được tiêu đề, chưa tách được nội dung, các bác xem giúp em xem đang bị sai chỗ nào với ạ. File đính kèm
- Sample 1.xlsm Sample 1.xlsm 22.7 KB · Đọc: 20
vanthinh3101
Thành viên tích cực

Tham gia 24/1/15 Bài viết 1,129 Được thích 1,494 Giới tính Nam Nghề nghiệp Finance nguyendinhtutw đã viết: Cảm ơn bác, nhưng em lưu ý là việc tách này chỉ làm 1 lần, để áp dụng cho dữ liệu hiện đã có sẵn trong sheet "tonghop", kể từ sau này thì sẽ không cập nhật dữ liệu mới trực tiếp vào sheet "tong hop" nữa, mà việc này sẽ được thực hiện thông qua việc cập nhật ở các Sheet con Nhấp chuột vào đây để mở rộng...Tôi thấy cảnh bảo của @hpkhuong không sai đâu, bạn đang làm ngược đấy. Bạn nên dùng sheets Tổng hợp để theo dõi mọi số liệu, sau mỗi lần thay đổi số liệu, bạn cập nhật lại vào các Sheet con là cách hay hơn. Tôi sẽ làm qua các bước sau: - Bước 1: Dùng lệnh Offset để tạo Name động cho vùng dữ liệu của Bảng tổng hợp - Bước 2: Tạo 1 sheet PivotTable để tạo Pivot Table - Bước 3: Dùng code của @kyo để bảng Pivot Table có thể tự động cập nhật khi dữ liệu nguồn thay đổi - Bước 4: Dùng code của @be09 để tách sheets theo Pivot Table Khi dữ liệu ở Sheet Tong hop thay đổi, bạn click lại nút Tách Sheets là các dữ liệu con sẽ thay đổi theo Bạn xem file đính kèm nhé!
File đính kèm
- Sample 1.xlsm Sample 1.xlsm 34.7 KB · Đọc: 114
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam hpkhuong đã viết: 1. Chạy code này để tách (chạy 1 lần đầu thôi). Mã: Sao chép. Public Sub Tach_Sheet() Dim Dic As Object, Tmp, I As Long, K As Long, sArr, Rng As Range, Ws As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next For Each Ws In Worksheets If Ws.Name <> "Tong hop" Then Ws.Delete Next sArr = Range("C3", Range("C3").End(4)).Value Set Rng = Range("A2").CurrentRegion Set Dic = CreateObject("Scripting.Dictionary") For I = 1 To UBound(sArr) If sArr(I, 1) <> Empty Then Tmp = sArr(I, 1) If Not Dic.exists(Tmp) Then Dic.Add Tmp, "" Rng.AutoFilter 3, Tmp Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Tmp Rng.SpecialCells(12).Copy Sheets(Tmp).Range("A2").PasteSpecial 8 Sheets(Tmp).Range("A2").PasteSpecial xlPasteAll End If End If Next Sheet1.Activate Sheet1.ShowAllData Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub 2. Code này copy vào sheet "Tong hop". Cập nhật dữ liệu ở sheet con sẽ tự động chạy về tổng hợp Mã: Sao chép. Private Sub Worksheet_Activate() Dim sArr, dArr(1 To 65000, 1 To 7), I As Long, J As Long, K As Long, Ws As Worksheet Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name <> "Tong hop" Then sArr = Ws.Range("A2").CurrentRegion.Value For I = 2 To UBound(sArr) K = K + 1 dArr(K, 1) = K For J = 2 To 7 dArr(K, J) = sArr(I, J) Next Next End If Next If K Then With Sheets("Tong hop") .Range("A2").CurrentRegion.Offset(1).Borders.LineStyle = 0 .Range("A2").CurrentRegion.Offset(1).ClearContents .Range("A3").Resize(K, 7).Value = dArr .Range("A3").Resize(K, 7).Borders.LineStyle = 1 End With End If Application.ScreenUpdating = True End Sub Nhấp chuột vào đây để mở rộng...Em cảm ơn bác, chúc bác 1 ngày tốt lành
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam hpkhuong đã viết: 1. Chạy code này để tách (chạy 1 lần đầu thôi). Mã: Sao chép. Public Sub Tach_Sheet() Dim Dic As Object, Tmp, I As Long, K As Long, sArr, Rng As Range, Ws As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next For Each Ws In Worksheets If Ws.Name <> "Tong hop" Then Ws.Delete Next sArr = Range("C3", Range("C3").End(4)).Value Set Rng = Range("A2").CurrentRegion Set Dic = CreateObject("Scripting.Dictionary") For I = 1 To UBound(sArr) If sArr(I, 1) <> Empty Then Tmp = sArr(I, 1) If Not Dic.exists(Tmp) Then Dic.Add Tmp, "" Rng.AutoFilter 3, Tmp Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Tmp Rng.SpecialCells(12).Copy Sheets(Tmp).Range("A2").PasteSpecial 8 Sheets(Tmp).Range("A2").PasteSpecial xlPasteAll End If End If Next Sheet1.Activate Sheet1.ShowAllData Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub 2. Code này copy vào sheet "Tong hop". Cập nhật dữ liệu ở sheet con sẽ tự động chạy về tổng hợp Mã: Sao chép. Private Sub Worksheet_Activate() Dim sArr, dArr(1 To 65000, 1 To 7), I As Long, J As Long, K As Long, Ws As Worksheet Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name <> "Tong hop" Then sArr = Ws.Range("A2").CurrentRegion.Value For I = 2 To UBound(sArr) K = K + 1 dArr(K, 1) = K For J = 2 To 7 dArr(K, J) = sArr(I, J) Next Next End If Next If K Then With Sheets("Tong hop") .Range("A2").CurrentRegion.Offset(1).Borders.LineStyle = 0 .Range("A2").CurrentRegion.Offset(1).ClearContents .Range("A3").Resize(K, 7).Value = dArr .Range("A3").Resize(K, 7).Borders.LineStyle = 1 End With End If Application.ScreenUpdating = True End Sub Nhấp chuột vào đây để mở rộng...Dear bác hpkhuong, Theo code của bác thì lúc tách file sẽ xóa toàn bộ các sheet khác, chỉ để lại sheet "tonghop", nhưng file thực tế em đang thực hiện có 1 sheet ( tạm gọi là Sheet A) không thể xóa đi được, việc này em có thể sửa code để lúc tách file sẽ không xóa sheet đó. Nhưng một vấn đề nảy sinh khi tổng hợp dữ liệu từ các sheet con về sheet "tonghop", có thể sửa code của bác như thế nào để không cho dữ liệu từ Sheet A nhảy về sheet "tonghop' được không? Em cảm ơn bác! Upvote 0
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam hpkhuong đã viết: Bạn biết sửa code -> bạn tự xử được mà. Nếu sheet tạm của bạn ít thì bạn có thể xem câu lệnh trong code để loại trừ nó. Trường hợp sheet tạm nhiều thì: ->Vậy bạn phải có 1 danh sách tên những sheet cần tổng hợp về sheet tổng hợp. Và dùng vòng lặp duyệt danh sách này. Nếu thỏa thì lấy về tổng hợp. Nhấp chuột vào đây để mở rộng...Lúc tách sheet, em có sửa đoạn code như sau: If Ws.Name <> "Tong hop" and Ws.Name <> "SheetA" Then Ws.Delete em đã thử và thấy vẫn tách được sheet và giữ được sheetA không bi xóa. ..... Tuy nhiên, với tư duy tương tự khi sửa code để cho dữ liệu nhảy từ các sheet con về thì file tổng hợp bị lộn xộn rất nhiều: If Ws.Name <> "Tong hop" and Ws.Name <> "SheetA" Then Upvote 0
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam hpkhuong đã viết: Bạn biết sửa code -> bạn tự xử được mà. Nếu sheet tạm của bạn ít thì bạn có thể xem câu lệnh trong code để loại trừ nó. Trường hợp sheet tạm nhiều thì: ->Vậy bạn phải có 1 danh sách tên những sheet cần tổng hợp về sheet tổng hợp. Và dùng vòng lặp duyệt danh sách này. Nếu thỏa thì lấy về tổng hợp. Nhấp chuột vào đây để mở rộng...Như file đính kèm em đã tách được file theo code của bác, tuy nhiên khi áp dụng code như bên dưới để cho dữ liệu từ sheet con tự tổng hợp về sheet "tonghop" thì không được: Private Sub Worksheet_Activate() Dim sArr, dArr(1 To 65000, 1 To 45), I As Long, J As Long, K As Long, Ws As Worksheet Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name <> "TH Hop dong" and Ws.Name <> "Drop" Then sArr = Ws.Range("A3").CurrentRegion.Value For I = 2 To UBound(sArr) K = K + 1 dArr(K, 1) = K For J = 2 To 45 dArr(K, J) = sArr(I, J) Next Next End If Next If K Then With Sheets("TH Hop dong") .Range("A3").CurrentRegion.Offset(1).Borders.LineStyle = 0 .Range("A3").CurrentRegion.Offset(1).ClearContents .Range("A4").Resize(K, 45).Value = dArr .Range("A4").Resize(K, 45).Borders.LineStyle = 1 End With End If Application.ScreenUpdating = True End Sub
File đính kèm
- DEV333.xlsm DEV333.xlsm 216.5 KB · Đọc: 47
nguyendinhtutw
Thành viên chính thức 

Tham gia 17/4/17 Bài viết 73 Được thích 3 Giới tính Nam hpkhuong đã viết: Mã: Sao chép. Public Sub Tach_Sheet() Dim Dic As Object, Tmp, I As Long, K As Long, sArr, Rng As Range, Ws As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next For Each Ws In Worksheets If Ws.Name <> "TH Hop dong" And Ws.Name <> "Drop" Then Ws.Delete Next Set Rng = Sheet1.UsedRange sArr = Rng.Value Set Dic = CreateObject("Scripting.Dictionary") For I = 4 To UBound(sArr) If sArr(I, 4) <> Empty Then Tmp = sArr(I, 4) If Not Dic.exists(Tmp) Then Dic.Add Tmp, "" Rng.Offset(3).AutoFilter 4, Tmp Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Tmp Rng.SpecialCells(12).Copy Sheets(Tmp).Range("A1").PasteSpecial 8 Sheets(Tmp).Range("A1").PasteSpecial xlPasteAll End If End If Next Sheet1.Activate Sheet1.ShowAllData Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub Mã: Sao chép. Private Sub Worksheet_Activate() Dim sArr, dArr(1 To 65000, 1 To 45), I As Long, J As Long, K As Long, Ws As Worksheet Application.ScreenUpdating = False For Each Ws In Worksheets If Ws.Name <> "TH Hop dong" And Ws.Name <> "Drop" Then sArr = Ws.UsedRange.Value For I = 4 To UBound(sArr) If Len(sArr(I, 4)) Then K = K + 1 For J = 1 To 45 dArr(K, J) = sArr(I, J) Next End If Next End If Next If K Then With Sheets("TH Hop dong") .UsedRange.Offset(3).Borders.LineStyle = 0 .UsedRange.Offset(3).ClearContents .Range("A4").Resize(K, 45).Value = dArr .Range("A4").Resize(K, 45).Borders.LineStyle = 1 End With End If Application.ScreenUpdating = True End Sub Nhấp chuột vào đây để mở rộng...Em cảm ơn bác
Lê Duy Thương
Cạo lấy gì gội (Dịch quá không gội được)
Tham gia 14/10/09 Bài viết 3,116 Được thích 4,854phuyen89 đã viết: + Mình tiến hành Xoá Sheet trước khi Tạo ra. PHP: Sao chép. Private Sub Delete_Sheet() Application.DisplayAlerts = True Dim Wks As Worksheet For Each Wks In Worksheets If Wks.Name <> "Tonghop" Then Wks.Delete End If Application.DisplayAlerts = False Next Wks End Sub Nhấp chuột vào đây để mở rộng...Bổ sung. Có thể viết thêm code kiểm tra sheet tồn tại chưa. Nếu sheet đã tồn tại rồi thì phải làm gì.... Upvote 0
Gakafu
Thành viên mới 
Tham gia 16/11/20 Bài viết 4 Được thích 2 phuyen89 đã viết: Range("C60000").End(xlUp)).Resize(, 5).Copy Sheets("Tong hop").Range("C60000").End(xlUp).Offset(1, -2).PasteSpecial xlPasteValues End If Next Wks End Sub Nhấp chuột vào đây để mở rộng...Anh ơi , hỗ trợ giúp em được không ạ ? Upvote 0
be_09
Biên Hòa, Đồng Nai
Tham gia 9/4/11 Bài viết 9,972 Được thích 9,884 Nghề nghiệp Công chứcGakafu đã viết: Anh ơi , hỗ trợ giúp em được không ạ ? Nhấp chuột vào đây để mở rộng...Góp ý cho bạn: 1/ Bạn đã đăng bài trong chủ đề tách sheet thì bạn nên đính kèm File và tiếp tục hỏi ở đây chứ không nên mở Topic mới vì có thể sẽ vi phạm nội quy. 2/ Cách hỏi của bạn trống không thế này "hỗ trợ giúp em được không ạ ?" là thiếu tôn trọng với các tành viên trên diễn đàn. 3/ Khi hỏi thì nên cụ thể việc tách sheet của bạn thì dựa vào cột nào? Của sheet nào? Upvote 0
test1986
Thành viên chính thức 

Tham gia 19/10/22 Bài viết 55 Được thích 11 vanthinh3101 đã viết: Tôi thấy cảnh bảo của @hpkhuong không sai đâu, bạn đang làm ngược đấy. Bạn nên dùng sheets Tổng hợp để theo dõi mọi số liệu, sau mỗi lần thay đổi số liệu, bạn cập nhật lại vào các Sheet con là cách hay hơn. Tôi sẽ làm qua các bước sau: - Bước 1: Dùng lệnh Offset để tạo Name động cho vùng dữ liệu của Bảng tổng hợp - Bước 2: Tạo 1 sheet PivotTable để tạo Pivot Table - Bước 3: Dùng code của @kyo để bảng Pivot Table có thể tự động cập nhật khi dữ liệu nguồn thay đổi - Bước 4: Dùng code của @be09 để tách sheets theo Pivot Table Khi dữ liệu ở Sheet Tong hop thay đổi, bạn click lại nút Tách Sheets là các dữ liệu con sẽ thay đổi theo Bạn xem file đính kèm nhé! Nhấp chuột vào đây để mở rộng...Em đang gặp phải một vấn đề kỳ lạ khi chạy thử file đính kèm ở bài viết #14. Chạy file thì không báo lỗi nhưng có lúc thì sheet được tách ra sẽ có tên là "Nguyễn Văn A", "Nguyễn Văn B", "Nguyễn Văn C" nhưng có lúc sheet tách ra lại có tên là "Detail1", "Detail2", "Detail3". Tên sheet tách ra sẽ được đổi tên theo một trong hai kiểu trên. PHP: Sao chép. Sub DoiTen_SheetTach() Dim sht As Worksheet For Each sht In ThisWorkbook.Worksheets On Error Resume Next If sht.Name <> "PivotTable" And sht.Name <> "Tong hop" And sht.Name <> "PivotTable" Then sht.Name = sht.Range("C2") sht.Activate Cells.EntireColumn.AutoFit Sheets("PivotTable").Select End If Next sht End Sub Em đang nguyên cứu để tự động đổi tên sheet từ đoạn code của bác @vanthinh3101 để áp dụng vào công việc nhưng kết quả chạy thử làm em lú lẫn luôn. Mong mọi người xem bài có thể giúp em tìm ra nguyên nhân kết quả đổi tên không thống nhất như vậy ạ. Em xin cảm ơn. Upvote 0 H
hvnhpro
Thành viên hoạt động


Tham gia 3/3/11 Bài viết 163 Được thích 93 Giới tính Nam test1986 đã viết: Em đang gặp phải một vấn đề kỳ lạ khi chạy thử file đính kèm ở bài viết #14. Chạy file thì không báo lỗi nhưng có lúc thì sheet được tách ra sẽ có tên là "Nguyễn Văn A", "Nguyễn Văn B", "Nguyễn Văn C" nhưng có lúc sheet tách ra lại có tên là "Detail1", "Detail2", "Detail3". Tên sheet tách ra sẽ được đổi tên theo một trong hai kiểu trên. PHP: Sao chép. Sub DoiTen_SheetTach() Dim sht As Worksheet For Each sht In ThisWorkbook.Worksheets On Error Resume Next If sht.Name <> "PivotTable" And sht.Name <> "Tong hop" And sht.Name <> "PivotTable" Then sht.Name = sht.Range("C2") sht.Activate Cells.EntireColumn.AutoFit Sheets("PivotTable").Select End If Next sht End Sub Em đang nguyên cứu để tự động đổi tên sheet từ đoạn code của bác @vanthinh3101 để áp dụng vào công việc nhưng kết quả chạy thử làm em lú lẫn luôn. Mong mọi người xem bài có thể giúp em tìm ra nguyên nhân kết quả đổi tên không thống nhất như vậy ạ. Em xin cảm ơn. Nhấp chuột vào đây để mở rộng...Vụ đổi tên sheet thì bạn nên hiểu đoạn này "sht.Name = sht.Range("C2")" Tên sheet sẽ được đặt theo Range("C2") tại sheet cần đổi. Upvote 0
test1986
Thành viên chính thức 

Tham gia 19/10/22 Bài viết 55 Được thích 11 hvnhpro đã viết: Vụ đổi tên sheet thì bạn nên hiểu đoạn này "sht.Name = sht.Range("C2")" Tên sheet sẽ được đặt theo Range("C2") tại sheet cần đổi. Nhấp chuột vào đây để mở rộng...Dạ đúng rồi ạ, nên nếu đúng theo lý thuyết thì sẽ phải đổi tên sheet thống nhất là "Nguyễn Văn A", "Nguyễn Văn B", Nguyễn Văn C" là kết quả đúng. Nhưng không hiểu vì sao lại có trường hợp đổi tên thứ 2 là sheet thay vì đổi tên như trên thì lại đổi tên thành "Detail1", "Detail2", "detail3" mà trong table hàng cột đều không có giá trị"Detail1", "Detail2", "Detail3" để mà gán tên cho sheet, giống như là trên trời rơi xuống vậy á anh. Upvote 0 H
hvnhpro
Thành viên hoạt động


Tham gia 3/3/11 Bài viết 163 Được thích 93 Giới tính Nam test1986 đã viết: Dạ đúng rồi ạ, nên nếu đúng theo lý thuyết thì sẽ phải đổi tên sheet thống nhất là "Nguyễn Văn A", "Nguyễn Văn B", Nguyễn Văn C" là kết quả đúng. Nhưng không hiểu vì sao lại có trường hợp đổi tên thứ 2 là sheet thay vì đổi tên như trên thì lại đổi tên thành "Detail1", "Detail2", "detail3" mà trong table hàng cột đều không có giá trị"Detail1", "Detail2", "Detail3" để mà gán tên cho sheet, giống như là trên trời rơi xuống vậy á anh. Nhấp chuột vào đây để mở rộng...thế bạn phải chạy debug mới biết được code lấy dữ liệu như thế nào. Không có file mà chỉ nhìn code, mình đoán mò được thế thôi. Upvote 0
test1986
Thành viên chính thức 

Tham gia 19/10/22 Bài viết 55 Được thích 11 hvnhpro đã viết: thế bạn phải chạy debug mới biết được code lấy dữ liệu như thế nào. Không có file mà chỉ nhìn code, mình đoán mò được thế thôi. Nhấp chuột vào đây để mở rộng...dạ file đính kèm ở bài viết #14 dó anh. Em chạy thử thì gặp lỗi như vậy ạ. Upvote 0 Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây.
Bài viết mới nhất
- mrjun80
- Hôm qua, lúc 23:43
- Hàm và công thức Excel
- Question Question
- ongke0711
- 6/10/24
- Lập Trình với Excel
- Đã giải quyết
- HeSanbi
- 18/4/21
- Lập Trình với Excel
- nguyendang95
- 23/1/26
- Excel và các ngôn ngữ lập trình khác
- SA_DQ
- 3/11/25
- Chia sẻ
- Question Question
- ongke0711
- 24/7/25
- Lập Trình với Excel
- phuongnam366377
- Hôm qua, lúc 14:41
- Excel và các ngôn ngữ lập trình khác
- vietdang170
- Thứ tư lúc 12:55
- Các Add-ins cho excel
- Question Question
- Nguyễn Xuân Sơn
- Thứ năm lúc 13:44
- Lập Trình với Excel
- jack nt
- Thứ năm lúc 17:19
- Excel và các ngôn ngữ lập trình khác
- tuantv9
- Thứ hai lúc 23:18
- Excel và các ngôn ngữ lập trình khác
- Question Question
- hoanglocphat
- Thứ năm lúc 10:36
- Lập Trình với Excel
- Nguyenkhang2404
- Thứ ba lúc 20:24
- Hàm và công thức Excel
- giaiphap
- 8/8/15
- Các Add-ins cho excel
- Dán lên cao
- Nguyễn Duy Tuân
- 28/11/24
- BLUESOFTS: A-Excel, A-Tools
- quydangktk
- 20/1/11
- Hàm và công thức Excel
- phuongnam366377
- Thứ hai lúc 15:46
- Excel và các ngôn ngữ lập trình khác
- HeSanbi
- 27/11/25
- Các Add-ins cho excel
- Dé Noir
- 23/1/26
- Giải thích, gỡ rối, xử lý lỗi công thức
- Đã giải quyết
- HeSanbi
- 5/3/21
- Lập Trình với Excel
Thành viên có số lượng bài viết cao nhất tháng
- Phuocam 1
- Gà Con yêu VBA 1
Thành viên có điểm tương tác cao nhất tháng
- Phuocam 1
- Gà Con yêu VBA 1
Thời gian đếm ngược.
000 Ngày 00 Giờ 00 phút 00 giây Thân mời tham dự sự kiện sinh nhật GPE 2025- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Từ khóa » Tách Sheet Theo điều Kiện
-
Sử Dụng VBA để Tách Sheet Tổng Hợp Thành Nhiều Sheet Chi Tiết Với ...
-
Tách Dữ Liệu Thành Nhiều Sheet Trong Excel Tự Động Theo Cột ...
-
Cách Tách File Excel Thành Nhiều File Theo điều Kiện - Hàng Hiệu
-
Cách Tách File Excel Thành Nhiều File Theo điều Kiện - Là Gì ở đâu ?
-
CÁCH TÁCH DỮ LIỆU THÀNH NHIỀU SHEET SIÊU NHANH (Show ...
-
Tách File Excel Theo điều Kiện - YouTube
-
Cách Tách Sheet Thành Nhiều File Excel - Thủ Thuật
-
Hướng Dẫn Cách Tách Sheet Trong Excel Thành Các File Riêng Bằng VBA
-
Làm Thế Nào để Chia Dữ Liệu Thành Nhiều Trang Tính Dựa Trên Cột ...
-
Cách Tách 1 Bảng Dữ Liệu Ra Nhiều Sheet Hoặc Nhiều File Khác Nhau
-
Hướng Dẫn Tách Sheet Trong Excel Thành File Riêng Lẻ Bằng VBA
-
[Tuts] Cách Tách Sheet Thành Từng File Excel Riêng Biệt Trong Excel
-
Chia Cột Dữ Liệu Thành Nhiều Trang ( Sheet ) - Infocom