Code VBA để chia một sheet thành nhiều sheet dựa theo dữ liệu từ 1 cột

Quảng cáo

Windy6789

Thành viên mới
Tham gia ngày
7 Tháng bảy 2020
Bài viết
1
Được thích
0
Điểm
0
Tuổi
30
Chào các bạn,

Mình có một file excel có 1 sheet và muốn tách ra thành nhiều sheet dựa vào tên công ty ở đầu mỗi phần phân trang page break. Mình đã thử chạy macro theo tìm kiếm tên công ty nhưng excel không tự hiểu mà mặc định theo số dòng mình chọn. Nhờ các cao nhân giúp mình đoạn code VBA để thực hiện được ra kết quả như file mình gửi kèm. Do file gốc cần xử lý sẽ chia tới mấy trăm sheet rất nặng nên mình up file đơn giản chỉ mấy sheet thôi cho nhẹ. Mình cám ơn các bạn rất nhiều.
 

File đính kèm

  • Ket qua.xlsx
    27.4 KB · Đọc: 24
  • Test 3315.xlsx
    24 KB · Đọc: 24

Maika8008

Thành viên tích cực
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,019
Được thích
817
Điểm
368
Chào các bạn,

Mình có một file excel có 1 sheet và muốn tách ra thành nhiều sheet dựa vào tên công ty ở đầu mỗi phần phân trang page break. Mình đã thử chạy macro theo tìm kiếm tên công ty nhưng excel không tự hiểu mà mặc định theo số dòng mình chọn. Nhờ các cao nhân giúp mình đoạn code VBA để thực hiện được ra kết quả như file mình gửi kèm. Do file gốc cần xử lý sẽ chia tới mấy trăm sheet rất nặng nên mình up file đơn giản chỉ mấy sheet thôi cho nhẹ. Mình cám ơn các bạn rất nhiều.
Trước tiên cần tìm dòng kết thúc và tên đối tượng gán vào 1 mảng, làm cơ sở tách mỗi sổ này ra 1 sheet. Xong tính tiếp
Mã:
Sub TimGioiHanTrang()
Dim Arr, Rw As Long, EndR As Long, FindR As Long, i As Long, k As Long, m As Long
Dim ValFind As String

EndR = Range("C" & Rows.Count).End(xlUp).Row
ValFind = Range("C" & Rows.Count).End(xlUp).Value
FindR = 1

ReDim Arr(1 To EndR, 1 To 2)

For i = 1 To EndR
    k = k + 1
    Arr(k, 1) = Range("C" & i & ":C" & EndR).Find(ValFind, Cells(FindR, 3), xlFormulas, xlWhole).Row
    FindR = Arr(k, 1)
    If FindR = EndR Then Exit For
Next
    Arr(k + 1, 1) = EndR

ValFind = Range("A2").End(xlDown).Value
FindR = 1
For i = 1 To k
    m = m + 1
    Arr(m, 2) = Mid(Range("A" & i & ":A" & EndR).Find(ValFind, Cells(FindR, 1), xlFormulas, xlWhole).Offset(2).Value, 5)
    FindR = Arr(m, 1)
Next
    
    Range("I4").Resize(k, 2).Value = Arr
End Sub
 
Lần chỉnh sửa cuối:

be_09

Biên Hòa, Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
9,756
Được thích
9,508
Điểm
2,868
Tuổi
63
Nơi ở
Khu phố Văn Hóa
Chào các bạn,

