質問編集履歴
3
コードを現状のものに変更いたしました。
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()
|
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()
|
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
|
-
|
99
|
+
Dim j 'type of category
|
88
100
|
|
89
|
-
|
101
|
+
For j = 0 To n_category - 1
|
90
102
|
|
91
|
-
|
103
|
+
If (Cells(i + 1, 1) = list_category(j, 0)) Then
|
92
104
|
|
93
|
-
|
105
|
+
list_category(j, 1) = list_category(j, 1) + 1
|
94
106
|
|
95
|
-
size
|
107
|
+
Dim size, k
|
96
108
|
|
97
|
-
|
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
|
-
|
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次元配列とジャグ配列、現状について追記いたしました。
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
コードを掲載いたしました。
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
|
-
|
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
|
+
```
|