No.1ベストアンサー
- 回答日時:
興味がわいたので、下記URLを参考に作成してみました
http://www.geocities.co.jp/SilkRoad/4511/vb/sort …
参考程度に...
'構造体宣言
Private Type HOGE_HOGE
hoge1 As Long
hoge2 As Long
hoge3 As Long
End Type
'変数宣言
Private hogehoge As HOGE_HOGE
'テストルーチン
Private hoge_test()
Dim i As Long
'hogehoge配列にデータ格納
***********
'hogehoge配列ソート前
For i = 0 To Ubound(hogehoge) Step 1
Debug.Print "1:" & hogehoge(i).hoge1 & " 2:" & hogehoge(i).hoge2 & " 3:" & hogehoge(i).hoge3
Next i
'hogehoge配列ソート実行
Call QuickSorthogehoge(1, Ubound(hogehoge))
'hogehoge配列ソート後
For i = 0 To Ubound(hogehoge) Step 1
Debug.Print "1:" & hogehoge(i).hoge1 & " 2:" & hogehoge(i).hoge2 & " 3:" & hogehoge(i).hoge3
Next i
End Sub
'hogehoge配列クイックソート
Private Sub QuickSorthogehoge(ByVal lngStart As Long, ByVal lngEnd As Long)
Dim BaseHoge As HOGE_HOGE '基準値を格納する変数
Dim BuffHoge As HOGE_HOGE '値をスワップするための作業域
Dim lngBaseNumber As Long '中央の要素番号を格納する変数
Dim lngCounter As Long '格納位置カウンタ
Dim i As Long 'ループカウンタ
'終了番号が開始番号以下の場合、プロシージャを抜ける
If lngStart >= lngEnd Then Exit Sub
'中央の要素番号を求める
lngBaseNumber = (lngStart + lngEnd) \ 2
'中央の値を基準値とする
BaseHoge.hoge1 = hogehoge(lngBaseNumber).hoge1
BaseHoge.hoge2 = hogehoge(lngBaseNumber).hoge2
BaseHoge.hoge3 = hogehoge(lngBaseNumber).hoge3
'中央の要素に開始番号の値を格納
hogehoge(lngBaseNumber).hoge1 = hogehoge(lngStart).hoge1
hogehoge(lngBaseNumber).hoge2 = hogehoge(lngStart).hoge2
hogehoge(lngBaseNumber).hoge3 = hogehoge(lngStart).hoge3
'格納位置カウンタを開始番号と同じにする
lngCounter = lngStart
'開始番号の次の要素から終了番号までループ
For i = (lngStart + 1) To lngEnd Step 1
'値が基準値より小さい場合
If hogehoge(i).hoge2 < BaseHoge.hoge2 Then
'格納位置カウンタをインクリメント
lngCounter = lngCounter + 1
'値をスワップ
BuffHoge.hoge1 = hogehoge(lngCounter).hoge1
BuffHoge.hoge2 = hogehoge(lngCounter).hoge2
BuffHoge.hoge3 = hogehoge(lngCounter).hoge3
hogehoge(lngCounter).hoge1 = hogehoge(i).hoge1
hogehoge(lngCounter).hoge2 = hogehoge(i).hoge2
hogehoge(lngCounter).hoge3 = hogehoge(i).hoge3
hogehoge(i).hoge1 = BuffHoge.hoge1
hogehoge(i).hoge2 = BuffHoge.hoge2
hogehoge(i).hoge3 = BuffHoge.hoge3
End If
Next i
'hogehoge(lngCounter) を開始番号の値にする
hogehoge(lngStart).hoge1 = hogehoge(lngCounter).hoge1
hogehoge(lngStart).hoge2 = hogehoge(lngCounter).hoge2
hogehoge(lngStart).hoge3 = hogehoge(lngCounter).hoge3
'基準値を hogehoge(lngCounter) に格納
hogehoge(lngCounter).hoge1 = BaseHoge.hoge1
hogehoge(lngCounter).hoge2 = BaseHoge.hoge2
hogehoge(lngCounter).hoge3 = BaseHoge.hoge3
'分割された配列をクイックソート(再帰)
Call QuickSorthogehoge(lngStart, lngCounter - 1)
'分割された配列をクイックソート(再帰)
Call QuickSorthogehoge(lngCounter + 1, lngEnd)
End Sub
参考URL:http://www.geocities.co.jp/SilkRoad/4511/vb/sort …
コーディングまでして頂きありがとう御座います。
大変勉強になりました。
VBを始めて間もないのですが、テキストファイルでのソートやグルーピングでお困りの方は多いのではと思います。
No.2
- 回答日時:
集約は置いといて
簡単に並べ替えをするならリストボックスが使えます。
Sortプロパティ(だったと思う)をTrueにしたリストボックスに
シーケンシャルファイルから読みこんだデータをどんどん追加し、
ファイルが終わったらリストボックスの中に並べ替えられたデータが入っています。
ここまでくれば集約はそんなに大変じゃないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelグラフのラベルオプションの並べ替えは可能ですか。セルの値を最後にしたいのですが。 1 2022/06/05 10:45
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- その他(コンピューター・テクノロジー) Power Shellコマンドで作成日時を一括シフトする方法 3 2022/10/21 12:37
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- ニコニコ動画 【Premiere Pro】をお使いの方 カット作業を他動画に反映することはできますか? 1 2022/05/18 16:27
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- その他(災害) 600名が避難してくる中で自分の班を見つける方法 4 2022/08/06 14:47
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
構造体配列の並べ替え
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[エクセル]連続する指定範囲か...
-
iniファイルのキーと値を取得す...
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
配列がとびとびである場合の書き方
-
.NET - 配列変数を省略可能の引...
-
エクセルで、絶対値の平均を算...
-
読み込みで一行おきに配列に格納
-
Excel VBA 配列の分割について
-
array関数で格納した配列の型を...
-
VBAで指定期間の範囲を抽出し、...
-
表にフィルターをかけ、絞った...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
【VBA】ユーザーフォーム リス...
-
VBAでの100万行以上のデータの...
-
エクセルの行の削除を配列で高...
-
VBA Dictionaryオブジェクトの...
-
VB6.0 ファイルの一括読込み
-
DataSetから、DataTableを取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
読み込みで一行おきに配列に格納
-
表にフィルターをかけ、絞った...
-
配列がとびとびである場合の書き方
-
VBA 配列に格納した値の平均の...
-
DataSetから、DataTableを取得...
-
【VBA】ユーザーフォーム リス...
-
iniファイルのキーと値を取得す...
-
.NET - 配列変数を省略可能の引...
-
Split関数でLong配列に格納する...
-
Datatableへの代入
-
Excel オートフィルタのリスト...
-
SUMPRODUCT関数を用いた最小値
-
エクセル 条件を指定した標準...
-
EXCEL VBA 2次元配列に格納さ...
-
[VBA]改行入りのセルの値を配列...
おすすめ情報