web-dev-qa-db-ja.com

Excel VBAを使用して列の値でワークシートデータを並べ替える

VBAで開発された次のユーザーフォームがあります。これは、情報を表示するためのワークシートから情報を取得します

enter image description here

私はすべての情報をセグメントごとに無秩序に注文したい、これはコードです:

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)列で並べ替える方法???

8
Jesus

次のようなVBAステートメントを使用して、Excelワークシートを昇順で並べ替えることができます。

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

注:XFDの代わりにColumns("A:XFD")列範囲に、あなたのケースに関連する最後に使用された列を入力します。 Columns("A:DD")

これが役立つことを願っています。

11
Alexander Bell

データテーブルを並べ替えるには、CurrentRegion関数と共にExcel Namesを使用します。これは、列参照をハードコーディングするよりもリスクが少なく、2つの簡単な手順で実行できます。

列を指定する方が望ましい理由は、列を間違えたり、後で変更したりすると、データがスクランブルされるためです!並べ替えを実行すると、省略された列のセルはそのまま残り、間違った行の一部になります。そして、これは、VBAを更新することを忘れない限り、後で列を追加した場合に発生することです。

このアプローチを使用するための2つの簡単な手順を次に示します。この例では、4つの列と4つの行を持つデータテーブルを選択しました。

enter image description here

COL3降順でソートします。他の3つの列のセルは同じ値を共有するため、すべてのセルが正しい行にとどまっていることを簡単に確認できます。

ステップ1:永続的にする列のヘッダーなど、削除される可能性が低いデータテーブル内のセルを選択し、このセルの名前を定義します。名前を定義するには、セルを選択し、ワークシートの上にあるExcelの[名前]ドロップダウンに直接入力します。ここでは、RegionTagという名前を使用しました。

enter image description here

すぐに、CurrentRegionはこれからデータテーブル全体を参照できます。 VBAの行をコーディングしてテーブルを選択すると、実際の動作を確認できます。

Range("RegionTag").CurrentRegion.Select

これが結果です:

enter image description here

これは単なる説明のためであり、Name/CurrentRegionの組み合わせの威力を示しています。ソートするためにテーブルを選択する必要はありません。

ステップ2:2番目の名前を定義します。今回は、並べ替えの対象となる列に対して:

enter image description here

名前が列のセル範囲だけでなく、列ヘッダーをクリックして選択した列全体を参照していることを確認してください。

それでおしまい!これら2つの名前を定義すると、後でさらに追加された場合でも、行と列を意識せずにデータテーブルを並べ替えることができます。

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

上記のステートメントを使用してソートされたデータテーブルを次に示します。

enter image description here

5
Reg Edit