我有一个网络列表,每个网络都包含各种行(例如,网络A有4行或4个实例)。我希望能够对'块'中的数据进行排序。或者以我可以轻松查看聚合或操纵每个网络的数据的方式对其进行分段。
我希望通过自动执行此操作的VBA /宏对数据进行分段,每个网络的最后一行计算给定的指标。
当然,数据可以通过“过滤器”以这种方式进行过滤。选项并手动处理。我希望通过VBA / Macros自动化这个过程,有人能指出我正确的方向或帮助吗?
谢谢!
答案 0 :(得分:0)
根据我如何解释你想做什么,这是我开始的地方:
角1:找到特定列的数据范围
Dim col_var, first_row, last_row, i As Long, myrang As String
i = 1
'find first & last row of data
col_var = ActiveCell.Column
While Cells(i, col_var) = 0
i = i + 1
Wend
first_row = i
While Cells(i, col_var) <> 0
i = i + 1
Wend
last_row = i
'set range
myrang = Cells(first_row, col_var).Address & ":" & Cells(last_row, col_var).Address
角2:然后你可以“记录宏”来找到如何使用过滤器,然后用“myrang”替换重要的位:
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(first_row, col_var).Address), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range(myrang)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
此时,此选项会对启动宏时选择的列(“活动列”)进行排序(即,在启动宏之前最近点击了哪一列)。这可以通过以下行找到:
col_var = ActiveCell.Column
然而,这可以改变,因为它可以是:
角3:通过说
遍历多个列col_var = j
然后你可以把到目前为止所写的所有东西放在循环j的东西上(这里我已经从第4 - 8栏开始了,但是你可以很容易地将它改成你想要的东西):
Sub sorting()
Dim col_var, first_row, last_row, i As Long, myrang As String
for j = 4 to 8
i = 1
'find first & last row of data
col_var = j
While Cells(i, col_var) = 0
i = i + 1
Wend
first_row = i
While Cells(i, col_var) <> 0
i = i + 1
Wend
last_row = i
'set range
myrang = Cells(first_row, col_var).Address & ":" & Cells(last_row, col_var).Address
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(first_row, col_var).Address), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range(myrang)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
next j
End Sub