アプリ版:「スタンプのみでお礼する」機能のリリースについて

同じような質問を以前こちらでさせていただいたのですが、質問ないようが粗かったため、再度させていただきます。
前回の→http://soudan1.biglobe.ne.jp/qa4920320.html

どなたかお力を貸していただければと思います。

【処理概要】
個人成績表からレコードを取得し、取得したレコードを点数の高い順にソートし、順位・氏名・点数を個人成績順位表に出力する

といったものです。
個人成績表は、氏名と点数の2項目で、レコード数は自由です。
とりあえず、私はサクラエディタに10レコード作りました。(下記参照)
また、個人成績順位表もサクラエディタで作っています。

それをコーディングディングの最初に
Open "C:\INFILE.txt" For Input As #1
Open "C:\OUTFILE.txt" For Output As #2

で開き、はじめるというのが、それまでの課題で指示されています。

今考えているのが
・loopのなかにloopを使いバブルソートする
・i = i + 1の式を使いたい

といった程度です。

個人成績表なのですが、他の人の表も実行できるように「レコード数は不明」の前提で、コーディんグするようにとのことです。

また個人成績順位表は、「順位・氏名・点数」の順に出力とあり、
ソートの考え方として、【レコードを配列に取り込む→レコードを取り込む際に件数をカウントし、件数をn件とする】
とありました。

VBは全くの素人で、ネットで調べても、レベルが高すぎて応用できないためこちらで質問させていただきました。

どなたか力を貸していただけないでしょうか?よろしくお願いいたします。

【自作個人成績表】
青木        076
井上        081
江藤        066
柏原        092
小林        087
斉藤        059
佐久間       076
関根        088
塚田        096
富田        083
:          :

A 回答 (5件)

第二弾と、第三弾を追加



ソート関数

Public Sub sort1(d1() As String, d2() As Integer)

Dim max As Integer
Dim na As String
Dim i1 As Integer, i2 As Integer
Dim cc As Integer

cc = UBound(d2)

For i1 = 0 To cc

For i2 = i1 To cc

If d2(i2) > d2(i1) Then

max = d2(i2)
d2(i2) = d2(i1)
d2(i1) = max

na = d1(i2)
d1(i2) = d1(i1)
d1(i1) = na

End If

Next
Next


End Sub


ソート処理と出力部分のプログラムの追加分

Call sort1(dname, yo)

Dim foutput As Integer

foutput = FreeFile

Open "output.txt" For Output As #foutput

For i = LBound(dname) To UBound(dname)

Print #foutput, dname(i), yo(i)

Debug.Print dname(i), yo(i)

Next

Close #foutput

出力結果

青木 76
井上 81
江藤 66
柏原 92
小林 87
斉藤 59
佐久間 76
関根 88
塚田 96
富田 83

ソート後の結果

塚田 96
柏原 92
関根 88
小林 87
富田 83
井上 81
佐久間 76
青木 76
江藤 66
斉藤 59

多少、バグもあるかもしれませんが。
結果OKなので、これで良しとしてください。
    • good
    • 0
この回答へのお礼

段階に分けて教えていただき、本当にありがとうございます。
みんな見たことあるステートメントなので、自分の数値に入れかえ
入力してみます。
これなら、理解しながら進めることができそうです!!
何度も質問に答えていただき本当にありがとうございました。

お礼日時:2009/05/02 09:09

こんにちは、



まず、順番に問題を解決した方が、良いと思います。

まず、流れとして

1:ファイルから、データを取り出し、ソート用に加工する
2:データをソートする
3:結果を出力する。


アクセスをもっていないので、エクセルを利用します。
アクセスとエクセルの影響のない部分のVBAで、
処理していますので、どちらでも、動作すると思います。

まず、元データ

青木 076
井上 081
江藤 066
柏原 092
小林 087
斉藤 059
佐久間 076
関根 088
塚田 096
富田 083

名前スペース点数で、メモ帳でも使って、
input.txtファイルを作成する。

まず、第一段目

Dim cd As New Collection
Dim finput As Integer
Dim d As String
Dim i As Integer
Dim dcount As Integer
Dim dd() As String
Dim dname() As String, yo() As Integer
Dim dbun() As String


finput = FreeFile

'input.txtがあるディレクトリー、自分の環境にあわせる
Application.DefaultFilePath = "C:\Documents and Settings\????\My Documents\excel雑\"

Open "input.txt" For Input As #finput

Do While Not EOF(finput)

Line Input #finput, d

cd.Add d

Loop

Close #finput

'以上で、データファイルの読み込み終わり

'ここから、ソートするためにデータを加工
ReDim dd(cd.Count - 1), dname(cd.Count - 1), yo(cd.Count - 1)

For i = 1 To cd.Count

dd(i - 1) = cd.Item(i)

dbun() = Split(dd(i - 1), " ")

dname(i - 1) = dbun(0)
yo(i - 1) = CInt(dbun(1))

Debug.Print dname(i - 1), yo(i - 1)

Next

以上で、ファイルから、データを読んで、ソートするデータを
作ります。

第一弾は終わり、ここまで、上手く行ったら、補足してください。

第二弾は、ソート、
第三弾は、出力 
    • good
    • 0

UnibonさんのHPに参考になるプログラムがあります。


http://www.geocities.co.jp/SiliconValley/4334/un …
VBScriptはアクセスなどで使うVBAとほぼ同類の言語です。
変数が全てVariant型という点や、細かい差異はあります。
ここの例ではVBScript特有のステートメントは無いので、
コピペしても実行可能です。
マネすれば課題はクリアですが、VB初心者には何やってるか
サッパリだと思います。
あまり、凝った方法を使うとツッコミを入れられた時に困るので、
自分でも納得できたやり方を真似しましょう。
    • good
    • 0
この回答へのお礼

参考になるURLありがとうございます。
おっしゃる通り、素人の私がいきなり課題ができても
おかしい話なので、資料を参考にしながら、
取り組んでみたいと思います。

お礼日時:2009/05/02 09:06

プログラム経験無しでいきなりソートですか?



無理っぽいと思います。
もっと基本を勉強してからではないでしょうか。
課題がどのような形で出てきているものか知り
ませんが無茶な出し方だと思います。
    • good
    • 0
この回答へのお礼

やっぱり無理なことをさせられていたのですね。
分かりました。ありがとうございます。

お礼日時:2009/05/01 16:59

こんにちは、



VBと書くと、visual basic の V6とかnetの方が
連想されるので、アクセスのVBAと、書きましょう。

アクセスだと、SQLで、一発なのですが。

学校の課題なのか
**********引用*********
それをコーディングディングの最初に
Open "C:\INFILE.txt" For Input As #1
Open "C:\OUTFILE.txt" For Output As #2
***********************
データベースソフトを使っていて、
普通、こんな処理しないのですが。
必須なのですか。???

そもそも、アクセス使っていると、
このような処理、VBAを使うまでもないのですが。
クエリ一発なのですが。


VBAを使うと言うのも必須なのですか。??

この回答への補足

またご回答いただきありがとうございます。
以後アクセスのVBAと書きたいと思います。

今回の課題についてなのですが、
【開発環境としてAccessを使用する。ただし今回はAccess本来の機能は使用せずVBAの環境のみを利用してファイル操作プログラミングを行う】
とあり、「プログラミング工程の一連の流れの把握と、ロジック構築に主眼を置いたもの」と前置きがありました。

プログラミングに触ったことのない私にとって、これらのプログラミングが普通と思っていたのですが、そうじゃないようですね。

ただ、今回は上記のとおり、いろいろと制約があり、その中で答えを導かなければならないので、できることなら、教えていただければと思います。

補足日時:2009/05/01 13:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!