同じような質問を以前こちらでさせていただいたのですが、質問ないようが粗かったため、再度させていただきます。
前回の→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
: :
No.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なので、これで良しとしてください。
段階に分けて教えていただき、本当にありがとうございます。
みんな見たことあるステートメントなので、自分の数値に入れかえ
入力してみます。
これなら、理解しながら進めることができそうです!!
何度も質問に答えていただき本当にありがとうございました。
No.4
- 回答日時:
こんにちは、
まず、順番に問題を解決した方が、良いと思います。
まず、流れとして
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
以上で、ファイルから、データを読んで、ソートするデータを
作ります。
第一弾は終わり、ここまで、上手く行ったら、補足してください。
第二弾は、ソート、
第三弾は、出力
No.3
- 回答日時:
UnibonさんのHPに参考になるプログラムがあります。
http://www.geocities.co.jp/SiliconValley/4334/un …
VBScriptはアクセスなどで使うVBAとほぼ同類の言語です。
変数が全てVariant型という点や、細かい差異はあります。
ここの例ではVBScript特有のステートメントは無いので、
コピペしても実行可能です。
マネすれば課題はクリアですが、VB初心者には何やってるか
サッパリだと思います。
あまり、凝った方法を使うとツッコミを入れられた時に困るので、
自分でも納得できたやり方を真似しましょう。
参考になるURLありがとうございます。
おっしゃる通り、素人の私がいきなり課題ができても
おかしい話なので、資料を参考にしながら、
取り組んでみたいと思います。
No.1
- 回答日時:
こんにちは、
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の環境のみを利用してファイル操作プログラミングを行う】
とあり、「プログラミング工程の一連の流れの把握と、ロジック構築に主眼を置いたもの」と前置きがありました。
プログラミングに触ったことのない私にとって、これらのプログラミングが普通と思っていたのですが、そうじゃないようですね。
ただ、今回は上記のとおり、いろいろと制約があり、その中で答えを導かなければならないので、できることなら、教えていただければと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C言語・要素除去
-
C# DataGridView のヘッダーセ...
-
構造体配列のソート
-
javaのソートについて。
-
C# DataTable ソートについて
-
クイックソートって??
-
偶数奇数の判別!!
-
10個の整数を入力して小さい順...
-
Excelセル範囲内の値のみ1行づ...
-
関数から配列を返すには?
-
ExcelVBAで質問です。離れた二...
-
C言語 構造体の中に共用体を定...
-
VBAのプログラムで、DIAG = 1# ...
-
C言語のプログラムについてです
-
「#undef」と「#define」の使い...
-
C言語 strstrの実装
-
define で 配列
-
fopne で失敗する原因
-
C言語にて構造体のメンバがNULL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
あるディレクトリ内のファイル...
-
VBA基本構文の作り方 2列の...
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
vbでDataTableの抽出コピー
-
C# DataTableの行をソートしてD...
-
listboxの並び替え
-
(VBA) Dir 関数で取得するファ...
-
コレクションの数値をSortで並...
-
C言語・要素除去
-
Fortran77で多次元配列を並び替...
-
C# DataTable ソートについて
-
excel VBA の条件をつけての列...
-
VBScriptで重複レコードを削除...
-
文字列をソートする方法
-
n番目に大きい数を求めるアル...
-
C言語でアナグラムを求めるプロ...
おすすめ情報