ULALA'Sブログ

ULALA'Sブログ

2020年09月12日
XML
カテゴリ: VBA
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 今回からデータの並び替えについて記載。

尚、テキストを持っている方は分かると思うが、
Excel2007からは以前(2003)よりも記載内容が多く、
複雑になったので少し整理しながら記載したいと思う。



①Worksheets.Sort(設定)
②Worksheets.Sort.Apply(実行)



下記画像にて、
並替対象欄:お店、商品、値段、日付で指定可能
順欄:昇順か降順で指定可能
とした。

なお、並び替え前の状態を保持しておくため、
G列以降に並べ替える前の状態を記載しておく。



ソース

Sub setSortBasic ()
' 初期設定
Worksheets (3). Sort.SortFields.Clear

' 並替対象
Dim sortPoint ​As ​String​​
​Select Case​ Range Value
Case "お店"
sortPoint = "B5"
Case "商品"
sortPoint = "C5"
Case "値段"
sortPoint
Case "日付"
sortPoint = "E5"
Case Else
' 取得できなかった時のデフォルト(値段)
sortPoint = "D5"
End Select

' 順取得
Dim ​​ sortOrder ​​ As Integer
Select Case Range("E2").Value
Case "昇順"
sortOrder = 1    ' xlAscending
Case "降順"
sortOrder = 2    ' xlDescending
Case Else
' 取得できなかった時のデフォルト(昇順)
sortOrder = 1
End Select

' ソート条件設定
Worksheets (3). ​​Sort.SortFields.Add Key:=Range( sortPoint ), _​​
​SortOn:=xlSortOnValues, Order:=​ ​​ sortOrder ​​ ​DataOption:=xlSortNormal​

' ソート実行
With Worksheets (3). ​Sort​
​.SetRange Range("B5:E14")​
​.Header = xlNo​
​.Orientation = xlTopToBottom​
​.Apply​
End With

End Sub

結果



値段の昇順で並び替えられたことが確認できた。

​​​​​ソースが長くなってしまったが、
Excel2007以降は、
ソート条件設定 ソート実行 の2つで構成
されるようになった。

ソート条件 の方から分解してみていく。

と、その前に初期設定の
​​ Worksheets (3). Sort.SortFields.Clear ​​
についてだが、
これはマクロ実行前にソート
されていた際ソート条件が追加されてしまうため、
念のためソート条件をクリアしておこう、ということ。

では気を取り直して、、

Worksheets (3). ​Sort.SortFields.Add​
→並び替えの設定開始

​​Key:=Range( sortPoint )​​
→どの列を基準に並び替えを行うかを指定
​​​​​ この場合、値段を基準とするため、
 case式の"D5"が設定されることになる。

SortOn:=xlSortOnValues, 
→何をもとに並び替えをするか?ということ。
 上記指定の場合、セル内の値を元に並び替えをするということ。
 ほかにも、セル内の文字の色(xlSortOnFontColor)や
 セルの背景色(xlSortOnCellColor)で
 並び替えを行う指定が可能。 ​(今回は割愛)​


​Order:= sortOrder ,​
→今回はソート順をExcelのセル内で指定できるように
 したため、 必然的に変数を利用 することになる。
 テキストや一般的なサイトには、
 xlAscending:昇順
 xlDescending:降順

 で記載されることが多いが、この値自体が定数なので、
 F2を押下し、ライブラリ検索してみれば実際の値がみられる。

昇順の定数)


降順の定数)


 ここだけに限った話ではないが、
 定数指定されている箇所はライブラリ検索でどういう値が
 設定されているかを確認すれば、変数として設定する
ことも可能なのでF2のクセを付けておくと良いかと思う。

DataOption:=xlSortNormal
→並び替え対象のデータに数値と文字列が混在していた場合
 の並べ替え方法を指定。
 xlSortNormal:文字列と数値を別々に並び替える
 xlSortTextAsNumbers:文字列を数値として並び替える

 上記の画像例だと、値段欄の書式に文字列が混ざって
 いた場合に、それを加味して並び替える(
xlSortTextAsNumbers )か
 数値と文字列は別々に並び替える(
xlSortNormal )かということ。


​続いて、 ソート実行 の方を見ていく。​

With Worksheets (3). Sort
 →Sort実行するための条件を設定する為、With句で宣言

.SetRange Range("B5:E14")​
 →並び替えるデータの範囲を指定

.Header = xlNo​
 →上記で指定した範囲にヘッダ(タイトル)行が含まれるかどうか?
   xlNo:ヘッダ行含まないので上記範囲をそのまま並び替え

   xlYes:ヘッダ行含むので上記範囲の2行目から並び替え

.Orientation = xlTopToBottom​
 →並び替える方向をどうするか?
  xlTopToBottom:上から下、つまり行を並び替える
  xlLeftToRight:左から右、列を並び替える


.Apply​
 →並び替え実行
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
以上、並び替えの基本的な部分について記載。

​​





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2020年09月12日 23時04分53秒
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

×

プロフィール

ULALA13

ULALA13

カレンダー


© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: