質問編集履歴

2

コードの追加。

2016/03/17 06:25

投稿

makino
makino

スコア32

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,29 @@
42
42
 
43
43
 
44
44
 
45
-
45
+ 【追記】
46
+
47
+ 大変失礼致しました。
48
+
49
+
50
+
51
+ エラーとしては、
52
+
53
+ 「要求された名前、または序数に対応する項目がコレクションで見つかりません。」
54
+
55
+ と表示され、デバッグを押すと、
56
+
57
+ Debug.Print rs_rank!gaku_no, rs_rank!tensu, rs_rank!simei
58
+
59
+ こちらが示されます。
60
+
61
+
62
+
63
+ 宜しくお願いします。
64
+
65
+
66
+
67
+ ```SQL
46
68
 
47
69
  Sub Ranking()
48
70
 
@@ -68,7 +90,7 @@
68
90
 
69
91
 
70
92
 
71
- Set rs_seisek = New ADODB.Recordset 'Recordsetオブジェクトに参照(関連付け)する。
93
+ Set rs_seiseki = New ADODB.Recordset 'Recordsetオブジェクトに参照(関連付け)する。
72
94
 
73
95
  Set rs_gakusei = New ADODB.Recordset
74
96
 
@@ -76,16 +98,208 @@
76
98
 
77
99
 
78
100
 
101
+ Dim tensu_H(100) As Integer 'テストの点数
102
+
103
+ Dim gaku_H(100) As Integer '学生番号
104
+
105
+ Dim y(100) As Integer '順位
106
+
107
+ Dim n As Integer 'データの数
108
+
109
+ Dim Onaji As Integer
110
+
111
+ Dim Keep As Integer
112
+
113
+
114
+
115
+
116
+
117
+ rs_seiseki.Open "seiseki_table", cnn, adOpenKeyset, adLockOptimistic
118
+
119
+ rs_seiseki.MoveFirst
120
+
121
+
122
+
123
+ 'seiseki_tableのデータを配列に格納。
124
+
125
+ i = 0
126
+
127
+ Do Until rs_seiseki.EOF
128
+
129
+ tensu_H(i) = rs_seiseki!tensu
130
+
131
+ gaku_H(i) = rs_seiseki!gaku_no
132
+
133
+ rs_seiseki.MoveNext
134
+
135
+ i = i + 1
136
+
137
+ Loop
138
+
139
+
140
+
141
+ n = i - 1
142
+
143
+ '* テストの点数順に並び替え。学生番号も一緒に。
144
+
145
+ i = 0 'カウンター(比較元)
146
+
147
+ Do Until i >= n
148
+
149
+ k = 1 'カウンター(比較先)
150
+
151
+ Do Until i + k > n
152
+
153
+ If tensu_H(i) < tensu_H(i + k) Then
154
+
155
+ hn = gaku_H(i)
156
+
157
+ hx = tensu_H(i)
158
+
159
+ gaku_H(i) = gaku_H(i + k)
160
+
161
+ tensu_H(i) = tensu_H(i + k)
162
+
163
+ gaku_H(i + k) = hn
164
+
165
+ tensu_H(i + k) = hx
166
+
167
+ End If
168
+
169
+ k = k + 1
170
+
171
+ Loop
172
+
173
+ i = i + 1
174
+
175
+ Loop
176
+
177
+
178
+
179
+ '↓順位y(i)を付ける
180
+
181
+ Onaji = 0 '同じ順位が何回連続しているか。
182
+
183
+ Keep = 1 '同じ順位の際に、+1せずに保管しておく。
184
+
185
+ y(0) = 1 '先頭は必ず1位。
186
+
187
+ i = 1
188
+
189
+ Do Until i > n
190
+
191
+ If tensu_H(i - 1) = tensu_H(i) Then
192
+
193
+ y(i) = Keep
194
+
195
+ Onaji = Onaji + 1
196
+
197
+ Else
198
+
199
+ Keep = Keep + 1
200
+
201
+ y(i) = Keep + Onaji
202
+
203
+ Keep = Keep + Onaji
204
+
205
+ Onaji = 0
206
+
207
+ End If
208
+
209
+ i = i + 1
210
+
211
+ Loop
212
+
213
+
214
+
215
+ ' 学生番号の早い方へと並び替え
216
+
217
+ i = 0
218
+
219
+ Do Until i >= n
220
+
221
+ k = 1
222
+
223
+ Do Until i + k > n
224
+
225
+ If gaku_H(i) > gaku_H(i + k) Then
226
+
227
+ hn = gaku_H(i)
228
+
229
+ hx = tensu_H(i)
230
+
231
+ hy = y(i)
232
+
233
+ gaku_H(i) = gaku_H(i + k)
234
+
235
+ tensu_H(i) = tensu_H(i + k)
236
+
237
+ y(i) = y(i + k)
238
+
239
+ gaku_H(i + k) = hn
240
+
241
+ tensu_H(i + k) = hx
242
+
243
+ y(i + k) = hy
244
+
245
+ End If
246
+
247
+ k = k + 1
248
+
249
+ Loop
250
+
251
+ i = i + 1
252
+
253
+ Loop
254
+
255
+
256
+
257
+
258
+
259
+ i = 0
260
+
261
+ Do Until i >= n
262
+
263
+ rs_seiseki.MoveFirst
264
+
265
+ Do Until rs_seiseki.EOF
266
+
267
+ If rs_seiseki!gaku_no = gaku_H(i) Then
268
+
269
+
270
+
79
- mySQL = "SELECT * FROM seiseki_table INNER JOIN gakusei_m ON seiseki_table.gaku_no = gakusei_m.gaku_no "
271
+ mySQL = "SELECT * FROM seiseki_table INNER JOIN gakusei_m ON (seiseki_table.gaku_no = gakusei_m.gaku_no) "
80
-
272
+
81
- rs_rank.Open mySQL, cnn, adOpenStatic, adLockOptimistic
273
+ rs_rank.Open mySQL, cnn, adOpenStatic, adLockOptimistic
274
+
275
+
276
+
82
-
277
+ 'rs_rank.MoveFirst
83
-
84
-
278
+
85
- Debug.Print rs_rank!tensu, rs_rank!simei
279
+ Debug.Print rs_rank!gaku_no, rs_rank!tensu, rs_rank!simei
280
+
86
-
281
+ rs_rank.Close
282
+
87
-
283
+ i = i + 1
284
+
285
+ End If
286
+
287
+ rs_seiseki.MoveNext
288
+
289
+ Loop
290
+
291
+ Loop
292
+
293
+
294
+
295
+ cnn.Close
296
+
297
+ Set cnn = Nothing
88
298
 
89
299
 
90
300
 
91
301
  End Sub
302
+
303
+
304
+
305
+ ```

1

誤字修正

2016/03/17 06:25

投稿

makino
makino

スコア32

test CHANGED
File without changes
test CHANGED
File without changes