概念查询,按照单个行的描述sorting

所以,我对如何前进感到困惑,希望有一些合作让我开始。 我不是要求某人编码,而是要validation我的理论路线。


背景:

我有一个工作表,有30个活动。 每个活动都是75行,75行中的第一行有一个活动描述的单元格。 假设列的数量与此无关,活动A,B和C将出现如下:

A1 A... A75 B1 B... B75 C1 C... C75 

理论path:

由于我有一个已知的行开始每一个活动,我想我可以:

.1)从我打算sorting的每一行复制已知的单元格到另一个表单(这不是首选,但是我怎么能这样做)。
.2)进入另一张表格后,对活动描述进行sorting。
.3)一旦sorting,我想通过匹配或查找按顺序将每个活动的75行复制到sorting表。
.4)一旦完成,我会复制活动从新工作表,粘贴回原来的工作表,然后删除新工作表。


题:

这听起来合适吗? 有没有更好的方法来做到这一点,立即想到?

我想如果你使用了二维数组,你可以节省很多时间复制和粘贴。 这个程序在第75行停下来,从A列中加载2d数组“Activities”。数组被传递到bubblesort,它在第一个值上被sorting。 然后将其返回,并将所有输出输出到B列。您可能需要调整常量以匹配,如果在活动之间有空白行,则会对两个主循环进行一些其他小调整。

 Option Compare Text Const RowsPerActivity As Integer = 75 'setting Const NumActivities As Integer = 30 'setting Const RowtoSortOn As Integer = 1 'setting Sub SortGroups() Dim MySheet As Worksheet Set MySheet = Worksheets("sheet1") Dim Activities(1 To NumActivities, 1 To RowsPerActivity) As Variant Dim CurActivity, CurDataRow As Integer Dim LastRow As Integer LastRow = MySheet.Cells(MySheet.Rows.Count, "A").End(xlUp).Row For CurActivity = 1 To LastRow Step RowsPerActivity 'maybe +1 if there is a blank row between activities For CurDataRow = 1 To RowsPerActivity Step 1 Activities((CurActivity \ 75) + 1, CurDataRow) = MySheet.Cells(CurActivity + CurDataRow - 1, 1).Value Next CurDataRow Next CurActivity Call BubbleSort(Activities) For CurActivity = 1 To LastRow Step RowsPerActivity 'maybe +1 if there is a blank row between activities For CurDataRow = 1 To RowsPerActivity Step 1 MySheet.Cells(CurActivity + CurDataRow - 1, 2).Value = Activities((CurActivity \ 75) + 1, CurDataRow) Next CurDataRow Next CurActivity End Sub Sub BubbleSort(ByRef list() As Variant) ' Sorts an array using bubble sort algorithm Dim First As Integer, Last As Long Dim i As Long, j As Long, k As Long Dim Temp As Variant First = LBound(list, 1) Last = UBound(list, 1) For i = First To Last - 1 For j = i + 1 To Last If list(i, RowtoSortOn) > list(j, RowtoSortOn) Then For k = 1 To RowsPerActivity Temp = list(j, k) list(j, k) = list(i, k) list(i, k) = Temp Next k End If Next j Next i End Sub