我在vba中开发了下一个userform,它从工作表中获取信息以显示信息
我想通过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)栏排序???
答案 0 :(得分:11)
您可以使用如下所示的VBA语句按升序对Excel工作表进行排序:
Columns("A:XFD").Sort key1:=Range("AD:AD"), order1:=xlAscending, Header:=xlYes
注意:在列范围Columns("A:XFD")
而不是XFD
中,输入与您的案例相关的最后一个列,例如Columns("A:DD")
。
希望这会有所帮助。
答案 1 :(得分:5)
要对数据表进行排序,请将 Excel名称与 CurrentRegion 功能结合使用。这比硬编码列引用的风险小,可以通过两个简单的步骤完成。
指定列的首选原因是,如果列错误或稍后更改,您就会对数据进行加密!执行排序时,任何省略列中的单元格将保持原样,成为错误行的一部分。如果您稍后再添加更多列,这将会发生这种情况,除非您记得更新您的VBA。
以下是使用此方法的两个简单步骤。在本例中,我选择了一个包含四列四行的数据表:
我们将按COL3降序排序。其他三列中的单元格共享相同的值,使我们能够轻松验证它们是否都保留在正确的行中。
第1步:在数据表中选择一个不太可能被删除的单元格,例如您打算永久删除的列标题,并为此定义名称细胞。您可以通过选择单元格并直接在工作表上方的Excel“名称”下拉列表中键入来定义名称。在这里,我使用了名称RegionTag:
直接,CurrentRegion可以从中引用整个数据表。如果您编写一行VBA来选择表格,您可以看到它的实际效果:
Range("RegionTag").CurrentRegion.Select
结果如下:
这只是为了说明,显示了Name / CurrentRegion组合的强大功能。我们不需要选择表格来对其进行排序。
第2步:定义第二个名称,这次是您想要排序的列:
确保Name指的是通过单击列标题选择的整个列,而不仅仅是列中的一系列单元格。
那就是它!通过定义这两个名称,我们可以对数据表进行排序,而不必关注自己的行和列,即使以后添加了更多:
Range("RegionTag").CurrentRegion.Sort _
key1:=Range("SortCol"), order1:=xlDescending, Header:=xlYes
这是我们使用上述声明排序的数据表: