Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Excel VBA按列值排序工作表数据_Vba_Sorting_Excel_Worksheet Function - Fatal编程技术网

使用Excel VBA按列值排序工作表数据

使用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

我在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) = 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在执行时排序引用无效,现在我知道为什么了,因为我从其他工作表调用这个函数,我必须在列中的范围之前添加“.”,我的错误