回答編集履歴

6

修正

2021/08/22 14:18

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -1,4 +1,4 @@
1
- <再追記>
1
+ こんな感じでどうでしょうか。
2
2
 
3
3
  ```VBA
4
4
 
@@ -18,11 +18,13 @@
18
18
 
19
19
 
20
20
 
21
- 'バブルソート start
21
+ For r = 0 To UBound(ranking, 1) '地区ごとに処理
22
22
 
23
- For r = 0 To UBound(ranking, 1) '事業所
24
23
 
24
+
25
+ 'バブルソート start
26
+
25
- For i = UBound(ranking, 2) To LBound(ranking, 2) Step -1 '法人
27
+ For i = UBound(ranking, 2) To LBound(ranking, 2) Step -1
26
28
 
27
29
  For j = LBound(ranking, 2) To i - 1
28
30
 
@@ -38,221 +40,13 @@
38
40
 
39
41
  Next j
40
42
 
41
- Next i
43
+ Next i
42
44
 
43
- Next r
44
-
45
- 'バブルソート end
45
+ 'バブルソート end
46
46
 
47
47
 
48
48
 
49
- 'ここは関係ない
50
-
51
- zyun_csvimport_Sort = True '正常終了の場合は Trueを返す
52
-
53
- Exit Function
54
-
55
- Sort_ERROR:
56
-
57
- zyun_csvimport_Sort = False
58
-
59
- MsgBox "zyun_csvimport_Sort(ソート部分)でエラー"
60
-
61
- End Function
62
-
63
-
64
-
65
- ```
66
-
67
- <追記>
68
-
69
- > 引用テキストranking(officena, ko_kx) の officenaは事業所ごとに分けています。
70
-
71
- なので一次元では表現ができないです
72
-
73
- 一次元には事業所 2次元目が法人名 になります
74
-
75
-
76
-
77
- それはこういうことですか。
78
-
79
- |ranking|0|1|2|3|
80
-
81
- |:--:|:--:|:--:|:--:|:--:|
82
-
83
- |**0(A事業所)**|A事業所,法人a1,,10|A事業所,法人a2,,13|A事業所,法人a3,,20
84
-
85
- |**1(B事業所)**|B事業所,法人b1,,50|B事業所,法人b2,,10|B事業所,法人b3,,13|B事業所,法人b4,,12|
86
-
87
- |**2(C事業所)**|C事業所,法人c1,,40|C事業所,法人c2,,10
88
-
89
- |**:**|:|
90
-
91
-
92
-
93
- それともこういうことですか。
94
-
95
-
96
-
97
- |ranking|0(法人a)|1(法人b)|2(法人c)|3(法人d)|
98
-
99
- |:--:|:--:|:--:|:--:|:--:|
100
-
101
- |**0(A事業所)**|A事業所,法人a,,100|A事業所,法人b,,1003|A事業所,法人c,,2100|A事業所,法人d,,1010|
102
-
103
- |**1(B事業所)**|B事業所,法人a,,500|B事業所,法人b,,1005|B事業所,法人c,,1300|B事業所,法人d,,1020|
104
-
105
- |**2(C事業所)**|C事業所,法人a,,400|C事業所,法人b,,1020|C事業所,法人c,,1030|C事業所,法人d,,1200|
106
-
107
- |**:**|:|
108
-
109
-
110
-
111
- あと、並べ替えは、どの範囲で行うのですか?
112
-
113
- ・同一事業所内で各法人を数字の大きい順に並べ替える?
114
-
115
- ・各事業所を、その事業所内の数字の合計で並び替える?
116
-
117
-
118
-
119
- ---
120
-
121
- <元の回答>
122
-
123
-
124
-
125
- ranking(j, k) と ranking(j + 1, k) を入れ替えるなら
126
-
127
- vSwap に退避するのは ranking(j, k) ではないのでしょうか。
128
-
129
-
130
-
131
- ---
132
-
133
- なお、二次元配列を並び替えるといっても、参考サイトとはやろうとしていることが若干異なる気がします。
134
-
135
- 参考サイトは、たとえば2列目の値で行をソートし、A→C→B事業所の順にするようなイメージ。
136
-
137
- |argAry|0|1|2|3|
138
-
139
- |:--:|:--:|:--:|:--:|:--:|
140
-
141
- |**0**|A事業所|xxx|200|aa|
142
-
143
- |**1**|B事業所|xxx|100|bb|
144
-
145
- |**2**|C事業所|xxx|300|cc|
146
-
147
-
148
-
149
-
150
-
151
- 一方、ご提示のranking配列は、各事業所データを1つの構造体にしたうえで更に二次元配列になっていて、
152
-
153
- 簡易的に書くと以下のような状態に見えます。
154
-
155
- |ranking|0|1|2|3|
156
-
157
- |:--:|:--:|:--:|:--:|:--:|
158
-
159
- |**0**|A事業所,,,100|D事業所,,,1003|G事業所,,,2100|J事業所,,,1010|
160
-
161
- |**1**|B事業所,,,500|E事業所,,,1005|H事業所,,,1300|K事業所,,,1020|
162
-
163
- |**2**|C事業所,,,400|F事業所,,,1020|I事業所,,,1030|L事業所,,,1200|
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
- ---
172
-
173
- やりたいことが、単純な(一次元的な)並べ替えだとしたら、
174
-
175
- rankingの配列の定義を以下のように変えるべきではないでしょうか。
176
-
177
-
178
-
179
- ||ranking|
180
-
181
- |:--:|:--:|
182
-
183
- |**0**|A事業所,,,100|
184
-
185
- |**1**|B事業所,,,500|
186
-
187
- |**2**|C事業所,,,400|
188
-
189
- |**:**|:|
190
-
191
-
192
-
193
- ```VBA
194
-
195
- Const ranking_table_max = 99
196
-
197
-
198
-
199
- Type ranking_table
200
-
201
- officename As String '事業所名
202
-
203
- sei_corporationname As String '法人正式名
204
-
205
- corporationname As String '法人名
206
-
207
- corporationno As Long '法人番号
208
-
209
- zen_salesamount As Currency '前年売上高
210
-
211
- kon_salesamount As Currency '当年売上高
212
-
213
- End Type
214
-
215
- Public ranking(0 To ranking_table_max) As ranking_table ' /// 一次元配列に変更
216
-
217
- '
218
-
219
-
220
-
221
- Public Function zyun_csvimport_Sort() As Boolean
222
-
223
- On Error GoTo Sort_ERROR
224
-
225
-
226
-
227
- Dim vSwap As ranking_table
228
-
229
- Dim i As Long
230
-
231
- Dim j As Long
232
-
233
-
234
-
235
- 'バブルソート start
236
-
237
- For i = UBound(ranking) To LBound(ranking) Step -1
238
-
239
- For j = LBound(ranking) To i - 1
240
-
241
- If ranking(j).kon_salesamount > ranking(j + 1).kon_salesamount Then
242
-
243
- vSwap = ranking(j)
244
-
245
- ranking(j) = ranking(j + 1)
246
-
247
- ranking(j + 1) = vSwap
248
-
249
- End If
250
-
251
- Next j
49
+ Next r
252
-
253
- Next i
254
-
255
- 'バブルソート end
256
50
 
257
51
 
258
52
 

5

追記

2021/08/22 14:18

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -1,3 +1,69 @@
1
+ <再追記>
2
+
3
+ ```VBA
4
+
5
+ Public Function zyun_csvimport_Sort() As Boolean
6
+
7
+ On Error GoTo Sort_ERROR
8
+
9
+
10
+
11
+ Dim vSwap As ranking_table
12
+
13
+ Dim i As Long
14
+
15
+ Dim j As Long
16
+
17
+ Dim r As Long
18
+
19
+
20
+
21
+ 'バブルソート start
22
+
23
+ For r = 0 To UBound(ranking, 1) '事業所
24
+
25
+ For i = UBound(ranking, 2) To LBound(ranking, 2) Step -1 '法人
26
+
27
+ For j = LBound(ranking, 2) To i - 1
28
+
29
+ If ranking(r, j).kon_salesamount < ranking(r, j + 1).kon_salesamount Then
30
+
31
+ vSwap = ranking(r, j)
32
+
33
+ ranking(r, j) = ranking(r, j + 1)
34
+
35
+ ranking(r, j + 1) = vSwap
36
+
37
+ End If
38
+
39
+ Next j
40
+
41
+ Next i
42
+
43
+ Next r
44
+
45
+ 'バブルソート end
46
+
47
+
48
+
49
+ 'ここは関係ない
50
+
51
+ zyun_csvimport_Sort = True '正常終了の場合は Trueを返す
52
+
53
+ Exit Function
54
+
55
+ Sort_ERROR:
56
+
57
+ zyun_csvimport_Sort = False
58
+
59
+ MsgBox "zyun_csvimport_Sort(ソート部分)でエラー"
60
+
61
+ End Function
62
+
63
+
64
+
65
+ ```
66
+
1
67
  <追記>
2
68
 
3
69
  > 引用テキストranking(officena, ko_kx) の officenaは事業所ごとに分けています。

4

追記

2021/08/22 10:59

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -1,3 +1,61 @@
1
+ <追記>
2
+
3
+ > 引用テキストranking(officena, ko_kx) の officenaは事業所ごとに分けています。
4
+
5
+ なので一次元では表現ができないです
6
+
7
+ 一次元には事業所 2次元目が法人名 になります
8
+
9
+
10
+
11
+ それはこういうことですか。
12
+
13
+ |ranking|0|1|2|3|
14
+
15
+ |:--:|:--:|:--:|:--:|:--:|
16
+
17
+ |**0(A事業所)**|A事業所,法人a1,,10|A事業所,法人a2,,13|A事業所,法人a3,,20
18
+
19
+ |**1(B事業所)**|B事業所,法人b1,,50|B事業所,法人b2,,10|B事業所,法人b3,,13|B事業所,法人b4,,12|
20
+
21
+ |**2(C事業所)**|C事業所,法人c1,,40|C事業所,法人c2,,10
22
+
23
+ |**:**|:|
24
+
25
+
26
+
27
+ それともこういうことですか。
28
+
29
+
30
+
31
+ |ranking|0(法人a)|1(法人b)|2(法人c)|3(法人d)|
32
+
33
+ |:--:|:--:|:--:|:--:|:--:|
34
+
35
+ |**0(A事業所)**|A事業所,法人a,,100|A事業所,法人b,,1003|A事業所,法人c,,2100|A事業所,法人d,,1010|
36
+
37
+ |**1(B事業所)**|B事業所,法人a,,500|B事業所,法人b,,1005|B事業所,法人c,,1300|B事業所,法人d,,1020|
38
+
39
+ |**2(C事業所)**|C事業所,法人a,,400|C事業所,法人b,,1020|C事業所,法人c,,1030|C事業所,法人d,,1200|
40
+
41
+ |**:**|:|
42
+
43
+
44
+
45
+ あと、並べ替えは、どの範囲で行うのですか?
46
+
47
+ ・同一事業所内で各法人を数字の大きい順に並べ替える?
48
+
49
+ ・各事業所を、その事業所内の数字の合計で並び替える?
50
+
51
+
52
+
53
+ ---
54
+
55
+ <元の回答>
56
+
57
+
58
+
1
59
  ranking(j, k) と ranking(j + 1, k) を入れ替えるなら
2
60
 
3
61
  vSwap に退避するのは ranking(j, k) ではないのでしょうか。

3

修正

2021/08/22 10:22

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -24,7 +24,9 @@
24
24
 
25
25
 
26
26
 
27
- 一方、ご提示のranking配列は、構造体二次元になっていて、簡易的に書くと以下のような状態に見えます。
27
+ 一方、ご提示のranking配列は、各事業所データを1つの構造体にしたうえで更に二次元配列になっていて、
28
+
29
+ 簡易的に書くと以下のような状態に見えます。
28
30
 
29
31
  |ranking|0|1|2|3|
30
32
 
@@ -44,9 +46,9 @@
44
46
 
45
47
  ---
46
48
 
47
- やりたいことが、単純な(一次元的な)並べ替え、つまり以下のようなものだとしたら、
49
+ やりたいことが、単純な(一次元的な)並べ替えだとしたら、
48
50
 
49
- rankingの配列の定義を変えるべきではないでしょうか。
51
+ rankingの配列の定義を以下のように変えるべきではないでしょうか。
50
52
 
51
53
 
52
54
 

2

追記

2021/08/22 04:09

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -7,6 +7,8 @@
7
7
  ---
8
8
 
9
9
  なお、二次元配列を並び替えるといっても、参考サイトとはやろうとしていることが若干異なる気がします。
10
+
11
+ 参考サイトは、たとえば2列目の値で行をソートし、A→C→B事業所の順にするようなイメージ。
10
12
 
11
13
  |argAry|0|1|2|3|
12
14
 
@@ -22,7 +24,7 @@
22
24
 
23
25
 
24
26
 
25
-
27
+ 一方、ご提示のranking配列は、構造体が二次元になっていて、簡易的に書くと以下のような状態に見えます。
26
28
 
27
29
  |ranking|0|1|2|3|
28
30
 
@@ -33,3 +35,113 @@
33
35
  |**1**|B事業所,,,500|E事業所,,,1005|H事業所,,,1300|K事業所,,,1020|
34
36
 
35
37
  |**2**|C事業所,,,400|F事業所,,,1020|I事業所,,,1030|L事業所,,,1200|
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ ---
46
+
47
+ やりたいことが、単純な(一次元的な)並べ替え、つまり以下のようなものだとしたら、
48
+
49
+ rankingの配列の定義を変えるべきではないでしょうか。
50
+
51
+
52
+
53
+ ||ranking|
54
+
55
+ |:--:|:--:|
56
+
57
+ |**0**|A事業所,,,100|
58
+
59
+ |**1**|B事業所,,,500|
60
+
61
+ |**2**|C事業所,,,400|
62
+
63
+ |**:**|:|
64
+
65
+
66
+
67
+ ```VBA
68
+
69
+ Const ranking_table_max = 99
70
+
71
+
72
+
73
+ Type ranking_table
74
+
75
+ officename As String '事業所名
76
+
77
+ sei_corporationname As String '法人正式名
78
+
79
+ corporationname As String '法人名
80
+
81
+ corporationno As Long '法人番号
82
+
83
+ zen_salesamount As Currency '前年売上高
84
+
85
+ kon_salesamount As Currency '当年売上高
86
+
87
+ End Type
88
+
89
+ Public ranking(0 To ranking_table_max) As ranking_table ' /// 一次元配列に変更
90
+
91
+ '
92
+
93
+
94
+
95
+ Public Function zyun_csvimport_Sort() As Boolean
96
+
97
+ On Error GoTo Sort_ERROR
98
+
99
+
100
+
101
+ Dim vSwap As ranking_table
102
+
103
+ Dim i As Long
104
+
105
+ Dim j As Long
106
+
107
+
108
+
109
+ 'バブルソート start
110
+
111
+ For i = UBound(ranking) To LBound(ranking) Step -1
112
+
113
+ For j = LBound(ranking) To i - 1
114
+
115
+ If ranking(j).kon_salesamount > ranking(j + 1).kon_salesamount Then
116
+
117
+ vSwap = ranking(j)
118
+
119
+ ranking(j) = ranking(j + 1)
120
+
121
+ ranking(j + 1) = vSwap
122
+
123
+ End If
124
+
125
+ Next j
126
+
127
+ Next i
128
+
129
+ 'バブルソート end
130
+
131
+
132
+
133
+ 'ここは関係ない
134
+
135
+ zyun_csvimport_Sort = True '正常終了の場合は Trueを返す
136
+
137
+ Exit Function
138
+
139
+ Sort_ERROR:
140
+
141
+ zyun_csvimport_Sort = False
142
+
143
+ MsgBox "zyun_csvimport_Sort(ソート部分)でエラー"
144
+
145
+ End Function
146
+
147
+ ```

1

追記

2021/08/22 04:05

投稿

jinoji
jinoji

スコア4585

test CHANGED
@@ -1,3 +1,35 @@
1
1
  ranking(j, k) と ranking(j + 1, k) を入れ替えるなら
2
2
 
3
3
  vSwap に退避するのは ranking(j, k) ではないのでしょうか。
4
+
5
+
6
+
7
+ ---
8
+
9
+ なお、二次元配列を並び替えるといっても、参考サイトとはやろうとしていることが若干異なる気がします。
10
+
11
+ |argAry|0|1|2|3|
12
+
13
+ |:--:|:--:|:--:|:--:|:--:|
14
+
15
+ |**0**|A事業所|xxx|200|aa|
16
+
17
+ |**1**|B事業所|xxx|100|bb|
18
+
19
+ |**2**|C事業所|xxx|300|cc|
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+ |ranking|0|1|2|3|
28
+
29
+ |:--:|:--:|:--:|:--:|:--:|
30
+
31
+ |**0**|A事業所,,,100|D事業所,,,1003|G事業所,,,2100|J事業所,,,1010|
32
+
33
+ |**1**|B事業所,,,500|E事業所,,,1005|H事業所,,,1300|K事業所,,,1020|
34
+
35
+ |**2**|C事業所,,,400|F事業所,,,1020|I事業所,,,1030|L事業所,,,1200|