使用Excel VBA按列值对工作表数据进行sorting

我有vba开发下一个用户表单,它从工作表中获取信息来显示信息

在这里输入图像描述

我想要通过Segment命令所有的信息,这是代码:

Function llenarDatosTabla() Dim vList As Variant Dim ws As Worksheet: Set ws = Worksheets(BD_PRODXSIST) ListBox1.Clear With ws If (IsEmpty(.Range("AA2").Value) = False) Then Dim ultimoRenglon As Long: ultimoRenglon = devolverUltimoRenglonDeColumna("A1", BD_PRODXSIST) vList = ws.Range("AA2:AA" & ultimoRenglon & ":AL2").Value If IsArray(vList) Then Me.ListBox1.List = vList Else Me.ListBox1.AddItem (vList) End If End If Me.ListBox1.ListIndex = -1 End With Set vList = Nothing Set ws = Nothing End Function 

如何通过'AD'(SEGMENTO)列sorting?

您可以使用VBA语句按升序对Excel工作表进行sorting,如下所示:

 Columns("A:XFD").Sort key1:=Range("AD:AD"), order1:=xlAscending, Header:=xlYes 

注意:在列范围内Columns("A:XFD")而不是XFDinput与您的案例相关的最后一个使用的列,例如Columns("A:DD")

希望这会有所帮助。

要对数据表进行sorting,请将Excel名称CurrentRegion函数结合使用。 与硬编码列引用相比,这个风险更小,可以通过两个简单的步骤完成。

指定列最好的原因是,如果列出错或稍后更改,则会混淆数据! 在执行sorting时,任何省略的列中的单元格将保留在原来的位置,成为错误行的一部分。 而且,如果您稍后再添加更多列,则会发生这种情况,除非您记得更新VBA。

以下是使用此方法的两个简单步骤。 对于这个例子,我select了一个有四列四行的数据表:

在这里输入图像描述

我们打算按COL3降序sorting。 其他三列中的单元格共享相同的值,使我们能够轻松validation它们全部保留在正确的行中。

步骤1 :在数据表中select一个不太可能被删除的单元格,比如你打算永久删除的列的标题,并为这个单元格定义一个名称。 您可以通过select单元格并直接在工作表上方的Excel名称下拉列表中定义名称。 在这里我使用了RegionTag的名字:

在这里输入图像描述

直接,CurrentRegion可以参考整个数据表。 如果你编写一行VBA来select表格,你可以看到它在运行:

 Range("RegionTag").CurrentRegion.Select 

这是结果:

在这里输入图像描述

这只是为了说明,显示了Name / CurrentRegion组合的强大function。 我们不需要select表格来进行分类。

第二步 :定义第二个名称,这次你要sorting的列:

在这里输入图像描述

确保名称引用整个列,通过单击列标题而不是列中单元格范围来select。

而已! 通过定义这两个名称,我们可以对数据表进行sorting,而不必关心自己的行和列,即使稍后添加更多:

 Range("RegionTag").CurrentRegion.Sort _ key1:=Range("SortCol"), order1:=xlDescending, Header:=xlYes 

这里是我们的数据表使用上面的语句sorting:

在这里输入图像说明