質問編集履歴
2
説明文の改善
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
いくつもある項目を均等に振り分けたいと思っているんですが、ランダムなどの情報はいくつか目にしたのですが、順に振り分ける方法を探すことができませんでした。
|
2
2
|
|
3
3
|
1000近い項目があります。
|
4
|
-
|
5
|
-
その
|
4
|
+
その項目をひとつのグループが30行ずつに振り分けたいと考えています。
|
5
|
+
上の行からから2件ずつ(2行ずつA~E)を抽出。
|
6
|
+
例)1000÷30=33.33…
|
7
|
+
33枚は最低30行グループが可能
|
8
|
+
2行ずつ振り分けるため、1~66行がそれぞれの最初の段にくる
|
9
|
+
67~132行がその次にくる
|
10
|
+
つまり、一つ目のグループには「メインデータ」の
|
11
|
+
1.2.67.68.133.134.199.200.265.266.331.332.397.398.463.464.529.530.595.596.661.662.727.728.793.794.859.860.925.926の行が振り分けられる
|
12
|
+
|
6
|
-
30で全部が割り切れないと思いますので、
|
13
|
+
30で全部が割り切れないと思いますので、グループが増えても、数個のグループが26~29行になるようにしてバランスをとれるのがベストです。
|
7
14
|
|
8
15
|
30年以上前に、友人がエクセルで作ってくれたものがあるのですが、私には扱えなくて、スプレッドシートで使用できるものを必要としています。
|
9
16
|
|
10
|
-
振り分け後の30
|
17
|
+
振り分け後の30行ずつのグループは、「メインデータ」のシートはそのままで、別のシートに作成できるようにしたいです。
|
11
|
-
また、振り分け前の「メインデータ」には、リンクが挿入されているため、振り分け後の30
|
18
|
+
また、振り分け前の「メインデータ」には、リンクが挿入されているため、振り分け後の30行ずつのデータにも、リンク情報がコピーされるようにしたいです。
|
12
19
|
|
13
20
|
友人が以前に作ってくれたエクセルのコードを、サンプルとして添付します。
|
14
21
|
|
@@ -27,14 +34,14 @@
|
|
27
34
|
Dim 行数, Z件数, B行数, A行数 As Integer
|
28
35
|
Dim ページ行数 As Integer
|
29
36
|
Dim A数 As Integer
|
30
|
-
Dim
|
37
|
+
Dim 名
|
31
|
-
Dim 開始
|
38
|
+
Dim 開始番号 As Integer
|
32
|
-
Dim
|
39
|
+
Dim 番号 As Integer
|
33
40
|
|
34
41
|
'NEW 2007.02.07
|
35
42
|
Dim i全作成 As Integer
|
36
43
|
Dim i開始行 As Integer
|
37
|
-
Dim i開始
|
44
|
+
Dim i開始部分作成 As Integer
|
38
45
|
Dim i最大番号 As Integer
|
39
46
|
Dim b部分作成でもヘッダー作成
|
40
47
|
|
@@ -43,21 +50,21 @@
|
|
43
50
|
'設定取得
|
44
51
|
Sheets("設定").Select
|
45
52
|
|
46
|
-
|
53
|
+
チーム名 = Cells(4, 2) 'チーム名
|
47
|
-
開始
|
54
|
+
開始番号 = Cells(5, 2) '開始する番号
|
48
|
-
A数 = Cells(8, 2) '1つの
|
55
|
+
A数 = Cells(8, 2) '1つのA数
|
49
|
-
ページ行数 = Cells(6, 2) '1つの
|
56
|
+
ページ行数 = Cells(6, 2) '1つのA数
|
50
57
|
|
51
58
|
i全作成 = (Range("B7").Value)
|
52
59
|
|
53
60
|
If i全作成 = 1 Then
|
54
61
|
i開始行 = 1
|
55
|
-
i開始
|
62
|
+
i開始部分作成 = 開始番号
|
56
63
|
|
57
64
|
Else
|
58
65
|
|
59
66
|
i開始行 = Range("B15")
|
60
|
-
i開始
|
67
|
+
i開始部分作成 = Range("B16")
|
61
68
|
i最大番号 = Range("B17")
|
62
69
|
|
63
70
|
i_ret = MsgBox("部分作成が選択されています。既存のデータが上書きされる可能性がありますが、よろしいですか?", vbOKCancel + vbInformation, "チーム作成")
|
@@ -71,7 +78,8 @@
|
|
71
78
|
|
72
79
|
|
73
80
|
'データの取り込み
|
81
|
+
チームデータ = チーム
|
74
|
-
|
82
|
+
名 + "データ"
|
75
83
|
Sheets(区域データ).Select
|
76
84
|
全行番号 = 0
|
77
85
|
iデータカウント = 0
|
@@ -111,7 +119,7 @@
|
|
111
119
|
End If
|
112
120
|
Wend
|
113
121
|
|
114
|
-
'データの振分け(A
|
122
|
+
'データの振分け(AチームとBチーム、Zに分ける)
|
115
123
|
A数 = 0
|
116
124
|
B数 = 0
|
117
125
|
Z数 = 0
|
@@ -142,7 +150,7 @@
|
|
142
150
|
'Aの作成
|
143
151
|
Sheets("ヘッダー").Select
|
144
152
|
head1(0) = Cells(1, 1)
|
145
|
-
head1(1) =
|
153
|
+
head1(1) = チーム名
|
146
154
|
head1(2) = Cells(1, 3)
|
147
155
|
head1(3) = Cells(1, 4)
|
148
156
|
head1(4) = Cells(1, 5)
|
@@ -152,8 +160,8 @@
|
|
152
160
|
head1(8) = Cells(1, 9)
|
153
161
|
head1(9) = Cells(1, 10)
|
154
162
|
|
155
|
-
|
163
|
+
チーム名班 = チーム名 + "班"
|
156
|
-
Sheets(
|
164
|
+
Sheets(チーム名班).Select
|
157
165
|
|
158
166
|
'全作成のときは、データを消去する
|
159
167
|
If i全作成 = 1 Then
|
@@ -176,8 +184,8 @@
|
|
176
184
|
|
177
185
|
'最初に始める場所を計算する
|
178
186
|
番号 = i開始行
|
179
|
-
行番号 = i開始行 + (i開始
|
187
|
+
行番号 = i開始行 + (i開始部分作成 - 開始番号) * ページ行数
|
180
|
-
ヘッダー行 = 2 + (i開始
|
188
|
+
ヘッダー行 = 2 + (i開始部分作成 - 開始番号) * 2 'ヘッダー分の行数
|
181
189
|
|
182
190
|
'全区域数の計算
|
183
191
|
|
@@ -185,17 +193,17 @@
|
|
185
193
|
If i全作成 = 1 Then
|
186
194
|
|
187
195
|
If (A行数 / A数) = 0 Then
|
188
|
-
|
196
|
+
チーム数 = A行数 / A数
|
189
197
|
Else
|
190
198
|
If (A数 Mod A数) < (A数 / 2) Then
|
191
|
-
|
199
|
+
チーム数 = CInt(A数 / A数) + 1
|
192
|
-
Else
|
200
|
+
Else
|
193
|
-
|
201
|
+
チーム数 = CInt(A数 / A数)
|
194
202
|
End If
|
195
203
|
End If
|
196
204
|
Else
|
197
205
|
'部分作成のときは、最大番号を取得する
|
198
|
-
|
206
|
+
チーム数 = i最大番号 - 開始チーム番号 + 1
|
199
207
|
End If
|
200
208
|
|
201
209
|
|
@@ -240,8 +248,8 @@
|
|
240
248
|
ヘッダー行 = ヘッダー行 + 2
|
241
249
|
|
242
250
|
|
243
|
-
' If 行番号 >
|
251
|
+
' If 行番号 > チーム数 * A数 Then
|
244
|
-
If 行番号 >
|
252
|
+
If 行番号 > チーム数 * ページ行数 Then
|
245
253
|
番号 = 番号 + 2
|
246
254
|
行番号 = 番号
|
247
255
|
ヘッダー行 = 2
|
@@ -252,7 +260,7 @@
|
|
252
260
|
If i全作成 = 1 Or b部分作成でもヘッダー作成 Then
|
253
261
|
'Aのヘッダー
|
254
262
|
行番号 = 2
|
255
|
-
For Index = 開始
|
263
|
+
For Index = 開始番号 To 開始番号 + 数 - 1
|
256
264
|
head1(0) = Index
|
257
265
|
Range(Cells(行番号, 1), Cells(行番号, 10)) = head1
|
258
266
|
Range(Cells(行番号, 1), Cells(行番号, 10)).Font.Bold = True
|
@@ -266,8 +274,8 @@
|
|
266
274
|
Sheets("設定").Select
|
267
275
|
|
268
276
|
Range("B20").Value = A行数
|
269
|
-
Range("B21").Value =
|
277
|
+
Range("B21").Value = チーム数
|
270
|
-
Range("B22").Value = 開始
|
278
|
+
Range("B22").Value = 開始番号 + 数 - 1
|
271
279
|
|
272
280
|
Call MsgBox("処理が無事に終了しました", vbOKOnly, "チーム")
|
273
281
|
|
1
文法の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
いくつもある
|
1
|
+
いくつもある項目を均等に振り分けたいと思っているんですが、ランダムなどの情報はいくつか目にしたのですが、順に振り分ける方法を探すことができませんでした。
|
2
|
-
|
2
|
+
|
3
|
-
|
3
|
+
1000近い項目があります。
|
4
4
|
|
5
5
|
その上から2件ずつ振り分けて、ひとつのグループが30件になるように振り分けたいと考えています。
|
6
6
|
30で全部が割り切れないと思いますので、最後のほうの数個のグループが29件や28件になるようにしてバランスをとりたいです。
|
@@ -20,13 +20,13 @@
|
|
20
20
|
Dim 全行番号
|
21
21
|
Dim iデータカウント
|
22
22
|
Dim 全データ(1 To 100000, 1 To 7)
|
23
|
-
Dim
|
23
|
+
Dim Aデータ(1 To 10000, 1 To 7)
|
24
|
-
Dim
|
24
|
+
Dim Bデータ(1 To 5000, 1 To 7)
|
25
|
-
Dim
|
25
|
+
Dim Zデータ(1 To 100, 1 To 7)
|
26
26
|
Dim head1(10), head2(11), 横1行分(10)
|
27
|
-
Dim 行数,
|
27
|
+
Dim 行数, Z件数, B行数, A行数 As Integer
|
28
28
|
Dim ページ行数 As Integer
|
29
|
-
Dim
|
29
|
+
Dim A数 As Integer
|
30
30
|
Dim 区域名
|
31
31
|
Dim 開始区域番号 As Integer
|
32
32
|
Dim 区域番号 As Integer
|
@@ -45,8 +45,8 @@
|
|
45
45
|
|
46
46
|
区域名 = Cells(4, 2) '区域名
|
47
47
|
開始区域番号 = Cells(5, 2) '開始する区域番号
|
48
|
-
|
48
|
+
A数 = Cells(8, 2) '1つの区域のA数
|
49
|
-
ページ行数 = Cells(6, 2) '1つの区域の
|
49
|
+
ページ行数 = Cells(6, 2) '1つの区域のA数
|
50
50
|
|
51
51
|
i全作成 = (Range("B7").Value)
|
52
52
|
|
@@ -60,7 +60,7 @@
|
|
60
60
|
i開始区域部分作成 = Range("B16")
|
61
61
|
i最大番号 = Range("B17")
|
62
62
|
|
63
|
-
i_ret = MsgBox("部分作成が選択されています。既存のデータが上書きされる可能性がありますが、よろしいですか?", vbOKCancel + vbInformation, "
|
63
|
+
i_ret = MsgBox("部分作成が選択されています。既存のデータが上書きされる可能性がありますが、よろしいですか?", vbOKCancel + vbInformation, "チーム作成")
|
64
64
|
If i_ret = vbCancel Then
|
65
65
|
Exit Sub
|
66
66
|
End If
|
@@ -111,10 +111,10 @@
|
|
111
111
|
End If
|
112
112
|
Wend
|
113
113
|
|
114
|
-
'データの振分け(
|
114
|
+
'データの振分け(A区域とB区域、Zに分ける)
|
115
|
-
マンション行数 = 0
|
116
|
-
|
115
|
+
A数 = 0
|
117
|
-
|
116
|
+
B数 = 0
|
117
|
+
Z数 = 0
|
118
118
|
For Index = 1 To iデータカウント
|
119
119
|
|
120
120
|
'対象外の抽出
|
@@ -126,28 +126,20 @@
|
|
126
126
|
対象外データ(対象外行数, 5) = 全データ(Index, 5)
|
127
127
|
対象外データ(対象外行数, 6) = 全データ(Index, 6)
|
128
128
|
対象外データ(対象外行数, 7) = 全データ(Index, 7)
|
129
|
+
|
129
|
-
|
130
|
+
Else
|
130
|
-
'
|
131
|
+
'Aの抽出
|
131
|
-
If 全データ(Index, 7) <> "" Then
|
132
|
-
|
132
|
+
A数 = A数 + 1
|
133
|
-
|
133
|
+
Aデータ(A数, 2) = 全データ(Index, 2)
|
134
|
-
|
134
|
+
Aデータ(A数, 3) = 全データ(Index, 3)
|
135
|
-
|
135
|
+
Aデータ(A数, 4) = 全データ(Index, 4)
|
136
|
-
|
136
|
+
Aデータ(A数, 5) = 全データ(Index, 5)
|
137
|
-
|
137
|
+
Aデータ(A数, 6) = 全データ(Index, 6)
|
138
|
-
Else
|
139
|
-
'マンション区域の抽出
|
140
|
-
マンション行数 = マンション行数 + 1
|
141
|
-
マンション区域データ(マンション行数, 2) = 全データ(Index, 2)
|
142
|
-
マンション区域データ(マンション行数, 3) = 全データ(Index, 3)
|
143
|
-
マンション区域データ(マンション行数, 4) = 全データ(Index, 4)
|
144
|
-
マンション区域データ(マンション行数, 5) = 全データ(Index, 5)
|
145
|
-
マンション区域データ(マンション行数, 6) = 全データ(Index, 6)
|
146
138
|
End If
|
147
139
|
End If
|
148
140
|
Next Index
|
149
141
|
|
150
|
-
'
|
142
|
+
'Aの作成
|
151
143
|
Sheets("ヘッダー").Select
|
152
144
|
head1(0) = Cells(1, 1)
|
153
145
|
head1(1) = 区域名
|
@@ -169,7 +161,7 @@
|
|
169
161
|
Selection.ClearContents
|
170
162
|
Else
|
171
163
|
|
172
|
-
i_ret = MsgBox("部分作成が選択されています。以前のデータを消す場合は「はい」" & vbCrLf & "、消さない場合は「いいえ」を押してください", vbYesNo + vbInformation, "
|
164
|
+
i_ret = MsgBox("部分作成が選択されています。以前のデータを消す場合は「はい」" & vbCrLf & "、消さない場合は「いいえ」を押してください", vbYesNo + vbInformation, "チーム作成")
|
173
165
|
If i_ret = vbYes Then
|
174
166
|
Cells.Select
|
175
167
|
Selection.ClearContents
|
@@ -192,13 +184,13 @@
|
|
192
184
|
'全作成のときは、件数を計算する
|
193
185
|
If i全作成 = 1 Then
|
194
186
|
|
195
|
-
If (
|
187
|
+
If (A行数 / A数) = 0 Then
|
196
|
-
区域数 =
|
188
|
+
区域数 = A行数 / A数
|
197
189
|
Else
|
198
|
-
If (
|
190
|
+
If (A数 Mod A数) < (A数 / 2) Then
|
199
|
-
区域数 = CInt(
|
191
|
+
区域数 = CInt(A数 / A数) + 1
|
200
|
-
Else
|
192
|
+
Else
|
201
|
-
区域数 = CInt(
|
193
|
+
区域数 = CInt(A数 / A数)
|
202
194
|
End If
|
203
195
|
End If
|
204
196
|
Else
|
@@ -208,13 +200,13 @@
|
|
208
200
|
|
209
201
|
|
210
202
|
|
211
|
-
For Index = 1 To
|
203
|
+
For Index = 1 To A数
|
212
204
|
横1行分(0) = 番号
|
213
|
-
横1行分(1) =
|
205
|
+
横1行分(1) = Aデータ(Index, 2)
|
214
|
-
横1行分(2) =
|
206
|
+
横1行分(2) = Aデータ(Index, 3)
|
215
|
-
横1行分(3) =
|
207
|
+
横1行分(3) = Aデータ(Index, 4)
|
216
|
-
横1行分(4) =
|
208
|
+
横1行分(4) = Aデータ(Index, 5)
|
217
|
-
横1行分(5) =
|
209
|
+
横1行分(5) = Aデータ(Index, 6)
|
218
210
|
|
219
211
|
|
220
212
|
Range(Cells(行番号 + ヘッダー行, 1), Cells(行番号 + ヘッダー行, 10)) = 横1行分
|
@@ -228,11 +220,11 @@
|
|
228
220
|
Index = Index + 1
|
229
221
|
|
230
222
|
横1行分(0) = 番号
|
231
|
-
横1行分(1) =
|
223
|
+
横1行分(1) = Aデータ(Index, 2)
|
232
|
-
横1行分(2) =
|
224
|
+
横1行分(2) = Aデータ(Index, 3)
|
233
|
-
横1行分(3) =
|
225
|
+
横1行分(3) = Aデータ(Index, 4)
|
234
|
-
横1行分(4) =
|
226
|
+
横1行分(4) = Aデータ(Index, 5)
|
235
|
-
横1行分(5) =
|
227
|
+
横1行分(5) = Aデータ(Index, 6)
|
236
228
|
|
237
229
|
|
238
230
|
Range(Cells(行番号 + ヘッダー行, 1), Cells(行番号 + ヘッダー行, 10)) = 横1行分
|
@@ -244,11 +236,11 @@
|
|
244
236
|
番号 = 番号 - 1
|
245
237
|
|
246
238
|
行番号 = 行番号 + ページ行数
|
247
|
-
' 行番号 = 行番号 +
|
239
|
+
' 行番号 = 行番号 + A数
|
248
240
|
ヘッダー行 = ヘッダー行 + 2
|
249
241
|
|
250
242
|
|
251
|
-
' If 行番号 > 区域数 *
|
243
|
+
' If 行番号 > 区域数 * A数 Then
|
252
244
|
If 行番号 > 区域数 * ページ行数 Then
|
253
245
|
番号 = 番号 + 2
|
254
246
|
行番号 = 番号
|
@@ -258,14 +250,14 @@
|
|
258
250
|
|
259
251
|
'全作成のときは、ヘッダーを作成する
|
260
252
|
If i全作成 = 1 Or b部分作成でもヘッダー作成 Then
|
261
|
-
'
|
253
|
+
'Aのヘッダー
|
262
254
|
行番号 = 2
|
263
255
|
For Index = 開始区域番号 To 開始区域番号 + 区域数 - 1
|
264
256
|
head1(0) = Index
|
265
257
|
Range(Cells(行番号, 1), Cells(行番号, 10)) = head1
|
266
258
|
Range(Cells(行番号, 1), Cells(行番号, 10)).Font.Bold = True
|
267
259
|
Range(Cells(行番号, 1), Cells(行番号, 10)).Font.Italic = True
|
268
|
-
' 行番号 = 行番号 +
|
260
|
+
' 行番号 = 行番号 + A数 + 2
|
269
261
|
行番号 = 行番号 + ページ行数 + 2
|
270
262
|
Next Index
|
271
263
|
End If
|
@@ -273,11 +265,11 @@
|
|
273
265
|
'後処理
|
274
266
|
Sheets("設定").Select
|
275
267
|
|
276
|
-
Range("B20").Value =
|
268
|
+
Range("B20").Value = A行数
|
277
269
|
Range("B21").Value = 区域数
|
278
270
|
Range("B22").Value = 開始区域番号 + 区域数 - 1
|
279
271
|
|
280
|
-
Call MsgBox("処理が無事に終了しました", vbOKOnly, "
|
272
|
+
Call MsgBox("処理が無事に終了しました", vbOKOnly, "チーム")
|
281
273
|
|
282
274
|
End Sub
|
283
275
|
|