teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

二次元配列の構造の図を追加しました

2021/08/22 10:44

投稿

FANJIA
FANJIA

スコア9

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
+ ![![イメージ説明](2bca722ba1d551a86e22322b15ab09a6.jpeg)](14b0beda04b34bc04dc8d9e1b7084417.jpeg)

3

間違って削除したのを戻し増しました

2021/08/22 10:44

投稿

FANJIA
FANJIA

スコア9

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

ソートに入る前の部分のコードを記載しました。

2021/08/22 07:35

投稿

FANJIA
FANJIA

スコア9

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
- Public Function zyun_csvimport_Sort() As Boolean
14
+ If zyun_csvimport_Sort() = False Then
15
+ Else
11
- On Error GoTo Sort_ERROR
16
+ End If
12
17
 
13
-
14
- Dim vSwap
15
- Dim i As Long
16
- Dim j As Long
17
- Dim k As Integer
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
- If ranking(j, i).kon_salesamount < ranking(j, i + 1).kon_salesamount Then
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
- zyun_csvimport_Sort = True '正常終了の場合は Trueを返す
21
+ zyun_csvimport = True
22
+ MsgBox "正常終了しました"
37
23
  Exit Function
38
- Sort_ERROR:
24
+ csvimport_ERROR:
39
- zyun_csvimport_Sort = False
25
+ zyun_csvimport = False
40
- MsgBox "zyun_csvimport_Sort(ソート部分)でエラー"
26
+ MsgBox "zyun_csvimportでエラー"
41
- End Function
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

使用環境を追加しました

2021/08/22 07:33

投稿

FANJIA
FANJIA

スコア9

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