(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【ExcelVBA】文字列の長さでソートを行う

スポンサーリンク

やりたいこと

文字列の長さで列の値をソートする。
例としては

123
あい
abcd

abcd
123
あい

に並び替える。

環境情報
  • Microsoft Visual Basic for Applications 7.1

やり方

並べ替えを列の最終行を取得した上で(1列目とする)

lastRowNum = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

その列の隣に文字列の長さを記載し

For i = 1 To lastRowNum
...
Cells(i,2)=Len(Cells(i,1))

2列目をキーにソートを行う。

Dim sortRange As Range
Set sortRange = Range("A1:B" & lastRowNum)
With sortRange
    .Sort key1:=tws.Cells(1, 2), order1:=xlDescending, Header:=xlYes
End With

すると結果として以下のように1列目が文字数の降順となっている。

abcd | 4
123 | 3
あい | 2

以下、補足です。

補足

VBAにはSort関数がありますが、オプションを用いて文字列の長さで並び替えはできません。
そのためいくつかやり方はありますが、今回はシンプルに文字列の長さを同じ行に記載し、その列をキーに並び替えをかけることで文字の長さ順にしています。

ポイントは.Sort key1にて指定する値なので、以下のように記載すると単純なアルファベット順にて範囲全体がソートされます。

    With sortRange
    .Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlYes
    End With

以上。