質問編集履歴

3

コードを現状のものに変更いたしました。

2021/01/01 10:59

投稿

20200713
20200713

スコア16

test CHANGED
File without changes
test CHANGED
@@ -36,17 +36,21 @@
36
36
 
37
37
 
38
38
 
39
- 2次元配列の各行の各部署のメンバー名を格納していきたいため
39
+ 2次元配列の各行の各部署のメンバー名を格納きたのですが、
40
40
 
41
- 任意の営業部のメンバーが増えたびに配列のサイズ大きくしていきたいです
41
+ 新たな人員を追加す際いれる配列の場所決める作業
42
42
 
43
- 各行それぞれ別に列の数を決めることできずうまくいかない状況です。
43
+ 無駄多いよに感じています。
44
44
 
45
45
 
46
46
 
47
- 理想は部署について長さ配列を保持するよにしたいのすが
47
+ 行それぞれ別で列数を決めるようジャグ配列など使ことで、
48
48
 
49
+ 無駄を省くことができれば嬉しく思っております。
50
+
51
+ 方法にこだわりはございませんので、効率の良い方法について
52
+
49
- アドバイスいただけませんしょうか
53
+ なにかアドバイスいただけましたら幸い
50
54
 
51
55
 
52
56
 
@@ -56,53 +60,99 @@
56
60
 
57
61
 
58
62
 
59
- '部のリスト
63
+ '部のリスト
60
64
 
61
65
  Dim n_category As Integer
62
66
 
63
67
  n_category = 3
64
68
 
65
- Dim list_category() As String
69
+ Dim list_category()
66
70
 
67
- ReDim list_category(n_category)
71
+ ReDim list_category(n_category, 2)
68
72
 
69
- list_category(0) = "営業部"
73
+ list_category(0, 0) = "営業部"
70
74
 
71
- list_category(1) = "経理部"
75
+ list_category(1, 0) = "経理部"
72
76
 
73
- list_category(2) = "財務部"
77
+ list_category(2, 0) = "財務部"
78
+
79
+ Dim i
80
+
81
+ For i = 0 To n_category
82
+
83
+ list_category(i, 1) = 0
84
+
85
+ Next
74
86
 
75
87
 
76
88
 
77
89
  '名前分類の配列(list_category(0)営業部の人を0行に格納)
78
90
 
79
- Dim strArray() As String
91
+ Dim strArray()
80
92
 
81
93
  '3行1列の配列を用意
82
94
 
83
95
  ReDim Preserve strArray(n_category, 0)
84
96
 
85
-
97
+ For i = 0 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1 rows
86
98
 
87
- For i = 0 To 2
99
+ Dim j 'type of category
88
100
 
89
- Dim j
101
+ For j = 0 To n_category - 1
90
102
 
91
- For j = 0 To n_category
103
+ If (Cells(i + 1, 1) = list_category(j, 0)) Then
92
104
 
93
- If (Cells(i + 1, 1) = list_category(j)) Then
105
+ list_category(j, 1) = list_category(j, 1) + 1
94
106
 
95
- size = UBound(strArray, 2)
107
+ Dim size, k
96
108
 
97
- ReDim Preserve strArray(n_category, size + 1)
109
+ size = 0
98
110
 
111
+ For k = 0 To n_category - 1
112
+
113
+ If (list_category(k, 1) > size) Then
114
+
115
+ size = list_category(k, 1) 'decide Column size
116
+
117
+ Cells(i + 1, 3) = size
118
+
119
+ End If
120
+
121
+ Next
122
+
123
+ ReDim Preserve strArray(n_category, size)
124
+
125
+ strArray(j, list_category(j, 1) - 1) = Cells(i + 1, 2)
126
+
127
+
128
+
99
- Exit For
129
+ Exit For
100
130
 
101
131
  End If
102
132
 
133
+ Next
134
+
103
135
  Next
104
136
 
137
+
138
+
139
+ For i = 0 To n_category - 1
140
+
141
+ Worksheets("Sheet2").Cells(1, i + 1) = list_category(i, 0)
142
+
105
- Next
143
+ Next
144
+
145
+
146
+
147
+ For i = 0 To n_category - 1
148
+
149
+ For j = 0 To size - 1
150
+
151
+ Worksheets("Sheet2").Cells(j + 2, i + 1) = strArray(i, j)
152
+
153
+ Next
154
+
155
+ Next
106
156
 
