やりたいこと
文字列の長さで列の値をソートする。
例としては
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
以上。