質問編集履歴
4
二次元配列の構造の図を追加しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -80,4 +80,8 @@
|
|
80
80
|
MsgBox "zyun_csvimportでエラー"
|
81
81
|
End Function
|
82
82
|
コード
|
83
|
-
```
|
83
|
+
```
|
84
|
+
|
85
|
+
|
86
|
+
2次元配列の図
|
87
|
+
](14b0beda04b34bc04dc8d9e1b7084417.jpeg)
|
3
間違って削除したのを戻し増しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,10 +2,64 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
1.VBAで構造体内の一項目を使用して構造体全体をソートさせるのはどうすればいいでしょうか?
|
5
|
+
構造体のコード
|
6
|
+
```VBA
|
7
|
+
Public Const ranking_table_y_max = 4000
|
8
|
+
Public Const ranking_table_x_max = 10
|
9
|
+
|
10
|
+
Type ranking_table
|
11
|
+
officename As String '事業所名
|
12
|
+
sei_corporationname As String '法人正式名
|
13
|
+
corporationname As String '法人名
|
14
|
+
corporationno As Long '法人番号
|
15
|
+
zen_salesamount As Currency '前年売上高
|
16
|
+
kon_salesamount As Currency '当年売上高
|
17
|
+
|
18
|
+
End Type
|
19
|
+
Public ranking(0 To ranking_table_x_max, 0 To ranking_table_y_max) As ranking_table '地区と法人
|
20
|
+
'rankingの部分が配列名
|
5
21
|
|
22
|
+
```
|
23
|
+
|
24
|
+
|
6
25
|
2.下記のようにソートのプログラムを書いてみたのですが、値は動きましたが、ソートされませんでした。
|
7
26
|
※https://excel-ubara.com/excelvba5/EXCELVBA229.html こちらのサイトを参考しました。
|
27
|
+
|
28
|
+
```VBA
|
29
|
+
Public Function zyun_csvimport_Sort() As Boolean
|
30
|
+
On Error GoTo Sort_ERROR
|
31
|
+
|
32
|
+
|
33
|
+
Dim vSwap As ranking_table
|
34
|
+
Dim i As Long
|
35
|
+
Dim j As Long
|
36
|
+
Dim k As Integer
|
37
|
+
Dim keyPos As Long: keyPos = 1
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
For i = LBound(ranking, 1) To UBound(ranking, 1)
|
42
|
+
For j = LBound(ranking) To UBound(ranking) - 1
|
43
|
+
If ranking(j, keyPos).kon_salesamount < ranking(j + 1, keyPos).kon_salesamount Then
|
44
|
+
For k = LBound(ranking, 2) To UBound(ranking, 2)
|
45
|
+
vSwap = ranking(j, k)
|
46
|
+
ranking(j, k) = ranking(j + 1, k)
|
47
|
+
ranking(j, k) = vSwap
|
48
|
+
Next
|
49
|
+
End If
|
50
|
+
Next j
|
51
|
+
Next i
|
52
|
+
|
53
|
+
zyun_csvimport_Sort = True
|
54
|
+
Exit Function
|
55
|
+
Sort_ERROR:
|
56
|
+
zyun_csvimport_Sort = False
|
57
|
+
MsgBox "zyun_csvimport_Sort(ソート部分)でエラー"
|
58
|
+
End Function
|
8
59
|
|
60
|
+
```
|
61
|
+
|
62
|
+
|
9
63
|
ソートに入る前の部分のコード
|
10
64
|
```VBA
|
11
65
|
Close #filenumber
|
2
ソートに入る前の部分のコードを記載しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,58 +6,24 @@
|
|
6
6
|
2.下記のようにソートのプログラムを書いてみたのですが、値は動きましたが、ソートされませんでした。
|
7
7
|
※https://excel-ubara.com/excelvba5/EXCELVBA229.html こちらのサイトを参考しました。
|
8
8
|
|
9
|
+
ソートに入る前の部分のコード
|
9
10
|
```VBA
|
11
|
+
Close #filenumber
|
12
|
+
'ソート部分-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
13
|
+
'ここまでは動きます。 *********************************↓
|
10
|
-
|
14
|
+
If zyun_csvimport_Sort() = False Then
|
15
|
+
Else
|
11
|
-
|
16
|
+
End If
|
12
17
|
|
13
|
-
|
14
|
-
Dim vSwap
|
15
|
-
Dim i As Long
|
16
|
-
Dim j As Long
|
17
|
-
|
18
|
+
Debug.Print "zyun_csvimport_Sort"
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
'バブルソート start
|
22
|
-
For i = LBound(ranking, 1) To UBound(ranking, 1)
|
23
|
-
For j = LBound(ranking) To UBound(ranking) - 1
|
24
|
-
|
20
|
+
'出力部分-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
25
|
-
For k = LBound(ranking, 2) To UBound(ranking, 2)
|
26
|
-
vSwap = ranking(j, k).kon_salesamount
|
27
|
-
ranking(j, k) = ranking(j + 1, k)
|
28
|
-
ranking(j + 1, k).kon_salesamount = vSwap
|
29
|
-
Next
|
30
|
-
End If
|
31
|
-
Next j
|
32
|
-
Next i
|
33
|
-
'バブルソート end
|
34
|
-
|
35
|
-
'ここは関係ない
|
36
|
-
|
21
|
+
zyun_csvimport = True
|
22
|
+
MsgBox "正常終了しました"
|
37
23
|
Exit Function
|
38
|
-
|
24
|
+
csvimport_ERROR:
|
39
|
-
|
25
|
+
zyun_csvimport = False
|
40
|
-
MsgBox "
|
26
|
+
MsgBox "zyun_csvimportでエラー"
|
41
|
-
|
27
|
+
End Function
|
28
|
+
コード
|
42
|
-
```
|
29
|
+
```
|
43
|
-
|
44
|
-
3.構造体はこちらのものです。
|
45
|
-
```VBA
|
46
|
-
Type ranking_table
|
47
|
-
officename As String '事業所名
|
48
|
-
sei_corporationname As String '法人正式名
|
49
|
-
corporationname As String '法人名
|
50
|
-
corporationno As Long '法人番号
|
51
|
-
zen_salesamount As Currency '前年売上高
|
52
|
-
kon_salesamount As Currency '当年売上高
|
53
|
-
|
54
|
-
End Type
|
55
|
-
Public ranking(0 To ranking_table_x_max, 0 To ranking_table_y_max) As ranking_table '地区と法人
|
56
|
-
'rankingの部分が配列名
|
57
|
-
```
|
58
|
-
|
59
|
-
|
60
|
-
環境
|
61
|
-
|
62
|
-
win10
|
63
|
-
Excel 2016
|
1
使用環境を追加しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -54,4 +54,10 @@
|
|
54
54
|
End Type
|
55
55
|
Public ranking(0 To ranking_table_x_max, 0 To ranking_table_y_max) As ranking_table '地区と法人
|
56
56
|
'rankingの部分が配列名
|
57
|
-
```
|
57
|
+
```
|
58
|
+
|
59
|
+
|
60
|
+
環境
|
61
|
+
|
62
|
+
win10
|
63
|
+
Excel 2016
|