Mình có một file excel có 1 sheet và muốn tách ra thành nhiều sheet dựa vào tên công ty ở đầu mỗi phần phân trang page break. Mình đã thử chạy macro theo tìm kiếm tên công ty nhưng excel không tự hiểu mà mặc định theo số dòng mình chọn. Nhờ các cao nhân giúp mình đoạn code VBA để thực hiện được ra kết quả như file mình gửi kèm. Do file gốc cần xử lý sẽ chia tới mấy trăm sheet rất nặng nên mình up file đơn giản chỉ mấy sheet thôi cho nhẹ. Mình cám ơn các bạn rất nhiều.
Góp ý cho bạn:
1/ File Test 3315 là do bạn tự làm hay từ phần mềm xuất ra?
2/ Nếu là do tự bạn làm thì nên thay đổi cách làm. Theo tôi thì chỉ dùng sheet IN với 1 mẫu (sổ chi tiết công nợ) chỉ lưu dữ liệu vào sheet theo dõi.
3/ Sheet theo dõi tương tự như sheet IN nhưng thêm cột tên đơn vị, địa chỉ, số tài khoản, số điện thoại. Nói chung là những thứ cần thiết như sổ chi tiết công nợ, để khi cần thì truy vấn lại, chứ không ai lưu mỗi sổ chi tiết công nợ là 1 trang cả.
4/ Làm như cách làm của bạn thì việc tìm kiếm và tổng hợp sẽ rất khó khăn, phức tạp chưa kể phải truy vấn từng chứng từ theo thời gian lại càng khó kăn hơn.
5/ Bạn có thể tham khảo File ở link này để hiểu cách theo dõi như thế nào cho đơn giản: Theo dõi và truy vấn đơn thuốc nơi phòng khám. Nếu bạn theo dõi như cách này thì việc tách sheet hay tách thành File quá đơn giản.
 
Lần chỉnh sửa cuối:

Maika8008

Thành viên tích cực
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,019
Được thích
817
Điểm
368
Góp ý cho bạn:
1/ File Test 3315 là do bạn tự làm hay từ phần mềm xuất ra?
2/ Nếu là do tự bạn làm thì nên thay đổi cách làm. Theo tôi thì chỉ dùng sheet IN với 1 mẫu (sổ chi tiết công nợ) chỉ lưu dữ liệu vào sheet theo dõi.
3/ Sheet theo dõi tương tự như sheet IN nhưng thêm cột tên đơn vị, địa chỉ, số tài khoản, số điện thoại. Nói chung là những thứ cần thiết như sổ chi tiết công nợ, để khi cần thì truy vấn lại, chứ không ai lưu mỗi sổ chi tiết công nợ là 1 trang cả.
4/ Làm như cách làm của bạn thì việc tìm kiếm và tổng hợp sẽ rất khó khăn, phức tạp chưa kể phải truy vấn từng chứng từ theo thời gian lại càng khó kăn hơn.
5/ Bạn có thể tham khảo File ở link này để hiểu cách theo dõi như thế nào cho đơn giản: Theo dõi và truy vấn đơn thuốc nơi phòng khám. Nếu bạn theo dõi như cách này thì việc tách sheet hay tách thành File quá đơn giản.
Nhìn dữ liệu thì tôi nghĩ là từ phần mềm xuất ra. Với người làm kế toán, việc tách mỗi đối tượng thành 1 sheet để in là một nhu cầu thực sự đó bạn. Lúc đó trang in 1 đối tượng sẽ được bắt đầu chính xác từ tiêu đề, không bị nối bậy từ đối tượng này sang đối tượng kia như khi để tất cả cùng 1 sheet.
 

be_09

Biên Hòa, Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
9,756
Được thích
9,508
Điểm
2,868
Tuổi
63
Nơi ở
Khu phố Văn Hóa
Nhìn dữ liệu thì tôi nghĩ là từ phần mềm xuất ra. Với người làm kế toán, việc tách mỗi đối tượng thành 1 sheet để in là một nhu cầu thực sự đó bạn. Lúc đó trang in 1 đối tượng sẽ được bắt đầu chính xác từ tiêu đề, không bị nối bậy từ đối tượng này sang đối tượng kia như khi để tất cả cùng 1 sheet.
1/ Khi tôi góp ý đương nhiên là tôi có giải pháp dùng mẫu sổ chi tiết công nợ để tách 1 sheet theo dõi ra nhiều sổ chi tiết công nợ chỉ với 1 đoạn code.
2/ Bài 3 tôi muốn hướng người ta về cách theo dõi như thế nào là đơn giản mà đáp ứng được mọi yêu cầu, đồng thời sử dụng công cụ có sẳn để tìm kiếm và tổng hợp được dễ dàng hơn.
 
Lần chỉnh sửa cuối:
Quảng cáo
Top Bottom