Sub SortWorksheets()
Dim N As Integer
Dim m As Integer
Dim FirstWSToSort As Integer
Dim LastWSToSort As Integer
Dim SortDescending As Boolean
SortDescending = False
If ActiveWindow.SelectedSheets.Count = 1 Then
'Change the 1 to the worksheet you want sorted first
FirstWSToSort = 1
LastWSToSort = Worksheets.Count
Else
With ActiveWindow.SelectedSheets
For N = 2 To .Count
If .item(N - 1).index <> .item(N).index - 1 Then
MsgBox "You cannot sort non-adjacent sheets"
Exit Sub
End If
Next N
FirstWSToSort = .item(1).index
LastWSToSort = .item(.Count).index
End With
End If
For m = FirstWSToSort To LastWSToSort
For N = m To LastWSToSort
If SortDescending = True Then
If UCase(Worksheets(N).name) > UCase(Worksheets(m).name) Then
Worksheets(N).Move Before:=Worksheets(m)
End If
Else
If UCase(Worksheets(N).name) < UCase(Worksheets(m).name) Then
Worksheets(N).Move Before:=Worksheets(m)
End If
End If
Next N
Next m
End Sub
Em có 10 sheets("AA1") -:- sheets("AA10") và sheets("BB1") -:- sheets("BB10")
giờ em muốn code sắp xếp: AA1 > BB1 > AA2 >> BB2 >>... AAn >> BBn... em xin chân thành cảm ơn!
Sub GPE()
Dim i As Long, tmp As String
For i = 1 To Sheets.Count
tmp = "AA" & i
If ExitSheet(tmp) Then
k = k + 1
Sheets(tmp).Move Before:=Worksheets(k)
End If
tmp = "BB" & i
If ExitSheet(tmp) Then
k = k + 1
Sheets(tmp).Move Before:=Worksheets(k)
End If
Next i
End Sub
Function ExitSheet(ByVal tmp As String) As Boolean
Dim Test As Variant
On Error Resume Next
Test = Sheets(tmp).Range("A1").Value
If Err.Number = 0 Then ExitSheet = True
End Function
Sub vidu_SortedList()
Const sMatch1 = "AA*"
Const sMatch2 = "BB*"
Dim oSList As Object, ws As Worksheet, N As Long
Dim i As Long, idex1 As Long, idex2 As Long, sName As String
Set oSList = CreateObject("System.Collections.SortedList")
For Each ws In ThisWorkbook.Worksheets
If (ws.Name Like sMatch1) Or (ws.Name Like sMatch2) Then
oSList.Add ws.Name, ""
End If
Next ws
N = oSList.Count
If N = 0 Or N Mod 2 <> 0 Then Exit Sub
If (oSList.GetKey(N / 2 - 1) Like sMatch1) And (oSList.GetKey(N / 2) Like sMatch2) Then
idex2 = 1
Sheets(oSList.GetKey(0)).Move Before:=Sheets(1)
For i = 1 To N - 1
If i < N / 2 Then
idex1 = idex1 + 1
sName = oSList.GetKey(i)
Sheets(sName).Move After:=Sheets(idex1)
Else
sName = oSList.GetKey(i)
Sheets(sName).Move After:=Sheets(idex2)
idex2 = idex2 + 2
End If
Next i
End If
End Sub
Không đúng như mong muốn anh ạ! nó vẫn theo thứ tự từng loạiMần thử xem đúng yêu cầu của bạn không nhé
Mã:Sub SortWorksheets() Dim N As Integer Dim m As Integer Dim FirstWSToSort As Integer Dim LastWSToSort As Integer Dim SortDescending As Boolean SortDescending = False If ActiveWindow.SelectedSheets.Count = 1 Then 'Change the 1 to the worksheet you want sorted first FirstWSToSort = 1 LastWSToSort = Worksheets.Count Else With ActiveWindow.SelectedSheets For N = 2 To .Count If .item(N - 1).index <> .item(N).index - 1 Then MsgBox "You cannot sort non-adjacent sheets" Exit Sub End If Next N FirstWSToSort = .item(1).index LastWSToSort = .item(.Count).index End With End If For m = FirstWSToSort To LastWSToSort For N = m To LastWSToSort If SortDescending = True Then If UCase(Worksheets(N).name) > UCase(Worksheets(m).name) Then Worksheets(N).Move Before:=Worksheets(m) End If Else If UCase(Worksheets(N).name) < UCase(Worksheets(m).name) Then Worksheets(N).Move Before:=Worksheets(m) End If End If Next N Next m End Sub
code này chạy cũng không như mong muốn anh à! code này chạy giống bài #2Mã:Sub GPE() Dim i As Long, tmp As String For i = 1 To Sheets.Count tmp = "AA" & i If ExitSheet(tmp) Then k = k + 1 Sheets(tmp).Move Before:=Worksheets(k) End If tmp = "BB" & i If ExitSheet(tmp) Then k = k + 1 Sheets(tmp).Move Before:=Worksheets(k) End If Next i End Sub Function ExitSheet(ByVal tmp As String) As Boolean Dim Test As Variant On Error Resume Next Test = Sheets(tmp).Range("A1").Value If Err.Number = 0 Then ExitSheet = True End Function
Code ko chạy được tý nào ạ! em up file lên giúp em với!Thử dùng SortedList...
PHP:Sub vidu_SortedList() Const sMatch1 = "AA*" Const sMatch2 = "BB*" Dim oSList As Object, ws As Worksheet, N As Long Dim i As Long, idex1 As Long, idex2 As Long, sName As String Set oSList = CreateObject("System.Collections.SortedList") For Each ws In ThisWorkbook.Worksheets If (ws.Name Like sMatch1) Or (ws.Name Like sMatch2) Then oSList.Add ws.Name, "" End If Next ws N = oSList.Count If N = 0 Or N Mod 2 <> 0 Then Exit Sub If (oSList.GetKey(N / 2 - 1) Like sMatch1) And (oSList.GetKey(N / 2) Like sMatch2) Then idex2 = 1 Sheets(oSList.GetKey(0)).Move Before:=Sheets(1) For i = 1 To N - 1 If i < N / 2 Then idex1 = idex1 + 1 sName = oSList.GetKey(i) Sheets(sName).Move After:=Sheets(idex1) Else sName = oSList.GetKey(i) Sheets(sName).Move After:=Sheets(idex2) idex2 = idex2 + 2 End If Next i End If End Sub
Số sheet ban có ban đầu! Em có 10 sheets("AA1") -:- sheets("AA10") và sheets("BB1") -:- sheets("BB10")Bạn vui tính nhỉ? "Treo đầu dê bán thịt..."
"10 sheets("AA1") -:- sheets("AA10") và sheets("BB1") -:- sheets("BB10")"
View attachment 183826
-----------
Bài #4 là chuẩn rồi bạn.
Bạn ơi. Bạn có biết thế nào tên sheet không?Số sheet ban có ban đầu! Em có 10 sheets("AA1") -:- sheets("AA10") và sheets("BB1") -:- sheets("BB10")
em muốn nó xếp như này ạ! "sắp xếp: AA1 > BB1 > AA2 >> BB2 >>... AAn >> BBn"
Bạn ơi. Bạn có biết thế nào tên sheet không?
Bài #1 bài yêu cầu tên các sheets là "AA1",... "BB1"... trong khi file bạn vừa đưa không có cái sheet nào tên như thế. Đã trích dẫn và đính kèm hình chụp gần nhau thế cho bạn nhìn rồi!
Đây gọi là sheet "AA1",... "BB1"...
View attachment 183827
Bạn đổi lại điều kiện nhận biết tên sheet của bạn trong code trên là được. Mình động não chút chứ!!!
Có 20 cái sheets dùng tay kéo cho dẻo!
-------------------------------------------Sub GPE()
Dim i As Long, tmp As String
For i = 1 To Sheets.Count
tmp = "CD-L" & i
If ExitSheet(tmp) Then
k = k + 1
Sheets(tmp).Move Before:=Worksheets(k)
End If
tmp = "DT-L" & i
If ExitSheet(tmp) Then
k = k + 1
Sheets(tmp).Move Before:=Worksheets(k)
End If
Next i
End Sub
Function ExitSheet(ByVal tmp As String) As Boolean
Dim Test As Variant
On Error Resume Next
Test = Sheets(tmp).Range("A1").Value
If Err.Number = 0 Then ExitSheet = True
End Function
Bạn ơi. Bạn có biết thế nào tên sheet không?
Bài #1 bài yêu cầu tên các sheets là "AA1",... "BB1"... trong khi file bạn vừa đưa không có cái sheet nào tên như thế. Đã trích dẫn và đính kèm hình chụp gần nhau thế cho bạn nhìn rồi!
Đây gọi là sheet "AA1",... "BB1"...
Hãy dùng cách đơn giản nhất đi bạn. Mục đích là để tìm đến sheet cần tìm một cách nhanh nhất đúng không.Em có 10 sheets("AA1") -:- sheets("AA10") và sheets("BB1") -:- sheets("BB10")
giờ em muốn code sắp xếp: AA1 > BB1 > AA2 >> BB2 >>... AAn >> BBn... em xin chân thành cảm ơn!
mục đích của em là để in 1 loạt theo thứ tự mình mong muốn ko phải xếp tay!. các anh cho code ok rồi ạHãy dùng cách đơn giản nhất đi bạn. Mục đích là để tìm đến sheet cần tìm một cách nhanh nhất đúng không.
Hãy tạo một sheet Menu, rồi tạo các hyperlink để di chuyển đến sheet muốn chọn.
Bác này dân cầu đường chắc luôn nè, hihi