Sort các sheet theo điều kiện cho trước (1 người xem)

  • Thread starter Thread starter mhieuit
  • Ngày gửi Ngày gửi
Liên hệ QC

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

mhieuit

Thành viên hoạt động
Tham gia
3/9/13
Bài viết
163
Được thích
19
Nghề nghiệp
Data controller
Thân chào các Thầy, anh chị trong GPE,

Có 1 vấn đề nhờ các Thầy và anh chị giúp em với:

Em co 1 file dữ liệu (attach file), em muốn sắp xếp các sheet có cùng số Delivery Number thì nằm gần nhau, nhưng ưu tiên Main DC thì nằm trước OFW: để dễ quản lý hơn.

Em rất mong sự giúp đỡ. Cám ơn mọi người
 

File đính kèm

Lần chỉnh sửa cuối:
Thân chào các Thầy, anh chị trong GPE,

Có 1 vấn đề nhờ các Thầy và anh chị giúp em với:

Em co 1 file dữ liệu (attach file), em muốn sắp xếp các sheet có cùng số Delivery Number thì nằm gần nhau, nhưng ưu tiên Main DC thì nằm trước OFW: để dễ quản lý hơn.

Em rất mong sự giúp đỡ. Cám ơn mọi người
Bạn thử tham khảo bài này
http://www.giaiphapexcel.com/forum/showthread.php?461-Sắp-xếp-các-Sheet-Bài-toán-sắp-xếp
 
Upvote 0
Thân chào các Thầy, anh chị trong GPE,
Có 1 vấn đề nhờ các Thầy và anh chị giúp em với:
Em co 1 file dữ liệu (attach file), em muốn sắp xếp các sheet có cùng số Delivery Number thì nằm gần nhau, nhưng ưu tiên Main DC thì nằm trước OFW: để dễ quản lý hơn.
Em rất mong sự giúp đỡ. Cám ơn mọi người
H tải file về kiểm tra xem sao nhé ! --> cho chạy Macro TaoSheetIndex

Code mình cài theo các bước:
B1: tạo 1 sheet Index
B2: Tạo liên kết (Hyperlink) với các sheet, lấy các giá trị WAREHOUSE, DeliveryNumber (có chèn 1 Macro vào Logo công ty)
B3: Sort số liệu sheet Index với 2 điều kiện

sort2cot.jpg
B4: Sắp xếp các sheet dựa vào cột SheetName

sheetIndex.jpg

[GPECODE=vb]
Sub TaoSheetIndex()
Dim ws As Worksheet, Answer
'tao sheet Index: 2 truong` hop.
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = "Index" Then 'neu da~ co' sheet nay`
GoTo Next1_
Else
Sheets.Add.Name = "Index"
With Sheets("Index")
.Tab.Color = RGB(255, 255, 0) 'Yellow
.Move Before:=Sheets(1) 'move sheet ve dau tien
End With
GoTo Next2_
End If
Next

Next1_:
Answer = MsgBox("Xoa' toan bo so lieu sheet Index truoc khi Update Sheet Index", vbYesNo + vbQuestion)
If Answer = vbNo Then GoTo End_
'If Answer = vbYes
Sheets("Index").Cells.Clear

Next2_:
Sheets("Index").Activate
Cells.Font.Size = 11
'tao header
Range("A1", "E1").Value = Array("No.", "SHEETNAME", "WAREHOUSE", "DeliveryNumber (D14)", "A10")
Range("A2", "E2").Value = Array("1", "2", "3", "4", "5")
With Rows("1:1").Font
.Bold = True: .ColorIndex = 9: .Underline = xlUnderlineStyleSingle
End With

Application.ScreenUpdating = False
Call CreateLinksToAllSheets
Call TaoFilter_Sort2cot
Call GPE_SortSheet
Application.ScreenUpdating = True

Sheets("Index").Activate
Cells.WrapText = False: Columns.AutoFit
Range("A1").Select
MsgBox ("TaoSheetIndex xong"), vbInformation, "@_GPE_@"
End_:
End Sub

Sub CreateLinksToAllSheets()
Dim ws As Worksheet, n As Long

Sheets("Index").Range("B3").Select 'ho~ tro*. Hyperlinks

For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Index" Then
ws.Shapes("Picture 1").OnAction = "gotoIndex" 'chen` Macro vao` Logo

Cells(3 + n, 1).FormulaR1C1 = "=COUNTA(R3C2:RC[1])" 'cot No.
Cells(3 + n, 2).Hyperlinks.Add Anchor:=Selection, _
Address:="", _
SubAddress:="'" & ws.Name & "'" & "!A1", _
TextToDisplay:=ws.Name
Cells(3 + n, 4) = ws.Range("D14").Value 'DeliveryNumber
Cells(3 + n, 5) = ws.Range("A10").Value
Cells(3 + n, 3) = "=TRIM(RIGHT(RC[2],LEN(RC[2])-FIND("":"",RC[2])))" 'dat sau Cells(2 + n, 5)

Cells(3 + n, 2).Offset(1, 0).Select
n = n + 1
End If
Next ws

End Sub

Sub TaoFilter_Sort2cot()
Range(Range("A65000").End(xlUp), Range("E2")).Select
Selection.AutoFilter
'sort 2 cot: Record Macro
ActiveWorkbook.Worksheets("Index").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Index").AutoFilter.Sort.SortFields.Add Key:=Range("C2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Index").AutoFilter.Sort.SortFields.Add Key:=Range("D2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Index").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Sub GPE_SortSheet()
Dim rng As Range
Dim vung As Range

With Sheets("Index")
Set vung = .Range(.[B65000].End(xlUp), .[B3])
End With

For Each rng In vung
Sheets(rng.Value).Move after:=Sheets(Sheets.Count)
Next

Set vung = Nothing
End Sub

Sub gotoIndex()
Sheets("Index").Select
End Sub
[/GPECODE]

Link: https://www.mediafire.com/?htev47vtimmj5zc
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn anh Phúc nhiều lắm, em đã run code ok rồi.
Anh giúp em thêm 1 điêu kiện nữa nhé: Những deli cùng Customer (A12) thì nằm liên tục nhé anh.
Ví dụ: Sort theo Customer -> deli ->Main DC -> OFW (vì tính chất công việc nên có tí phát sinh, anh giúp em nhé)
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom