• ベストアンサー

VB6での配列の SORT の使い方 

 お世話になります。   下記のように、配列にランダムな数値を入れて、それを昇順、降順にしたいのですが、この場合の SORT の使い方を教えて欲しいです。  Dim YUI(100) As Integer   YUI(1) =88:YUI(2) =53:YUI(3) =7 ~ YUI(98) =13:YUI(99) =2:YUI(100) =94 下記のような並べ替えをしていますが、SORT を使った場合の書き方を教えて下さい。 Dim I1,I4,D7 As Integer For I1 = 1 To 100 - 1 For I4 = I1 + 1 To 100 If YUI(I1) < YUI(I4) Then D7 = YUI(I4) YUI(I4) = YUI(I1) YUI(I1) = D7 End If Next I4 Next I1

質問者が選んだベストアンサー

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

VBにはソートを行う関数やメソッドなどはないようですね。 以下は配列ソートの例 (ご参考に) http://www.geocities.co.jp/SilkRoad/4511/vb/sort.htm

ryu8472
質問者

お礼

VBは案外、不便? 早速の御回答有難う御座いました。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

◆ VB.NETでのソートについて http://chaichan.web.infoseek.co.jp/vbtips/VBMemo2007-03-28.htm VB6.0にSORTってありましたっけ?

ryu8472
質問者

お礼

ウーン、無かったですか? 残念。 早速の御回答有難う御座いました。

関連するQ&A

  • VB6 2つのListBoxをソート

    VB6で約3000のデータをListBoxに入れて有ります。 ListBox1=ファイル名 ListBox2=ファイルアドレス と2つに分けてListBoxに入れて有り、このインデックス値は双方常に一緒でなければなりません。 ここで困ってしまったのが、Sortedはどうすれば良いのか?です。 片方ソートでも両方ソートでも順番(インデックス値)がばらばらになってしまいます。 そこで下記方法でListBoxを更に3つ追加して(1つをSorted)1つ1つソートしたインデックス順に並び替えたらソートに時間がかかってしまいました。 何か良い方法は無いでしょうか? (ListViewは経験が無いためこの方法の場合はやり方又は参考サイトを入れて頂けると助かります) Dim i As Integer Dim j As Integer Dim k As Integer k = LI1.ListCount - 1 For i = 0 To k LI3.AddItem LI1.List(i) LI4.AddItem LI2.List(i) LI5.AddItem LI1.List(i) 'SortedのListBox Next i LI1.Clear LI2.Clear For i = 0 To k For j = 0 To k If LI3.List(j) = LI5.List(i) Then LI1.AddItem LI3.List(j) LI2.AddItem LI4.List(j) Exit For End If Next j Next i LI3.Clear LI4.Clear LI5.Clear '(LI = ListBox)

  • VB Shell sort

    初心者です。 シェルソート後の数字がうまく表示できません。 見よう見まねでしているので、どこがどうおかしいのかわかりません。 大変、恐縮ですが宜しくお願いいたします。 ----------------------------------------- Public Class Form1 Dim intNumber() As Integer = {2, 6, 4, 8, 10, 12, 89, 45, 37} Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Display unsorted numbers to lists For i As Integer = 0 To 8 lstShell.Items.Add(intNumber(i)) Next End Sub Sub btnSort2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSort2.Click Dim i As Integer, j As Integer, k As Integer Dim temp As Integer Dim gap As Integer Dim count As Integer gap = count / 2 Do While gap > 0 k = 0 Do While k < gap j = k + gap Do While j < count i = j - gap Do While i >= k If intNumber(i + gap) > intNumber(i) Then temp = intNumber(i + gap) intNumber(i + gap) = intNumber(i) intNumber(i) = temp Else Exit Do End If i = i - gap Loop j = j + gap Loop k = k + 1 Loop gap = gap / 2 Loop 'Display numbers to list lstShell.Items.Clear() For i As Integer = 0 To 8 lstShell.Items.Add(intNumber(i)) Next End Sub End Class

  • 1次元配列のソート方法

    配列のソートメソッドについて質問させていただきます。 VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。 データテーブルが格納されている配列があり、 その配列をソートしたいと思っています。 データテーブルの中に「NO」と「ID」というフィールドがあります。 NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、 条件によっては上手くいきません。 よろしければ、教えていただけないでしょうか? また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか? 宜しくお願いいたします。 [例] workDT() ← 元のデータテーブル配列 Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列 Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列 Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列 Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列 Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用 ' IDでソート For i = 0 To workDt.Length - 1 ID(i) = workDt(i).Rows(0).Item("ID") Index(i) = i Next ' 配列をIDでソート Array.Sort(ID, Index) ' ソート後配列をテンプ配列に格納 For i = 0 To workDt.Length - 1 tmpDatatable(i) = workDt(Index(i)).Copy Next ' NOでソート For i = 0 To tmpDatatable.Length - 1 NO(i) = tmpDatatable(i).Rows(0).Item("NO") Index(i) = i Next ' 配列をNOでソート Array.Sort(NO, Index) ' ソート後配列を格納 For i = 0 To tmpDatatable.Length - 1 Datatable(i) = tmpDatatable(Index(i)).Copy Next これで各配列を初期化します。 workDTに5つのデータテーブルが入っていて workDT(0):ID=3、NO=1 workDT(0):ID=1、NO=5 workDT(0):ID=2、NO=5 workDT(0):ID=4、NO=5 workDT(0):ID=5、NO=7 (IDは重複不可設定、NOは重複可設定です。) とした場合、NOのソートのところで変な順番になってしまいます。 Array.Sort(NO, Index) このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか? 環境はWindowsXPSP3とVB2005です。

  • VBでの内部配列のソートについて

    VBの部品(Grid,List) を使用しないで、 内部の配列によるソートをする場合の 方法はどのようなものがあるでしょうか? SORT_area(10000)  code1 as integer; code2 as integer; code3 as integer; code4 as integer; で、code1からcode4の昇順でソートを したいです。 よろしくおねがいします。

  • excelVBA 配列ソート方法

    こんにちは、 下記のコードを使ってsetint配列の値を 昇順にソートしようとしているのですが、 最小値が最後に来てしまいます。 何か昇順にソートする方法はないでしょうか。 '昇順並び変え For run = 1 To UBound(setint) For run1 = UBound(setint) To 1 Step -1 If setint(run) >= setint(run1) Then swap = setint(run) setint(run) = setint(run1) setint(run1) = swap End If Next Next For run = 1 To UBound(setint) Debug.Print setint(run) Next

  • コレクションの数値をSortで並び替える

    ご多忙中申し訳ありません。 Dim data As New List(Of Integer)で型指定した、dataの数値を単純に、下記のコードのようにdata.Sort() で並べ替えをしても綺麗に並べ替えが出来ますが、殆どのサイトでは、このような使い方をせず、IComparerインターフェイスを実装したクラスを使ったり、又はバブルソートなどを使って並べ替えをしていますが。 単純にdata.Sort() のような、並べ替えは問題があるのでしょうか、大変恐縮ですがご教示ください。 FormにButtonとListBoxを貼り付けました。 Dim data As New List(Of Integer) 'Integer型にする。 Private Sub f() Handles MyBase.Load 'データをaddする。 data.Add(235) data.Add(4) data.Add(567) data.Add(53) data.Add(56) data.Add(87943) data.Add(43) data.Add(890) data.Add(342) data.Add(56) data.Add(64) data.Add(5) data.Add(0) ListBox1.Items.Clear() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim dtcnt As Integer 'リストの数の変数。 dtcnt = data.Count 'リストの数を取得してループの回数に使う。 data.Sort() '並べ替え For i = 0 To dtcnt - 1 ListBox1.Items.Add(data(i)) 'テストの結果をリストボックスに表示。 Next 'ListBox1には綺麗に並べ替えが完了して表示されています。 End Sub 何卒宜しくお願いします。

  • 構造体配列のソート

    VB6 ソートのやり方は知っていますが、構造体の定義が変わると対応できません。 ソート処理部分だけを共通関数にできますでしょうか? Private Type Sort strCol1 As String intCol2 As Integer sttCol3 As String End Type Private Sub A() Dim typSort(3) As Sort 'ここに、構造体データ設定処理を記述 Call subSort(typSort(), typSortCopy) End Sub Private Sub subSort(typTaget() As Sort) Dim lngOutLoop As Long Dim lngCurent As Long Dim lngInLoop As Long Dim Min As Variant Dim typSortCopy As Sort For lngOutLoop = LBound(typTaget) To UBound(typTaget) - 1 Min = typTaget(lngOutLoop).strCol1 lngCurent = lngOutLoop For lngInLoop = lngOutLoop + LBound(typTaget) + 1 To UBound(typTaget) If typTaget(lngInLoop).strCol1 < Min Then Min = typTaget(lngInLoop).strCol1 lngCurent = lngInLoop End If Next lngInLoop typTagetCopy = typTaget(lngOutLoop) typTaget(lngOutLoop) = typTaget(lngCurent) typTaget(lngCurent) = typTagetCopy Next lngOutLoop End Sub

  • VB2005で、Structureの配列を返すプログラムを以下のように書きたい

    VB2005で、Structureの配列を返すプログラムを以下のように書きたいのですが、そもそもVB6しか使ったことが無いもので、以下のような素数の結果を返すこのプログラムの書き方はVB2005らしいでしょうか? Module Module1 Public Structure SosuuStatus Public num As Integer Public status As String End Structure Class Sosuu Function SosuuCheck(ByVal st As Integer, ByVal ed As Integer) As SosuuStatus() Dim i As Integer, j As Integer Dim sosuu(0 To ed - st) As SosuuStatus Dim cnt As Integer = 0 For i = st To ed sosuu(cnt).num = i sosuu(cnt).status = "" '初期化 If 1 = i Then sosuu(cnt).status = "素数ではない" ElseIf 0 = (i Mod 2) Then sosuu(cnt).status = "素数ではない" Else For j = 3 To Math.Sqrt(ed) If 0 = (i / j) Then sosuu(cnt).status = "素数ではない" End If Next j End If If sosuu(cnt).status = "" Then sosuu(cnt).status = "素数である" End If cnt = cnt + 1 Next i SosuuCheck = sosuu End Function End Class End Module

  • VB バリアント型の配列の例について

    長々と失礼します。私の使用している教科書に 「バリアント型の2次元配列」と「バリアントに2次元配列を代入」というのを組み合わると「行列i要素とする行列」たとえば 2 5 9 4 1 8 7 3 6 1 5 9 8 0 1 6を的確に表現できます。 と書いており、下のように書かれているのですが上のような配列を表示しません。どこが間違っているのでしょうか?そもそも上のように表示できるのか理解に苦しんでおります Option Base 1 Private Sub Command1_Click() Dim a(2,2) As Variant Dim c(2,2) As Integer For i = 1 To 2 For j = 1 To 2 For p = 1 To 2 For q = 1 To 2 c(p,q) = p + q + i * j Next q Next p a(i,j) Next j Next i For i = 1 To 2 For p = 1 To 2 For j = 1 To 2 For q = 1 To 2 Print a(i,j)(p,q), Next q Next j Print Next p Next i End Sub

  • 目盛表示ができない(vb2010)

    下記のグラフのように、Y軸に目盛表示をしたいのですが、うまくできません。 PictureBoxにLineは表示できるのですが、目盛が表示できません。 どなたかお教え願います。 下記のコードでは、目盛表示ができないのでしょうか。    '目盛表示 Dim J As Integer, CurrentY As Integer, CurrentX As Integer Dim strB As String J = 0 For I = 0 To 200 Step 40 CurrentX = 120 CurrentY = 100 + I strB = CStr(0.2 - (2 / 5) * J * 0.1) J = J + 1 Next J = 0 For I = 0 To 200 Step 40 CurrentX = 120 CurrentY = 300 + I strB = CStr(0 - (2 / 5) * J * 0.1) J = J + 1 Next