VBAでデータをソートした時に正しく並び変わらなかったとはありませんか?
今回は並び替えができなかった原因と対処法を紹介します。
データが正しくソートされない
ソートされない状態を再現します。
支店ごとの従業員情報を確認するために、以下の通りに並び替えてみましょう。
使用したコードはこちら↓
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub sample() Dim Ws1 As Worksheet Set Ws1 = Worksheets("Sheet1") Ws1.Range("A1").CurrentRegion.Sort _ Key1:=Ws1.Range("C1"), Order1:=xlAscending, _ Key2:=Ws1.Range("B1"), Order2:=xlAscending, _ Key3:=Ws1.Range("D1"), Order3:=xlAscending, _ Header:=xlYes End Sub |
実行結果を確認すると名前降順で並び替えたはずが「伊藤さん」が「内山さん」の下にいますね。
うめ
なんで五十音順に並ばないんだろう?
原因は「ふりがな」
「名前」の列をふりがな表示に切り替えると正しくソートされなかった「伊藤さん」にふりがなが設定されていないことがわかります。
対処法
対処法は2つあるので、状況によって使い分けましょう。
ソート条件でふりがなを除外
「名前」のソート内に「SortMethod:=xlPinYin」を追記するとふりがなを無視して入れ換えを行います。
1 2 3 4 5 |
Ws1.Range("A1").CurrentRegion.Sort _ Key1:=Ws1.Range("C1"), Order1:=xlAscending, _ Key2:=Ws1.Range("B1"), Order2:=xlAscending, SortMethod:=xlPinYin, _ Key3:=Ws1.Range("D1"), Order3:=xlAscending, _ Header:=xlYes |
ソート前にふりがなを一括削除
ソート前に「Characters.PhoneticCharacters=””」でふりがなの情報を空白に変更します。
1 2 3 4 5 6 7 8 |
'ふりがなを削除 Ws1.Range("B:B").Characters.PhoneticCharacters = "" Ws1.Range("A1").CurrentRegion.Sort _ Key1:=Ws1.Range("C1"), Order1:=xlAscending, _ Key2:=Ws1.Range("B1"), Order2:=xlAscending, _ Key3:=Ws1.Range("D1"), Order3:=xlAscending, _ Header:=xlYes |
これで正しく並び替えができます!
まとめ
今回はVBAでデータをソートした時に正しく並び変わらなかった時の対処法について紹介しました。
コードが間違っていないのにソート順がおかしい場合はふりがなを確認してみましょう!