最後は、取得した当せんデータを回数の若い順に並べ替える処理です。
素直にページ順でデータを取得すると最新回のデータが先頭になってその後、過去の月別、
過去のデータという感じの並びになって順番がバラバラになります。
もちろんデータ取得するときにそれを考慮して取得すればソートする必要はないのですが、
今回はデータ取得処理を簡略化しているために最後にソート処理しています。
下記が2007年8月8日に実際にデータ取得したロト6の当せんデータです。
00354,04,06,22,31,34,41 43
00350,13,18,25,26,29,40 06
00351,03,13,16,24,26,43 15
00352,06,08,24,25,34,38 10
00353,01,09,15,16,22,26 29
00346,04,09,11,12,32,38 16
00347,08,20,23,27,32,33 13
00348,04,05,06,27,36,38 13
00349,08,13,15,19,20,30 25
最新回(354回)のあとに2007年7月の当せんデータ(350回~353回)、2007年6月の
当せんデータ(346回~349回)と続きます。これでは少しわかりにくいと思います。
実際に最初のカンマまでの5文字を数値変換して、そのデータでソートするとこんな感じになります。
00346,04,09,11,12,32,38 16
00347,08,20,23,27,32,33 13
00348,04,05,06,27,36,38 13
00349,08,13,15,19,20,30 25
00350,13,18,25,26,29,40 06
00351,03,13,16,24,26,43 15
00352,06,08,24,25,34,38 10
00353,01,09,15,16,22,26 29
00354,04,06,22,31,34,41 43
一応少しわかりにくいのですがソートの処理を記述しておきます。データを入れ替えないで
指定したインデックス配列に昇順のデータがセットされる処理です。
piLoto6Cntにはロト6当せんデータ数、pstLoto6Tmp配列には当せんデータ文字列が格納されているとします。
Dim i As Integer
Dim piLoto6Idx() As Integer ' 昇順インデックス配列
Dim piLoto6IdxData() As Integer ' 回数データ配列
Dim pstLoto6() As String ' ソート後の当せんデータ文字列配列
ReDim piLoto6Idx(piLoto6Cnt)
ReDim piLoto6IdxData(piLoto6Cnt)
For i = 0 To piLoto6Cnt - 1
' 先頭5文字を回数データに数値変換
piLoto6IdxData(i) = CInt(Mid(pstLoto6Tmp(i), 1, 5))
Next i
Call SortIndex(piLoto6Cnt, piLoto6Idx, piLoto6IdxData, 0) ' 昇順ソートを実行
ReDim pstLoto6(piLoto6Cnt) ' ソート後の当せんデータ配列を確保
For i = 0 To piLoto6Cnt - 1
pstLoto6(i) = pstLoto6Tmp(piLoto6Idx(i) - 1)
Debug.Write(pstLoto6(i))
Next i
'
' 【インデックスソート処理】
'
' iMax --> データ数
' SortNum() --> ソート順のインデックスが格納される配列
' InData() --> ソートの元データ
'
Public Sub SortIndex(ByVal iMax As Integer, ByVal SortNum() As Integer, ByVal InData() As Integer,
ByVal Mode As Integer)
Dim i, j As Integer
Dim iNumWork() As Integer
Dim iWorkData() As Integer
Dim bSts As Boolean
Dim iPos, iWork As Integer
Dim iData As Integer
ReDim iNumWork(iMax)
ReDim iWorkData(iMax)
' データをチェック
bSts = False
For i = 0 To iMax - 1
If InData(i) <> 0 Then
bSts = True
Exit For
End If
Next i
For i = 0 To iMax - 1
SortNum(i) = i + 1
Next i
' データが全て0の時は終了
If bSts = False Then
Return
End If
' ソートデータをセット
For i = 0 To iMax - 1
iWorkData(i) = InData(i)
Next i
' データをSORTして数値の高い方から並べる
For i = 0 To iMax - 2
iPos = i
iData = iWorkData(iPos)
For j = i + 1 To iMax - 1
If Mode = 0 Then ' 昇順
If iData > iWorkData(j) Then
iPos = j
iData = iWorkData(j)
End If
Else ' 降順
If iData < iWorkData(j) Then
iPos = j
iData = iWorkData(j)
End If
End If
Next j
iWorkData(iPos) = iWorkData(i)
iWorkData(i) = iData
iWork = SortNum(iPos)
SortNum(iPos) = SortNum(i)
SortNum(i) = iWork
Next i
End Sub
最近のコメント