作者mini178 (mini178)
看板Office
标题[算表] vba 筛选排序请教大神哪里写错
时间Sat Sep 16 22:42:25 2023
软体:excel
版本:office365
目的:透过vba进行筛选投本比1日後针对J栏(投本比1日(%))进行排序由大到小
因为中间想要保持空白列
所以想法是找到投本比1日的第一列的上一列去筛选
再针对J栏(投本比1日(%))排序由大到小
有用过chtgpt修改但还是不成功
没显示错误但不会排序
请问大神是哪里错误
资料:
https://imgur.com/W6XFrFy
Sub 筛选和排序()
Dim ws As Worksheet
Dim lastRow As Long
Dim filterRowStart As Long
Dim filterRowEnd As Long
' 定义工作表
Set ws = ThisWorkbook.Sheets("20230918盘前")
' 确定最後一行
lastRow = ws.Cells(ws.rows.Count, "A").End(xlUp).row
' 找到第一个出现"投本比1日"的上一列
For filterRowStart = 2 To lastRow
If ws.Cells(filterRowStart, 1).Value = "投本比1日" Then
Exit For
End If
Next filterRowStart
' 找到最後一个出现"投本比1日"的列
For filterRowEnd = lastRow To 2 Step -1
If ws.Cells(filterRowEnd, 1).Value = "投本比1日" Then
Exit For
End If
Next filterRowEnd
' 如果找到"投本比1日",则应用AutoFilter
If filterRowStart <= lastRow And filterRowEnd >= filterRowStart Then
' 筛选范围从第一个出现"投本比1日"的上一列到最後一个出现"投本比1日"的列
ws.rows(filterRowStart - 1 & ":" & filterRowEnd).AutoFilter Field:=1,
Criteria1:="投本比1日"
' 排序投本比1日%
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("J" & filterRowStart - 1 & ":J"
& filterRowEnd), _
SortOn:=xlSortOnValues, Order:=xlDescending,
DataOption:=xlSortNormal
With ws.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' 关闭筛选
ws.AutoFilterMode = False
End If
End Sub
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.38.29.111 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1694875347.A.029.html