|
皆さん、こんにちは。
▼Blue さん:
>' ユーザ定義型を使ったサンプル(かなり適当)
>Option Explicit
>
>Private Type Dice
> Value As Integer ' 目
> Count As Integer ' 回数
>End Type
>
>Public Sub Test()
> Dim CSVData() As String
> Dim DiceInfo(5) As Dice ' サイコロの情報
> Dim i As Long
> Dim swapped As Boolean
> Dim temp As Dice
>
> ' 初期化
> For i = LBound(DiceInfo) To UBound(DiceInfo)
> DiceInfo(i).Value = i + 1
> Next
>
> ' カンマ区切りに配列に設定
> CSVData = Split("1,1,1,1,2,2,2,3,3,5,6,6", ",")
>
> ' 振り分け
> For i = LBound(CSVData) To UBound(CSVData)
> DiceInfo(CInt(CSVData(i)) - 1).Count = _
> DiceInfo(CInt(CSVData(i)) - 1).Count + 1
> Next
>
> ' 回数による降順並び替え(バブルソート)
> Do
> swapped = False
> For i = LBound(DiceInfo) To UBound(DiceInfo) - 1
> If DiceInfo(i).Count < DiceInfo(i + 1).Count Then
> swapped = True
> ' 入れ替え
> temp = DiceInfo(i)
> DiceInfo(i) = DiceInfo(i + 1)
> DiceInfo(i + 1) = temp
> End If
> Next
Loop While swapped
'ではないですか?
>
> ' イミディエイトウィンドウに表示
> For i = LBound(DiceInfo) To UBound(DiceInfo)
> Debug.Print CStr(i + 1) & "位:"; DiceInfo(i).Value
> Next
>End Sub
それはともかく・・・・。
>ともたさんの方法ではエクセルシートを利用しているようですが、
>実はやっているのが
>CSVファイルからデータを読み込んで
>エクセルシートは利用しないで計算させ、
>CSVに出力しているので出来ればシートを利用しない方法がいいです。
「CSVファイルのI/Oだから、シートを利用したくない」の
因果関係がわかりません。
つまり、CVSファイルのを読み込んだり、書き込んだりの処理があっても
シートを利用すれば処理が簡単なら、それのほうが良くないですか?
これ、ワークシート関数のRankを使うと比較的容易に処理できると
思いますが・・・。
>ソートした結果を配列で取得したいです
シートに結果を出した後に、配列に取得することは簡単ですよ!!
ソートのアルゴリズムを学びたいと言うのであれば、
ここの過去ログにも簡単なのから、難しいものまで
ありますけどね!!
|
|