我有一些人的資料,我需要VBA按標題名稱排序,但有時其中一個標題不存在,我需要它跳過代碼塊,按不同的標題名稱排序。此外,我只能想出如何做三列,而不是四列,所以如果有人能幫我解決這個問題,那就太好了!
我需要它對三列進行排序。
我需要它進行升序排序:
年級,教師,姓氏,名字。
-或者-
年級,姓氏,名字
Dim Fnd(1 To 3) 作為范圍
Dim Ary As Variant
Dim i As Long
Ary = Array("年級", "老師", "姓氏")
For i = 1 To 3
Set Fnd(i) = Range("1:1") 。 Find(Ary(i - 1), , xlWhole, , False, , False)
Next i
Range("A1").CurrentRegion.Sort _
key1:=Fnd(1), order1:=xlAscending, _
key2:=Fnd(2), order2:=xlAscending, _
key3:=Fnd(3), order3:=xlAscending, _
標題:=xlYes
uj5u.com熱心網友回復:
類似這樣的東西應該可以使用:
Dim SortColumns As Variant
SortColumns = Array("Grade", "Teacher", "last Name", "First Name") '定義所有要排序的列。
With ThisWorkbook.Worksheets("Sheet1") '在此指定你的作業表。
.Sort.SortFields.Clear
Dim RngFound As Range
Dim SortColumn As Variant
For Each SortColumn In SortColumn
Set RngFound = Nothing[/span]。
Set RngFound = .Range("1:1").Find(SortColumn, , , xlWhole, , , False, , False)
如果 不是 RngFound 是 Nothing Then ' 如果發現頭,就添加到sortfields中
.Sort.SortFields.Add2 Key:=RngFound.EntireColumn, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
結束 If
Next SortColumn
.Sort.SetRange .Range("A1"/span>).CurrentRegion
.Sort.Header = xlYes
.Sort.MatchCase = False.
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With[/span
如果4個欄位都存在的話,它將按這4個欄位排序,而忽略不存在的欄位。
uj5u.com熱心網友回復:
Range.Sort一次只限于3個鍵,但你可以多次排序,每次使用不同的列。你將把這些東西按相反的順序排列,因為最后的排序將覆寫之前的排序。
這里是如何進行排序的?
我將這樣做:
Sub HeaderSort()
Dim ws As 作業表
Set ws = ActiveSheet
Dim HeaderLabels As Variant
HeaderLabels = Array("年級", "老師", "姓氏", "名字")
Dim HCols() As Range, i As Long
ReDim HCols(LBound(HeaderLabels) To UBound(HeaderLabels))
For i = LBound(HeaderLabels) To UBound(HeaderLabels)
Set HCols(i) = ws.Rows(1).Find(HeaderLabels(i), , xlWhole, , , False, , False)
Next i
If HCols(1) Is Nothing Then '教師頭未找到。
ws.Range("A1"/span>).CurrentRegion.Sort _
key1:=HCols(0), order1:=xlAscending, _
key2:=HCols(2), order2:=xlAscending, _
key3:=HCols(3), order3:=xlAscending, _
標題:=xlYes
Else '所有4個頭都找到了。
'先對第4個、優先級最低的頭進行排序。
ws.Range("A1").CurrentRegion.Sort key1:=HCols(3), order1:=xlAscending, Header:=xlYes
'對其他三個進行排序。
ws.Range("A1"/span>).CurrentRegion.Sort _
key1:=HCols(0), order1:=xlAscending, _
key2:=HCols(1), order2:=xlAscending, _
key3:=HCols(2), order3:=xlAscending, _
標題:=xlYes
結束 如果
結束 Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307525.html
標籤:
上一篇:IF公式回傳值錯誤或計算不正確
