質問編集履歴
3
コードを現状のものに変更いたしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,49 +17,71 @@
|
|
17
17
|
|
18
18
|
### 試したこと・発生している問題・エラーメッセージ
|
19
19
|
|
20
|
-
2次元配列の各行の各部署のメンバー名を格納
|
20
|
+
2次元配列の各行の各部署のメンバー名を格納できたのですが、
|
21
|
-
|
21
|
+
新たな人員を追加する際いれる配列の場所を決める作業が
|
22
|
-
|
22
|
+
無駄が多いように感じています。
|
23
23
|
|
24
|
-
|
24
|
+
各行それぞれ別で列の数を決めるようなジャグ配列などを使うことで、
|
25
|
+
無駄を省くことができれば嬉しく思っております。
|
26
|
+
方法にこだわりはございませんので、効率の良い方法について
|
25
|
-
アドバイスいただけま
|
27
|
+
なにかアドバイスいただけましたら幸いです。
|
26
28
|
|
27
29
|
```vba
|
28
30
|
Sub click()
|
29
31
|
|
30
|
-
|
32
|
+
'部のリスト
|
31
33
|
Dim n_category As Integer
|
32
34
|
n_category = 3
|
33
|
-
Dim list_category()
|
35
|
+
Dim list_category()
|
34
|
-
ReDim list_category(n_category)
|
36
|
+
ReDim list_category(n_category, 2)
|
35
|
-
list_category(0) = "営業部"
|
37
|
+
list_category(0, 0) = "営業部"
|
36
|
-
list_category(1) = "経理部"
|
38
|
+
list_category(1, 0) = "経理部"
|
37
|
-
list_category(2) = "財務部"
|
39
|
+
list_category(2, 0) = "財務部"
|
40
|
+
Dim i
|
41
|
+
For i = 0 To n_category
|
42
|
+
list_category(i, 1) = 0
|
43
|
+
Next
|
38
44
|
|
39
45
|
'名前分類の配列(list_category(0)営業部の人を0行に格納)
|
40
|
-
Dim strArray()
|
46
|
+
Dim strArray()
|
41
47
|
'3行1列の配列を用意
|
42
48
|
ReDim Preserve strArray(n_category, 0)
|
43
|
-
|
49
|
+
For i = 0 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1 rows
|
44
|
-
|
50
|
+
Dim j 'type of category
|
45
|
-
Dim j
|
46
|
-
For j = 0 To n_category
|
51
|
+
For j = 0 To n_category - 1
|
47
|
-
If (Cells(i + 1, 1) = list_category(j)) Then
|
52
|
+
If (Cells(i + 1, 1) = list_category(j, 0)) Then
|
53
|
+
list_category(j, 1) = list_category(j, 1) + 1
|
54
|
+
Dim size, k
|
55
|
+
size = 0
|
48
|
-
|
56
|
+
For k = 0 To n_category - 1
|
57
|
+
If (list_category(k, 1) > size) Then
|
58
|
+
size = list_category(k, 1) 'decide Column size
|
59
|
+
Cells(i + 1, 3) = size
|
60
|
+
End If
|
61
|
+
Next
|
49
|
-
ReDim Preserve strArray(n_category, size
|
62
|
+
ReDim Preserve strArray(n_category, size)
|
63
|
+
strArray(j, list_category(j, 1) - 1) = Cells(i + 1, 2)
|
64
|
+
|
50
|
-
|
65
|
+
Exit For
|
51
66
|
End If
|
67
|
+
Next
|
52
68
|
Next
|
69
|
+
|
70
|
+
For i = 0 To n_category - 1
|
71
|
+
Worksheets("Sheet2").Cells(1, i + 1) = list_category(i, 0)
|
53
|
-
|
72
|
+
Next
|
73
|
+
|
74
|
+
For i = 0 To n_category - 1
|
75
|
+
For j = 0 To size - 1
|
76
|
+
Worksheets("Sheet2").Cells(j + 2, i + 1) = strArray(i, j)
|
77
|
+
Next
|
78
|
+
Next
|
54
79
|
End Sub
|
55
80
|
```
|
56
81
|
|
57
|
-
|
58
82
|
名簿の部署名によって分類していく際に、
|
59
83
|
入れるべき配列の場所(任意の部署行の最終列の次)を特定するのが楽なのかと思い
|
60
|
-
コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました
|
84
|
+
コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました。
|
61
|
-
任意行の最終列を指定する際にsize = UBound(strArray, 2)を用いる方法を考えましたが
|
62
|
-
行によってデータ数が異なる場合はfor文でデータが入っているか判定していくのが望ましいでしょうか。
|
63
85
|
|
64
86
|
具体的には既に配列が以下のような時、
|
65
87
|
営業部(0行目) 山田,鈴木
|
2
2次元配列とジャグ配列、現状について追記いたしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -52,4 +52,20 @@
|
|
52
52
|
Next
|
53
53
|
Next
|
54
54
|
End Sub
|
55
|
-
```
|
55
|
+
```
|
56
|
+
|
57
|
+
|
58
|
+
名簿の部署名によって分類していく際に、
|
59
|
+
入れるべき配列の場所(任意の部署行の最終列の次)を特定するのが楽なのかと思い
|
60
|
+
コメントにてお教えいただいたジャグ配列が適当なのかと考えておりました…!
|
61
|
+
任意行の最終列を指定する際にsize = UBound(strArray, 2)を用いる方法を考えましたが
|
62
|
+
行によってデータ数が異なる場合はfor文でデータが入っているか判定していくのが望ましいでしょうか。
|
63
|
+
|
64
|
+
具体的には既に配列が以下のような時、
|
65
|
+
営業部(0行目) 山田,鈴木
|
66
|
+
経理部(1行目) 田中
|
67
|
+
財務部(2行目)
|
68
|
+
「経理部 佐藤」を追加する際、配列の箇所指定はどのようにするのが好ましいでしょうか。
|
69
|
+
|
70
|
+
ちなみにこの度はsheet2に部署ごとの並びとして貼り付け、
|
71
|
+
事前にその範囲を名前の定義しておいたリストを別の場所でドロップダウンリストとして用いる予定です。
|
1
コードを掲載いたしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,6 +17,39 @@
|
|
17
17
|
|
18
18
|
### 試したこと・発生している問題・エラーメッセージ
|
19
19
|
|
20
|
-
2次元配列を
|
20
|
+
2次元配列の各行の各部署のメンバー名を格納していきたいため
|
21
|
+
任意の営業部のメンバーが増えるたびに配列のサイズを大きくしていきたいですが、
|
22
|
+
各行それぞれ別に列の数を決めることができずうまくいかない状況です。
|
23
|
+
|
24
|
+
理想は各部署について長さの異なる配列を保持するようにしたいのですが、
|
21
|
-
|
25
|
+
アドバイスいただけませんでしょうか。
|
26
|
+
|
27
|
+
```vba
|
28
|
+
Sub click()
|
29
|
+
|
30
|
+
'部のリスト
|
31
|
+
Dim n_category As Integer
|
32
|
+
n_category = 3
|
33
|
+
Dim list_category() As String
|
34
|
+
ReDim list_category(n_category)
|
35
|
+
list_category(0) = "営業部"
|
36
|
+
list_category(1) = "経理部"
|
37
|
+
list_category(2) = "財務部"
|
38
|
+
|
39
|
+
'名前分類の配列(list_category(0)営業部の人を0行に格納)
|
40
|
+
Dim strArray() As String
|
41
|
+
'3行1列の配列を用意
|
42
|
+
ReDim Preserve strArray(n_category, 0)
|
43
|
+
|
44
|
+
For i = 0 To 2
|
45
|
+
Dim j
|
46
|
+
For j = 0 To n_category
|
47
|
+
If (Cells(i + 1, 1) = list_category(j)) Then
|
48
|
+
size = UBound(strArray, 2)
|
22
|
-
|
49
|
+
ReDim Preserve strArray(n_category, size + 1)
|
50
|
+
Exit For
|
51
|
+
End If
|
52
|
+
Next
|
53
|
+
Next
|
54
|
+
End Sub
|
55
|
+
```
|