107
157
  End Sub
108
158
 
@@ -110,17 +160,11 @@
110
160
 
111
161
 
112
162
 
113
-
114
-
115
163
  名簿の部署名によって分類していく際に、
116
164
 
117
165
  入れるべき配列の場所(任意の部署行の最終列の次)を特定するのが楽なのかと思い
118
166
 
119
- コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました…!
167
+ コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました
120
-
121
- 任意行の最終列を指定する際にsize = UBound(strArray, 2)を用いる方法を考えましたが
122
-
123
- 行によってデータ数が異なる場合はfor文でデータが入っているか判定していくのが望ましいでしょうか。
124
168
 
125
169
 
126
170
 

2

2次元配列とジャグ配列、現状について追記いたしました。

2021/01/01 10:58

投稿

20200713
20200713

スコア16

test CHANGED
File without changes
test CHANGED
@@ -107,3 +107,35 @@
107
107
  End Sub
108
108
 
109
109
  ```
110
+
111
+
112
+
113
+
114
+
115
+ 名簿の部署名によって分類していく際に、
116
+
117
+ 入れるべき配列の場所(任意の部署行の最終列の次)を特定するのが楽なのかと思い
118
+
119
+ コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました…!
120
+
121
+ 任意行の最終列を指定する際にsize = UBound(strArray, 2)を用いる方法を考えましたが
122
+
123
+ 行によってデータ数が異なる場合はfor文でデータが入っているか判定していくのが望ましいでしょうか。
124
+
125
+
126
+
127
+ 具体的には既に配列が以下のような時、
128
+
129
+ 営業部(0行目) 山田,鈴木
130
+
131
+ 経理部(1行目) 田中
132
+
133
+ 財務部(2行目)
134
+
135
+ 「経理部 佐藤」を追加する際、配列の箇所指定はどのようにするのが好ましいでしょうか。
136
+
137
+
138
+
139
+ ちなみにこの度はsheet2に部署ごとの並びとして貼り付け、
140
+
141
+ 事前にその範囲を名前の定義しておいたリストを別の場所でドロップダウンリストとして用いる予定です。

1

コードを掲載いたしました。

2021/01/01 08:42

投稿

20200713
20200713

スコア16

test CHANGED
File without changes
test CHANGED
@@ -36,8 +36,74 @@
36
36
 
37
37
 
38
38
 
39
- 2次元配列をましたが、人の追加によっ配列の数が自由に変わるとう部分
39
+ 2次元配列の各行の各部署のメンバー名格納していきたいため
40
40
 
41
- うまく実装すことでませんでした
41
+ 任意の営業部のメンバーが増えたびに配列のサイズを大ていきいですが、
42
42
 
43
- 2次元配以外も効率の良い方法ご存知の方いらっしゃいしたらアドバイスただきたいです。
43
+ 各行それぞれ別にの数を決めることがきずうかな状況です。
44
+
45
+
46
+
47
+ 理想は各部署について長さの異なる配列を保持するようにしたいのですが、
48
+
49
+ アドバイスいただけませんでしょうか。
50
+
51
+
52
+
53
+ ```vba
54
+
55
+ Sub click()
56
+
57
+
58
+
59
+ '部のリスト
60
+
61
+ Dim n_category As Integer
62
+
63
+ n_category = 3
64
+
65
+ Dim list_category() As String
66
+
67
+ ReDim list_category(n_category)
68
+
69
+ list_category(0) = "営業部"
70
+
71
+ list_category(1) = "経理部"
72
+
73
+ list_category(2) = "財務部"
74
+
75
+
76
+
77
+ '名前分類の配列(list_category(0)営業部の人を0行に格納)
78
+
79
+ Dim strArray() As String
80
+
81
+ '3行1列の配列を用意
82
+
83
+ ReDim Preserve strArray(n_category, 0)
84
+
85
+
86
+
87
+ For i = 0 To 2
88
+
89
+ Dim j
90
+
91
+ For j = 0 To n_category
92
+
93
+ If (Cells(i + 1, 1) = list_category(j)) Then
94
+
95
+ size = UBound(strArray, 2)
96
+
97
+ ReDim Preserve strArray(n_category, size + 1)
98
+
99
+ Exit For
100
+
101
+ End If
102
+
103
+ Next
104
+
105
+ Next
106
+
107
+ End Sub
108
+
109
+ ```