同じような質問を以前こちらでさせていただいたのですが、質問ないようが粗かったため、再度させていただきます。
前回の→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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- 高校受験 中学や高校で、成績上位者の名前を廊下に張り出していましたか? 5 2022/09/25 23:21
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- 野球 日本ハムの清宮選手に関して。 プロ5年目の一塁手として今年の成績はかなりヤバそうですが、来年に一軍と 3 2022/09/07 11:48
- Excel(エクセル) エクセルでキーリストからデータを取り出して1枚1枚印刷するには? 11 2022/06/27 09:52
- 学校 小中高は出席番号がアイウエオ順ですが、専門学校や大学は成績順ですか? 1番の人がテストの点数が1番高 3 2023/03/28 19:47
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
listboxの並び替え
-
VB.NETでファイル名順にファイ...
-
excel VBA リストビューの行...
-
n番目に大きい数を求めるアル...
-
構造体配列のソート
-
ソートのプログラム
-
あるディレクトリ内のファイル...
-
DataGridViewの複数列を連動し...
-
VBA基本構文の作り方 2列の...
-
(VBA) Dir 関数で取得するファ...
-
C# DataGridView のヘッダーセ...
-
コレクションの数値をSortで並...
-
数字文字列のソート方法
-
Excel VBA テキストボックス内...
-
VBScriptで重複レコードを削除...
-
Excelセル範囲内の値のみ1行づ...
-
明日までの宿題で困っています...
-
Excel VBA で別シートにデータ...
-
配列の問題
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
ファイル名「1.jpg ~10.jpg~...
-
excel VBA の条件をつけての列...
-
リスト構造のソートで悩んでま...
-
C# DataGridView のヘッダーセ...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
C# DataTableの行をソートしてD...
-
C言語・要素除去
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
列のどこをクリックしてもソー...
-
excel VBA リストビューの行...
-
あるディレクトリ内のファイル...
-
コレクションの数値をSortで並...
-
数字文字列のソート方法
-
VBScriptで重複レコードを削除...
-
2次元配列を複数項目でソートし...
-
10個の整数を入力して小さい順...
おすすめ情報