[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/04/10(Mon) 10:01
投稿者名:VBくん
Eメール:
URL :
タイトル:
ソートのことで聞きたいです。
ソートで任意の数字を小さい順に並べるコードを教えてほしいです。VBを始めて日がたってないので
、でき
るだけ分かりやすく教えてください。お願いします。

投稿時間:2006/04/10(Mon) 11:37
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ソートのことで聞きたいです。
とりあえず、Googleで、"VB ソート"とかで探してみるとか。
hhttp://www.google.co.jp/search?hl=ja&q=VB+%E3%82%BD%E3%83%BC%E3%83%88&lr=lang_ja

んで、こういうところで漠然とした質問を「わかりやすく教えてほしい」
と書いても無駄ですし無意味です。

投稿時間:2006/04/10(Mon) 11:58
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^2: ソートのことで聞きたいです。
このサイトは前にみたんですが、まだVBさわって2週間ぐらいなので
なかなか理解できませんでした。よろしかったら数字で例をあげて
教えてほしいです。

投稿時間:2006/04/10(Mon) 12:13
投稿者名:KG
Eメール:
URL :
タイトル:
Re^3: ソートのことで聞きたいです。
SAK Street
hhttp://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t06.htm

上記サイトのように、探せばサンプルソースの載っているサイトもあります。
「理解できなかった」のであれば、どこが理解できなかったのか明示しないと
返答もつきにくいかと思いますよ。

K.J.Kさんもおっしゃってるように、質問が漠然としすぎです。

投稿時間:2006/04/10(Mon) 12:38
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^4: ソートのことで聞きたいです。
アドバイスありがとうございます。VBどころかプログラムをさわったのが
2週間なのでどういう風に質問していいのかわからないのです。
だから漠然とした質問をしてしまいました。すいません

投稿時間:2006/04/10(Mon) 12:15
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re^3: ソートのことで聞きたいです。
質問の意味がわかりません。
提示されたところの多くでは、ほぼそのままで利用できるコードが
記載されています。それを実際に試してみましたか?

投稿時間:2006/04/10(Mon) 12:34
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^4: ソートのことで聞きたいです。
自分は今、「10個のテキストボックスに適当の数字を入れてボタンを押した時に
リストボックスに小さい順に数字を表示してください」ということをしています。
提示されたのをみてたんですが、Public Sub QuickSort _
    (ByRef lngArray() As Long, _
     ByVal lngStart As Long, _
     ByVal lngEnd As Long) とあるんですが、まずこのコードをどこに
記述すかで止まってしまいました。

投稿時間:2006/04/10(Mon) 12:44
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ソートのことで聞きたいです。
とりあえず、どこなら置けるのか、そしてどこなら呼び出せるのか、
を確認してみましたか?
# いくらなんでも、VBで間違えたコードを書いたからと言って、PCが
# 火を吹くことはないでしょうし。

投稿時間:2006/04/10(Mon) 13:45
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^2: ソートのことで聞きたいです。
先ほどのコードは他のオブジェクトに配置できるのですか?
自分なりにやってみたのですがうまくいきませんでした。
困らせてしまってすいません。

投稿時間:2006/04/10(Mon) 16:34
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ソートのことで聞きたいです。
とりあえずは、まず「VBに慣れる」ことに勤しむべきかと。
VBを使うに必要最低限の知識・経験がまだないように見えます。

投稿時間:2006/04/10(Mon) 16:44
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^2: ソートのことで聞きたいです。
開発の研修をしているのですが知識のないまま課題をこなしています。
今の自分は数学の問題を用意された公式に意味も分からず当てはめて解くみたいな感じなんです。
この研修をこなせばあとから自然に身につくと言われていますが心配です・・
だから掲示板でたすけを借りたいのです。

投稿時間:2006/04/10(Mon) 17:00
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ソートの件
習うより慣れろ、ということで。

投稿時間:2006/04/10(Mon) 17:18
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^2: ソートの件
慣れたいんですが基礎が知りたいのです。
だから掲示板で教えてもらって後で自分なりに理解できたらと・・・

投稿時間:2006/04/10(Mon) 18:25
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: ソートの件
ある程度の基礎があれば、(うまい)質問を行って知識を高める手段も
採りえますが、まずはVBを扱うに置いて最低限度の知識を身に付ける
必要があります。

で、基礎を得ようとするのならば、ブラウザを立ち上げてネット上で他人に
質問するよりも、VB6.EXEを立ち上げてコードを打ち込んで動かしてみて、
そこからPCやOS・VB6.EXEに直接問いかけてみる方が結果が得やすいでしょう。

なぜこう書くのか、といえば、質問内容やその質疑応答から判断すると、
とにかく基礎が足りていない・最低限必要とされる知識がない、という
印象を受けるからです。

投稿時間:2006/04/10(Mon) 13:42
投稿者名:GOD
Eメール:
URL :
タイトル:
Re: ソートのことで聞きたいです。
まず、我々には貴方のレベルがわかりません。(2週間といっても人それぞれですので)
貴方は、文字列の入れ替えはできますか?
テキストボックス2つとボタン1つを用意してボタンを押下する度にテキスト1と2の内容を入れ替え
る処理。
ソートの前に入れ替えが出来ないと話になりません。

入れ替えが出来たなら次にソートを行うわけですが、いきなり10コのソートなどやらずに2つのソー
トから
始めてはどうでしょう。例としてテキスト1に11、テキスト2に2を入れてボタンを押下してソート
してみ
る。ソートといっても単純にテキスト1の値とテキスト2の値を比較して条件を満たしていれば入れ替
えるだけ
です。

2つの数字を入れ替えることが出来たら次は3個、10個と数を増やして挑戦してください。

※ 実際上記のどこまでできますか?

投稿時間:2006/04/10(Mon) 14:06
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^2: ソートのことで聞きたいです。
返事ありがとうございます。入れ替えの処理は出来ますが参考書などをみてやりました。
いろいろと簡単な課題はクリアしていますがソートの課題だけがクリア出来ないのです。
自分は前から2つのテキストで挑戦していますがソートのコードを見てもほんとに理解ができないので
す。

投稿時間:2006/04/10(Mon) 14:37
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^3: ソートのことで聞きたいです。
    'IF 文を使用して大小比較。
    '比較時の注意としてテキストボックスの型はString型なので、各々のテキストボックスの値をCLng
関数
    '(String型をLong型に変換)を使用して数値に変更。(この時、テキストにAやB等の文字が入力され
ている
    'とエラーになるが今回は無視。数値のみが入力されていることを前提とする。)
    'テキスト1の方が大きかったら入れ替え。
↑のコメントを見てプログラムを組めますか?
処理を日本語で書くとこんな感じ。

※ もし出来ないようなら何がわからないのか(思ったのと違う動作をしてる等)を再度投稿してください


上記処理が出来たら、テキストボックスをコントロール配列にした後、For文を使用して処理をするよう
に変更
する。最初は2つ。

投稿時間:2006/04/10(Mon) 15:09
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^4: ソートのことで聞きたいです。
ありがとうございます。やってみます。分からなくなったらまた質問したいのでよろしく
お願いします。

投稿時間:2006/04/10(Mon) 15:36
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^4: ソートのことで聞きたいです。
すいません・・自分はやはり言葉では理解するのが難しくて
プログラムが組めませんでした。。。

投稿時間:2006/04/10(Mon) 16:16
投稿者名:しんや
Eメール:
URL :
タイトル:
Re^5: ソートのことで聞きたいです。
30分であきらめるなんて早すぎだと思います。
もう少しがんばってみては?

投稿時間:2006/04/10(Mon) 16:21
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^6: ソートのことで聞きたいです。
すいません。今もずっとやっていたのですが・・・
この問題に3日かけていますがほんとにできないんです。。。

投稿時間:2006/04/10(Mon) 16:25
投稿者名:しんや
Eメール:
URL :
タイトル:
追記
ちょっと言葉がきつかったかもしれませんが悪意はないです。
もういちど皆さんの回答をよく読んでみることが問題解決の近道だと思います。

投稿時間:2006/04/10(Mon) 16:30
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re: 追記
自分も頑張りたいです。。
'比較時の注意としてテキストボックスの型はString型なので、各々のテキストボックスの値をCLng
の意味をわかりますか?

投稿時間:2006/04/10(Mon) 16:53
投稿者名:ぶぶ
Eメール:
URL :
タイトル:
Re^2: 追記
> 自分も頑張りたいです。。
> '比較時の注意としてテキストボックスの型はString型なので、各々のテキストボックスの値をCLn
g
> の意味をわかりますか?
ヒントはたくさんもらってますよね。ヘルプを見てみましたか?
その上で、どこがわからないですか?

投稿時間:2006/04/10(Mon) 18:01
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^3: 追記
ソートのコードのいみが分からないです。
なのでコードを
教えてもらって後で講師にいみを聞きたいなと・・・

投稿時間:2006/04/10(Mon) 18:40
投稿者名:ぶぶ
Eメール:
URL :
タイトル:
Re^4: 追記
> ソートのコードのいみが分からないです。
> なのでコードを
> 教えてもらって後で講師にいみを聞きたいなと・・・
あえて厳しいようですが、毎回課題のたびに、コードを教えて
コードの意味を教えてでは成り立っていかないと思うのです。
今課題をこなしている環境にもヘルプ入ってると思うのですが、
わからない関数やプロパティが出たら、まずヘルプを見てみる。
関連の項目を見てみる
参考のコードも見てみる
そうすると、少しずつ知ってる関数も増えていくと思うのですが。
その上で、講師に質問したりすると、頭に入りやすくなると思うのですが
いかがですか?

投稿時間:2006/04/10(Mon) 16:55
投稿者名:しんや
Eメール:
URL :
タイトル:
ソート
> '比較時の注意としてテキストボックスの型はString型なので、各々のテキストボックスの値をCLng
> の意味をわかりますか?

かなりあせっているようですが、
調べる方法も含めて、↑がわからないのであれば理解するのは難しいと思います。
ちなみに、String型は文字列なのでClng型の長整数型に変換するということだと思います。

5 12 4 3 8 6 4 25 22 10
↑この中で一番小さい数値を求める、というプログラムを実現することはできますか?

投稿時間:2006/04/10(Mon) 17:14
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re: ソート
ほんとにすいません。分かりません。
ただ課題を参考書を見ながらこなしてたので・・・
テキストを2個配置して任意の数字を比べるな出来ますが先ほどのたくさんの場合は
分からないです。

投稿時間:2006/04/10(Mon) 17:22
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^2: 追記
まず、理解しないといけないのは文字列型(String)と数値型(Long等)の比較が違うということです。
↓のサンプルをコピペして文字列型の時にはなぜ思うような結果にならないのか研修先の先生なり先輩
なりに
説明を受けてください。(仮に私がここで説明しても貴方がどの程度理解できたのか分からないのでマン
ツーマ
ンで教えてもらった方が早いです。)

Private Sub Command1_Click()
    Dim strDmy1 As String
    Dim strDmy2 As String
    Dim lngDmy1 As Long
    Dim lngDmy2 As Long

    strDmy1 = "19"
    strDmy2 = "2"
    lngDmy1 = 19
    lngDmy2 = 2
    If strDmy1 < strDmy2 Then
        MsgBox "文字列型で比較すると" & strDmy1 & "より" & strDmy2 & "の方が大きい。"
    End If
    If lngDmy1 < lngDmy2 Then
        MsgBox "数値型で比較すると" & lngDmy1 & "より" & lngDmy2 & "の方が大きい。"
    End If
End Sub

※ マンツーマンで教えてもらう時に一緒にデバッガの使い方(ステップ実行、ブレークポイント、ウォ
ッチウ
ィンドウ)を習っておくと後々便利です。もしかして課題だけ与えて放置プレイじゃないですよね。(^^;

説明を受けた後に↓を参照するといいかも。(ASCII文字コード)
hhttp://e-words.jp/p/r-ascii.html

・17:27 修正
 図表モードで再投稿

投稿時間:2006/04/10(Mon) 17:30
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^3: 追記
わかりました。ソートの使い方のコードも教えてほしいです。
あとで講師にコードの意味も聞きたいのでお願いします。

投稿時間:2006/04/10(Mon) 18:01
投稿者名:しんや
Eメール:
URL :
タイトル:
ソート
リストボックスに並べ替えってことが書いてあったので
課題出題者の意図を読み取って考えてみました。

1.大小の判断処理ができる。
2.リストボックスを活用できる。

これが主旨だと思います。

リストボックスは指定した行に数値を入れることが可能です(このHPを調べれば載ってます)ので、
テキストボックスをtext1〜text10
それぞれの数値を 5 12 8 4 3 6 4 25 22 10
として
1.text1の内容をListBoxに入れる。
  ListBox  5

2.text2の内容とListBoxに入っている1番目の内容と比較する。(5と)
3.text2の方が大きい&2番目のデータがないのでtext1が入っている次のリストに入れる。
  ListBox  5
       12

4.text3の内容とListBoxに入っている1番目の内容と比較する。(5と)
5.text3の方が大きいが、次のデータがある。
6.text3の内容とListBoxに入っている2番目の内容と比較する。(12と)
7.text3の方が大きい&3番目のデータがないのでtext1とtext2の間に入れる。
  ListBox  5
        8
       12

これの繰り返しでいけると思います。
今何件データが入っているか調べる方法、リストの指定した行に入れる方法が
わかれば問題なく実現できるはずです。
あとはFor文くらいですので。


> わかりました。ソートの使い方のコードも教えてほしいです。
> あとで講師にコードの意味も聞きたいのでお願いします。

ネットで答え聞いたなんて言ったら講師としてはへこむと思いますので、
言わないほうがいいかと思います。研修なんだったら講師に聞くのが一番ですよ。
やる気があると思われるでしょうし。

投稿時間:2006/04/10(Mon) 18:06
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re: ソート
いろいろありがとうございます。

投稿時間:2006/04/10(Mon) 18:04
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^4: 追記
> わかりました。ソートの使い方のコードも教えてほしいです。
> あとで講師にコードの意味も聞きたいのでお願いします。
>
回答者にとってはコードだけ投げた方が楽だったり。
テキストボックスは「txtSort」という名前のコントロール配列にしてね。
「txtSort.Count - 2」と「i + 1」と「txtSort.Count - 1」は理解してね。
(なぜそのように書いているのか。理解できないと後々貴方が辛いですよ。)

Private Sub Command1_Click()
    Dim i As Long
    Dim j As Long
    Dim strChanged As String

    For i = 0 To txtSort.Count - 2
        For j = i + 1 To txtSort.Count - 1
            If CLng(txtSort(i).Text) > CLng(txtSort(j).Text) Then
                strChanged = txtSort(i).Text
                txtSort(i).Text = txtSort(j).Text
                txtSort(j).Text = strChanged
            End If
        Next
    Next
End Sub

投稿時間:2006/04/10(Mon) 18:09
投稿者名:しんや
Eメール:
URL :
タイトル:
Re^5: 追記
> 回答者にとってはコードだけ投げた方が楽だったり。
> テキストボックスは「txtSort」という名前のコントロール配列にしてね。

 コントロール配列が理解できなかったり・・・

投稿時間:2006/04/10(Mon) 18:14
投稿者名:VBくん
Eメール:
URL :
タイトル:
Re^5: 追記
いろいろありがとうございます。
もう一回やってみます。

投稿時間:2006/04/10(Mon) 18:24
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^5: 追記
テキストボックスだけのソートじゃないのか。orz
じゃ、↓みたいな感じかな。

Private Sub Command2_Click()
    Dim lngSort() As Long
    Dim lngChanged As Long
    Dim i As Long
    Dim j As Long

    ReDim lngSort(txtSort.Count - 1)
    For i = LBound(lngSort) To UBound(lngSort)
        lngSort(i) = CLng(txtSort(i).Text)
    Next
    For i = LBound(lngSort) To UBound(lngSort) - 1
        For j = i + 1 To UBound(lngSort)
            If lngSort(i) > lngSort(j) Then
                lngChanged = lngSort(i)
                lngSort(i) = lngSort(j)
                lngSort(j) = lngChanged
            End If
        Next
    Next
    For i = LBound(lngSort) To UBound(lngSort)
        List1.AddItem CStr(lngSort(i))
    Next
End Sub

または予めListのSortedをTrueにして↓とか。(FontはPなしの3の倍数が見栄えが良い。)
Private Sub Command3_Click()
    Dim lngMaxDigit As Long
    Dim i As Long

    lngMaxDigit = 0
    For i = 0 To txtSort.Count - 1
        If lngMaxDigit < Len(txtSort(i).Text) Then
            lngMaxDigit = Len(txtSort(i).Text)
        End If
    Next
    For i = 0 To txtSort.Count - 1
        List1.AddItem Space(lngMaxDigit - Len(txtSort(i).Text)) & txtSort(i).Text
    Next
End Sub

投稿時間:2006/04/13(Thu) 01:03
投稿者名:Blue
Eメール:
URL :
タイトル:
Re: ソートのことで聞きたいです。
同じように悩んでいる人がいらっしゃるようです。
hhttp://www2.moug.net/bbs/program/20060412000002.htm