使用Excel VBA按列值排序工作表数据
我在vba中开发了下一个userform,它从工作表中获取信息以显示信息 我想按段顺序排列所有信息,代码如下:使用Excel VBA按列值排序工作表数据,vba,sorting,excel,worksheet-function,Vba,Sorting,Excel,Worksheet Function,我在vba中开发了下一个userform,它从工作表中获取信息以显示信息 我想按段顺序排列所有信息,代码如下: Function llenarDatosTabla() Dim vList As Variant Dim ws As Worksheet: Set ws = Worksheets(BD_PRODXSIST) ListBox1.Clear With ws If (IsEmpty(.Range("AA2").Value) = Fals
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)列排序?您可以使用VBA语句按升序对Excel工作表排序,如下所示:
Columns("A:XFD").Sort key1:=Range("AD:AD"), order1:=xlAscending, Header:=xlYes
注意:在列范围Columns(“A:XFD”)
中,而不是XFD
输入与您的案例相关的最后使用的列,例如列(“A:DD”)
希望这会有所帮助。要对数据表进行排序,请将Excel名称与CurrentRegion功能结合使用。这比硬编码列引用的风险小,可以通过两个简单的步骤完成 指定列比指定列更可取的原因是,如果列出错或以后更改,您将对数据进行置乱!执行排序时,任何省略列中的单元格都将保留在原来的位置,成为错误行的一部分。如果以后再添加更多列,则会发生这种情况,除非您记得更新VBA 下面是使用此方法的两个简单步骤。对于本例,我选择了一个包含四列四行的数据表: 我们将按COL3降序进行排序。其他三列中的单元格共享相同的值,使我们能够轻松地验证它们是否都保留在正确的行中 步骤1:在数据表中选择一个不太可能被删除的单元格,例如要永久化的列的标题,并定义此单元格的名称。您可以通过选择单元格并直接在工作表上方的Excel名称下拉列表中键入来定义名称。在这里,我使用了RegionTag这个名称: 很快,CurrentRegion就可以引用整个数据表。如果编写一行VBA代码以选择表格,则可以看到它的作用:
Range("RegionTag").CurrentRegion.Select
结果是:
这只是为了说明,显示了Name/CurrentRegion组合的威力。我们不需要选择表来进行排序
步骤2:为要排序的列定义第二个名称:
确保名称引用的是通过单击列标题选择的整个列,而不仅仅是列中的一系列单元格
就这样!通过定义这两个名称,我们可以对数据表进行排序,而不必考虑其行和列,即使以后添加了更多:
Range("RegionTag").CurrentRegion.Sort _
key1:=Range("SortCol"), order1:=xlDescending, Header:=xlYes
以下是使用上述语句排序的数据表:
不客气!祝你的项目好运!善意的问候,嘿,有时我会遇到这样的错误:1004在执行时排序引用无效,现在我知道为什么了,因为我从其他工作表调用这个函数,我必须在列中的范围之前添加“.”,我的错误