Sắp xếp sheet theo điều kiện? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,895
Được thích
1,219
Xin chào các bạn,
Tôi đang muốn sắp xếp thứ tự các sheet theo điều kiện như trong sheet Home
Phiền các bạn giúp tôi với ạ.
Xin cảm ơn rất nhiều.
 

File đính kèm

Xin chào các bạn,
Tôi đang muốn sắp xếp thứ tự các sheet theo điều kiện như trong sheet Home
Phiền các bạn giúp tôi với ạ.
Xin cảm ơn rất nhiều.
Bạn sử dụng code này nhé:
[GPECODE=vb]Sub SapXep()
Dim Cll As Range
For Each Cll In Sheets("Home").[D3:D12].SpecialCells(4)
Sheets(Cll.Offset(, -2).Text).Move After:=Sheets(Sheets.Count)
Next
End Sub[/GPECODE]
 
Upvote 0
Bạn sử dụng code này nhé:
[GPECODE=vb]Sub SapXep()
Dim Cll As Range
For Each Cll In Sheets("Home").[D3:D12].SpecialCells(4)
Sheets(Cll.Offset(, -2).Text).Move After:=Sheets(Sheets.Count)
Next
End Sub[/GPECODE]

Cảm ơn bạn nhiều vì đã giúp tôi,
Nhưng code chạy bị lỗi bạn ạ , với lại phiền các bạn viết thêm cho tôi nút back với ạ
Xin cảm ơn các bạn rất nhiều.
 

File đính kèm

Upvote 0
Cảm ơn bạn nhiều vì đã giúp tôi,
Nhưng code chạy bị lỗi bạn ạ , với lại phiền các bạn viết thêm cho tôi nút back với ạ
Xin cảm ơn các bạn rất nhiều.
Nguyên nhân lỗi là do tên sheet không có dấu cách, còn trên sheet (vùng B3:B12) thì lại có dấu cách. Bạn chỉ cần xóa tất cả các dấu cách này đi là được (có thể dung Replace cho nhanh).
Code cho nút Back là:
[GPECODE=vb]Sub Back()
Dim Cll As Range
For Each Cll In Sheets("Home").[B4:B12]
Sheets(Cll.Text).Move After:=Sheets(Cll.Offset(-1).Text)
Next
Sheets("Home").Select
End Sub[/GPECODE]
Bạn xem trong file nhé.
 

File đính kèm

Upvote 0
Nguyên nhân lỗi là do tên sheet không có dấu cách, còn trên sheet (vùng B3:B12) thì lại có dấu cách. Bạn chỉ cần xóa tất cả các dấu cách này đi là được (có thể dung Replace cho nhanh).
Code cho nút Back là:
[GPECODE=vb]Sub Back()
Dim Cll As Range
For Each Cll In Sheets("Home").[B4:B12]
Sheets(Cll.Text).Move After:=Sheets(Cll.Offset(-1).Text)
Next
Sheets("Home").Select
End Sub[/GPECODE]
Bạn xem trong file nhé.

Thật tuyệt vời,
Cảm ơn bạn rất nhiều, mục đích của tôi muốn sắp xếp các sheet theo nhóm như vậy chỉ là để Group các sheet cho dễ dàng thôi bạn ạ.
Khi xong việc không Group nữa lại trả về mặc định
----------------
Nếu bạn có thể viết cho tôi xin 1 đoạn code về Gourp các sheet theo điều kiện ở bài 1 đưa ra thì tôi đỡ phải mất 1 thao tác sắp xếp như thế này thì hay hơn nhiều ạ.
Khi tôi đặt câu hỏi này rồi tôi thì mới nghĩ đến sao tôi không hỏi luôn Group theo điều kiện luôn để tránh đi đường dài nhỉ...
Nếu có thể được mong bạn giúp ạ.
Cảm ơn bạn rất nhiều như vậy với tôi cũng giải quyết giảm được 95% thời gian rồi ạ.
 
Upvote 0
Bạn sử dụng code này nhé:
[GPECODE=vb]Sub SapXep()
Dim Cll As Range
For Each Cll In Sheets("Home").[D3:D12].SpecialCells(4)
Sheets(Cll.Offset(, -2).Text).Move After:=Sheets(Sheets.Count)
Next
End Sub[/GPECODE]

Tôi thay dữ liệu trong cột D bằng công thức điều kiện thì code bị lỗi ở dòng
For Each Cll In Sheets("Home").[D3:D12].SpecialCells(4)
Phiền các bạn sửa lỗi trên giúp tôi theo file kèm với ạ.
Xin cảm ơn các bạn rất nhiều
 

File đính kèm

Upvote 0
Tôi thay dữ liệu trong cột D bằng công thức điều kiện thì code bị lỗi ở dòng

Phiền các bạn sửa lỗi trên giúp tôi theo file kèm với ạ.
Xin cảm ơn các bạn rất nhiều
[D3:D12].SpecialCells(4) là các ô trống trong vùng D3:D12, do đó khi dùng công thức cho cột D thì rõ ràng là vùng này chẳng có ô trống nào cả, dẫn đến code báo lỗi. Để khắc phục tình trạng này thì bạn sửa lại code một xíu:
[GPECODE=vb]Sub Go()
Dim Cll As Range
For Each Cll In Sheets("Home").[D3:D12]
If Cll <> "X" Then Sheets(Cll.Offset(, -2).Text).Move After:=Sheets(Sheets.Count)
Next
Sheets("Home").Select
End Sub[/GPECODE]
Hoặc theo điều kiện như trong file của bạn thì có thể dựa vào cột C cũng được, khỏi cần dùng cột D, code lúc đó sẽ là:
[GPECODE=vb]Sub Go()
Dim Cll As Range
For Each Cll In Sheets("Home").[C3:C12]
If Cll <= 0 Then Sheets(Cll.Offset(, -1).Text).Move After:=Sheets(Sheets.Count)
Next
Sheets("Home").Select
End Sub[/GPECODE]
 
Upvote 0
Thật tuyệt vời,
Cảm ơn bạn rất nhiều, mục đích của tôi muốn sắp xếp các sheet theo nhóm như vậy chỉ là để Group các sheet cho dễ dàng thôi bạn ạ.
Khi xong việc không Group nữa lại trả về mặc định
----------------
Nếu bạn có thể viết cho tôi xin 1 đoạn code về Gourp các sheet theo điều kiện ở bài 1 đưa ra thì tôi đỡ phải mất 1 thao tác sắp xếp như thế này thì hay hơn nhiều ạ.
Khi tôi đặt câu hỏi này rồi tôi thì mới nghĩ đến sao tôi không hỏi luôn Group theo điều kiện luôn để tránh đi đường dài nhỉ...
Nếu có thể được mong bạn giúp ạ.
Cảm ơn bạn rất nhiều như vậy với tôi cũng giải quyết giảm được 95% thời gian rồi ạ.
Với mục đích của bạn như vậy thì khỏi di chuyển sheet nữa. Bạn sử dụng code sau sẽ chọn các sheet ứng với giá trị >0 trên cột C, sheet Home:
[GPECODE=vb]Sub GroupSheets()
Dim Cll As Range, k As Long, Arr()
ReDim Arr(1 To Sheets.Count)
For Each Cll In Sheets("Home").[C3:C12]
If Cll > 0 Then
k = k + 1: Arr(k) = Cll.Offset(, -1)
End If
Next
ReDim Preserve Arr(1 To k)
Sheets(Arr()).Select
End Sub[/GPECODE]
 
Upvote 0
[D3:D12].SpecialCells(4) là các ô trống trong vùng D3:D12, do đó khi dùng công thức cho cột D thì rõ ràng là vùng này chẳng có ô trống nào cả, dẫn đến code báo lỗi. Để khắc phục tình trạng này thì bạn sửa lại code một xíu:
[GPECODE=vb]Sub Go()
Dim Cll As Range
For Each Cll In Sheets("Home").[D3:D12]
If Cll <> "X" Then Sheets(Cll.Offset(, -2).Text).Move After:=Sheets(Sheets.Count)
Next
Sheets("Home").Select
End Sub[/GPECODE]
Hoặc theo điều kiện như trong file của bạn thì có thể dựa vào cột C cũng được, khỏi cần dùng cột D, code lúc đó sẽ là:
[GPECODE=vb]Sub Go()
Dim Cll As Range
For Each Cll In Sheets("Home").[C3:C12]
If Cll <= 0 Then Sheets(Cll.Offset(, -1).Text).Move After:=Sheets(Sheets.Count)
Next
Sheets("Home").Select
End Sub[/GPECODE]

Oh hô! thật là tuyệt tôi sẽ dùng code bên dưới để không dùng cột phụ ^^
Các bạn giỏi quá !!
Xin cảm ơn bạn và diễn đàn rất là nhiều!
Chúc mọi người có một Noel thật ấm áp và ngập tràn niềm vui.
Chào trân trọng
 
Lần chỉnh sửa cuối:
Upvote 0
Với mục đích của bạn như vậy thì khỏi di chuyển sheet nữa. Bạn sử dụng code sau sẽ chọn các sheet ứng với giá trị >0 trên cột C, sheet Home:
[GPECODE=vb]Sub GroupSheets()
Dim Cll As Range, k As Long, Arr()
ReDim Arr(1 To Sheets.Count)
For Each Cll In Sheets("Home").[C3:C12]
If Cll > 0 Then
k = k + 1: Arr(k) = Cll.Offset(, -1)
End If
Next
ReDim Preserve Arr(1 To k)
Sheets(Arr()).Select
End Sub[/GPECODE]

Giờ mới là 100%,, Nghĩa Phúc kính mến đồng ý kết bạn với tôi nhé ! hihi/-*+/
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom