質問編集履歴

2

説明文の改善

2023/03/17 11:07

投稿

touch-touch
touch-touch

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,21 @@
1
1
  いくつもある項目を均等に振り分けたいと思っているんですが、ランダムなどの情報はいくつか目にしたのですが、順に振り分ける方法を探すことができませんでした。
2
2
 
3
3
  1000近い項目があります。
4
-
5
- その上から2件ずつ振り分けて、ひとつのグループが30なるように振り分けたいと考えています。
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で全部が割り切れないと思いますので、最後のほうの数個のグループが29件や28件になるようにしてバランスをとりたいです。
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 開始区域番号 As Integer
38
+ Dim 開始番号 As Integer
32
- Dim 区域番号 As Integer
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開始区域部分作成 As Integer
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
- 区域名 = Cells(4, 2) '区域
53
+ チーム名 = Cells(4, 2) 'チーム
47
- 開始区域番号 = Cells(5, 2) '開始する区域番号
54
+ 開始番号 = Cells(5, 2) '開始する番号
48
- A数 = Cells(8, 2) '1つの区域のA数
55
+ A数 = Cells(8, 2) '1つのA数
49
- ページ行数 = Cells(6, 2) '1つの区域のA数
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開始区域部分作成 = Range("B16")
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区域とB区域、Zに分ける)
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(区域区域).Select
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開始区域部分作成 - 開始区域番号) * 2 'ヘッダー分の行数
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
- 区域数 = A行数 / A数
196
+ チーム数 = A行数 / A数
189
197
  Else
190
198
  If (A数 Mod A数) < (A数 / 2) Then
191
- 区域数 = CInt(A数 / A数) + 1
199
+ チーム数 = CInt(A数 / A数) + 1
192
- Else
200
+ Else
193
- 区域数 = CInt(A数 / A数)
201
+ チーム数 = CInt(A数 / A数)
194
202
  End If
195
203
  End If
196
204
  Else
197
205
  '部分作成のときは、最大番号を取得する
198
- 区域数 = i最大番号 - 開始区域番号 + 1
206
+ チーム数 = i最大番号 - 開始チーム番号 + 1
199
207
  End If
200
208
 
201
209
 
@@ -240,8 +248,8 @@
240
248
  ヘッダー行 = ヘッダー行 + 2
241
249
 
242
250
 
243
- ' If 行番号 > 区域数 * A数 Then
251
+ ' If 行番号 > チーム数 * A数 Then
244
- If 行番号 > 区域数 * ページ行数 Then
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 = 開始区域番号 To 開始区域番号 + 区域数 - 1
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 = 開始区域番号 + 区域数 - 1
278
+ Range("B22").Value = 開始番号 + 数 - 1
271
279
 
272
280
  Call MsgBox("処理が無事に終了しました", vbOKOnly, "チーム")
273
281
 

1

文法の修正

2023/03/17 10:37

投稿

touch-touch
touch-touch

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
- いくつもある件数を均等に振り分けたいと思っているんですが、ランダムなどの情報はいくつか目にしたのですが、順に振り分ける方法を探すことができませんでした。
1
+ いくつもある項目を均等に振り分けたいと思っているんですが、ランダムなどの情報はいくつか目にしたのですが、順に振り分ける方法を探すことができませんでした。
2
-
2
+
3
- 一つのシートに200ほどの建物あり、トータル1000近い件数があります。
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 マンション区域データ(1 To 10000, 1 To 7)
23
+ Dim Aデータ(1 To 10000, 1 To 7)
24
- Dim 電話区域データ(1 To 5000, 1 To 7)
24
+ Dim Bデータ(1 To 5000, 1 To 7)
25
- Dim 対象外データ(1 To 100, 1 To 7)
25
+ Dim Zデータ(1 To 100, 1 To 7)
26
26
  Dim head1(10), head2(11), 横1行分(10)
27
- Dim 行数, 対象外件数, 電話行数, マンション行数 As Integer
27
+ Dim 行数, Z件数, B行数, A行数 As Integer
28
28
  Dim ページ行数 As Integer
29
- Dim マンション数 As Integer
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
- マンション数 = Cells(8, 2) '1つの区域のマンション
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
- 電話行数 = 0
115
+ A数 = 0
117
- 対象外行数 = 0
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
- Else
130
+ Else
130
- '電話区域の抽出
131
+ 'Aの抽出
131
- If 全データ(Index, 7) <> "" Then
132
- 電話行数 = 電話行数 + 1
132
+ A数 = A数 + 1
133
- 電話区域データ(電話行数, 2) = 全データ(Index, 2)
133
+ Aデータ(A数, 2) = 全データ(Index, 2)
134
- 電話区域データ(電話行数, 3) = 全データ(Index, 3)
134
+ Aデータ(A数, 3) = 全データ(Index, 3)
135
- 電話区域データ(電話行数, 4) = 全データ(Index, 4)
135
+ Aデータ(A数, 4) = 全データ(Index, 4)
136
- 電話区域データ(電話行数, 5) = 全データ(Index, 5)
136
+ Aデータ(A数, 5) = 全データ(Index, 5)
137
- 電話区域データ(電話行数, 6) = 全データ(Index, 6)
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 (マンション行数 / マンション数) = 0 Then
187
+ If (A行数 / A数) = 0 Then
196
- 区域数 = マンション行数 / マンション
188
+ 区域数 = A行数 / A
197
189
  Else
198
- If (マンション行数 Mod マンション数) < (マンション数 / 2) Then
190
+ If (A数 Mod A数) < (A数 / 2) Then
199
- 区域数 = CInt(マンション行数 / マンション数) + 1
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) = マンション区域データ(Index, 2)
205
+ 横1行分(1) = Aデータ(Index, 2)
214
- 横1行分(2) = マンション区域データ(Index, 3)
206
+ 横1行分(2) = Aデータ(Index, 3)
215
- 横1行分(3) = マンション区域データ(Index, 4)
207
+ 横1行分(3) = Aデータ(Index, 4)
216
- 横1行分(4) = マンション区域データ(Index, 5)
208
+ 横1行分(4) = Aデータ(Index, 5)
217
- 横1行分(5) = マンション区域データ(Index, 6)
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) = マンション区域データ(Index, 2)
223
+ 横1行分(1) = Aデータ(Index, 2)
232
- 横1行分(2) = マンション区域データ(Index, 3)
224
+ 横1行分(2) = Aデータ(Index, 3)
233
- 横1行分(3) = マンション区域データ(Index, 4)
225
+ 横1行分(3) = Aデータ(Index, 4)
234
- 横1行分(4) = マンション区域データ(Index, 5)
226
+ 横1行分(4) = Aデータ(Index, 5)
235
- 横1行分(5) = マンション区域データ(Index, 6)
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 行番号 > 区域数 * マンション数 Then
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
- ' 行番号 = 行番号 + マンション数 + 2
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