質問編集履歴

4

質問タイトルの内容を修正

2019/03/17 10:45

投稿

chanken
chanken

スコア12

test CHANGED
@@ -1 +1 @@
1
- 判定という文字を(ABCDEG)の上任意の場所に、判定列の重複している行をまとめたい。(写真とコード参照)
1
+ 取得した文字変数入し認識させたい!  .RemoveDuplicates (Array(変数))
test CHANGED
@@ -1,284 +1,132 @@
1
1
  ![イメージ説明](17bba4c33d5ff5996312c3614df98a54.jpeg)
2
+
3
+
4
+
5
+ 判定列と入力されている列からに入力された値の列を取得し、取得した配列をJoin(judge_element, ", ")にて区切って文字列として変数に代入して、RemoveDuplicatesメソッドが動作するように認識させたいです。。。
2
6
 
3
7
 
4
8
 
5
9
 
6
10
 
7
- 現状判定いう文字入っるセルの列を写真の左の表から右の表へと処理る記述はできました
11
+ 現状:.Range("A3:G" & LastRow).RemoveDuplicates (Array(arry_num))ここの行で(型が一致しませんエラーしまいます。
8
-
9
- (今回の判定列はABCE)
10
12
 
11
13
 
12
14
 
15
+ どのようにしたら型が一致するのですしょうか?
16
+
17
+
18
+
19
+
20
+
21
+ ``` Dim judge_element() As Variant
22
+
23
+ Dim judge_result() As Variant
24
+
25
+ Dim j_k As Integer
26
+
27
+ Dim arry_num As String
28
+
29
+
30
+
31
+
32
+
33
+ judge_element = judge_elements
34
+
35
+
36
+
37
+ arry_num = Join(judge_element, ", ")
38
+
39
+
40
+
41
+ "arry_numの中身は”2, 4, 6”です"
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+ '重複を削除
50
+
13
- 処理の概要としましては左の表の判定列の部分が全て一致した時判定列の重複したものを削除し、重複していないものはスラッシュでまとめるという流れです(分かりにくかったらごめんなさい。コードと表を貼って動かしていただければわかるかと思います。。。)
51
+ .Range("A3:G" & LastRow).RemoveDuplicates (Array("arry_num"))
52
+
53
+
54
+
55
+ Function judge_elements()
56
+
57
+ Dim rngTable As Range '表のセル範囲
58
+
59
+ Dim flg As Boolean 'フラグが1個も立ってないかのチェック
60
+
61
+ Dim vntIndex() As Variant 'フラグが立っている列番号の配列
62
+
63
+
64
+
65
+ Set rngTable = Worksheets("Sheet2").Range("A1").CurrentRegion
66
+
67
+ flg = GetArrayOfNumbers2(rngTable, vntIndex)
68
+
69
+ If flg = False Then Exit Function
70
+
71
+
72
+
73
+ judge_elements = vntIndex
74
+
75
+ 'rngTable.RemoveDuplicates vntIndex
76
+
77
+ End Function
78
+
79
+
80
+
81
+ Function GetArrayOfNumbers2(ByRef Rng As Range, _
82
+
83
+ ByRef ixResult() As Variant) As Boolean
84
+
85
+ Dim rngFlag As Range
86
+
87
+ Dim c As Range
88
+
89
+ Dim i As Long
90
+
91
+
92
+
93
+ i = Rng.Columns.Count
94
+
95
+ ReDim ixResult(0 To i - 1)
96
+
97
+ On Error Resume Next
98
+
99
+ Set rngFlag = Rng.Rows(1).SpecialCells(xlCellTypeConstants)
100
+
101
+ On Error GoTo 0
102
+
103
+ If rngFlag Is Nothing Then Exit Function
104
+
105
+
106
+
107
+ i = 0
108
+
109
+ For Each c In rngFlag.Columns
110
+
111
+ ixResult(i) = c.Column
112
+
113
+ i = i + 1
114
+
115
+ Next
116
+
117
+
118
+
119
+ ReDim Preserve ixResult(0 To i - 1)
120
+
121
+ GetArrayOfNumbers2 = True
122
+
123
+ End Function
14
124
 
15
125
 
16
126
 
17
127
 
18
128
 
19
- **ー今回実装したいことー(処理パターンは63通りコンビネーションより 6C1,6C2,6C3,6C4,6C5,6C6の合計)**
20
-
21
- 本題は任意の列(A,B,C,D,E,F,G,AB, AC,AD,AEGH,など)を指定し、判定列の重複部分は1つにまとめ、そうでない部分写真の左からみはスラッシュでまとめるというし処理を行いたいです。。。。。
22
-
23
-
24
-
25
- これらの任意の列の63パターンごとにちまちまコードを書いていくしかないんでしょうか?
26
-
27
-
28
-
29
- 何か方法があれば知恵を貸していただけると嬉しいです。
30
-
31
-
32
-
33
129
  ```
34
-
35
- Sub dupulication()
36
-
37
-
38
-
39
- Worksheets("Sheet1").Activate
40
-
41
- 'Dim LastRow As Integer: LastRow = Cells(2, 2).End(xlDown).row
42
-
43
- Dim LastRow As Integer
44
-
45
- Dim FirstRow As Long
46
-
47
- Dim EndRow As Long
48
-
49
- Dim copy_last As Long
50
-
51
- Dim 初めの行 As Long
52
-
53
- Dim 最後の行 As Long
54
-
55
-
56
-
57
- '初めの行の指定
58
-
59
- 初めの行 = 1
60
-
61
- '最後の行の指定
62
-
63
- 最後の行 = 7
64
-
65
-
66
-
67
-
68
-
69
- 'Dim Buf As Variant: Buf = Range(Cells(1, 1), Cells(LastRow, 7))
70
-
71
- FirstRow = 初めの行 + 2
72
-
73
- LastRow = 最後の行 + 2
74
-
75
- copy_last = LastRow - FirstRow + 3
76
-
77
-
78
-
79
- Dim header As Variant: header = Range(Cells(1, 1), Cells(2, 7))
80
-
81
- Dim Buf As Variant: Buf = Range(Cells(FirstRow, 1), Cells(LastRow, 7))
82
-
83
- Dim Result As Variant
84
-
85
- Dim i, j, k As Integer
86
-
87
- Dim Store_Array() As String
88
-
89
- Dim Flag As Boolean
90
-
91
- Dim d_Flag As Boolean
92
-
93
- Dim a_Flag As Boolean
94
-
95
- Dim d_i As Long
96
-
97
- Dim n As Long
98
-
99
-
100
-
101
- n = 1
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
- With Sheets(2)
110
-
111
- 'Sheet2に貼り付け
112
-
113
- '.Range(.Cells(1, 1), .Cells(LastRow, 7)) = Buf
114
-
115
- .Range(.Cells(1, 1), .Cells(2, 7)) = header
116
-
117
- .Range(.Cells(3, 1), .Cells(copy_last, 7)) = Buf
118
-
119
- '重複を削除
120
-
121
- .Range("B3:G" & LastRow).RemoveDuplicates (Array(1, 2, 3, 4, 5, 6))
122
-
123
-
124
-
125
- '重複削除後の最終行取得
126
-
127
- EndRow = .Cells(3, 2).End(xlDown).row
128
-
129
- 'Sheet2のA列の値をクリア
130
-
131
- For d_i = 3 To LastRow
132
-
133
- Worksheets("sheet2").Cells(d_i, 1) = ""
134
-
135
- Next d_i
136
-
137
-
138
-
139
- 'Sheet2のA列のセルに連番を振る
140
-
141
- For d_i = 3 To EndRow
142
-
143
- Worksheets("sheet2").Cells(d_i, 1) = n
144
-
145
- n = n + 1
146
-
147
- Next d_i
148
-
149
-
150
-
151
-
152
-
153
- '重複削除後の表取得
154
-
155
- Result = .Range(.Cells(3, 1), .Cells(EndRow, 7))
156
-
157
-
158
-
159
- For i = 1 To LastRow - 2
160
-
161
- For j = 1 To EndRow - 2
162
-
163
- If Buf(i, 2) = Result(j, 2) _
164
-
165
- And Buf(i, 3) = Result(j, 3) _
166
-
167
- And Buf(i, 4) = Result(j, 4) _
168
-
169
- And Buf(i, 6) = Result(j, 6) Then '判定が全部一致していたら
170
-
171
-
172
-
173
- Call put_together(j, k, i, Result, Buf, Flag, d_Flag, Store_Array)
174
-
175
-
176
-
177
- End If
178
-
179
- Next
180
-
181
- Next
182
-
183
- .Range(.Cells(3, 1), .Cells(EndRow, 7)) = Result
184
-
185
- .Range(.Cells(3, 1), .Cells(EndRow, 5)) = Result
186
-
187
- End With
188
-
189
-
190
-
191
-
192
-
193
- MsgBox "end"
194
-
195
- End Sub
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
- Sub put_together(j, k, i, Result, Buf, Flag, d_Flag, Store_Array() As String)
204
-
205
-
206
-
207
- '=============G列=======
208
-
209
- Store_Array = Split(Result(j, 7), "/") '現在取得済みの商店を/区切りで配列に分割
210
-
211
- 'フラグを立てておき、
212
-
213
- '現在取得済みの商店と一致していたらフラグを外す
214
-
215
- Flag = True
216
-
217
- For k = 0 To UBound(Store_Array)
218
-
219
- If Store_Array(k) = Buf(i, 7) Then
220
-
221
- Flag = False
222
-
223
- End If
224
-
225
- Next
226
-
227
-
228
-
229
- If Flag Then 'フラグが立っていたら
230
-
231
- Result(j, 7) = Result(j, 7) & "/" & Buf(i, 7)
232
-
233
- End If
234
-
235
-
236
-
237
-
238
-
239
- '=============D列=======
240
-
241
- Store_Array = Split(Result(j, 5), "/") '現在取得済みの商店を/区切りで配列に分割
242
-
243
-
244
-
245
- 'フラグを立てておき、
246
-
247
- '現在取得済みの商店と一致していたらフラグを外す
248
-
249
- d_Flag = True
250
-
251
- For k = 0 To UBound(Store_Array)
252
-
253
- If Store_Array(k) = Buf(i, 5) Then
254
-
255
- d_Flag = False
256
-
257
- End If
258
-
259
- Next
260
-
261
-
262
-
263
- If d_Flag Then 'フラグが立っていたら
264
-
265
- Result(j, 5) = Result(j, 5) & "/" & Buf(i, 5)
266
-
267
- End If
268
-
269
-
270
-
271
-
272
-
273
- End Sub
274
-
275
-
276
-
277
-
278
-
279
-
280
-
281
-
282
130
 
283
131
  ```
284
132
 

3

質問タイトルの内容を修正

2019/03/17 10:45

投稿

chanken
chanken

スコア12

test CHANGED
@@ -1 +1 @@
1
- 任意に選択判定列の重複を削除し、まとめたい(写真とコード参照)
1
+ 判定という文字を(ABCDEG)の上に任意の場所入力判定列の重複している行をまとめたい(写真とコード参照)
test CHANGED
File without changes

2

質問タイトルの内容を修正

2019/03/14 11:31

投稿

chanken
chanken

スコア12

test CHANGED
@@ -1 +1 @@
1
- 任意判定列を選択ケースバイケースで処理できるようにしたい!
1
+ 任意に選択した判定列の重複削除、まとめたい!(写真とコード参照)
test CHANGED
@@ -14,13 +14,15 @@
14
14
 
15
15
 
16
16
 
17
+
18
+
17
- ー今回実装したいことー
19
+ **ー今回実装したいことー(処理パターンは63通りコンビネーションより 6C1,6C2,6C3,6C4,6C5,6C6の合計)**
18
-
20
+
19
- 任意の列(A,B,C,D,E,F,G,AB, AC,AD,AE,AG,ABC,ABD,,,,,,,,etc ,,ABCD,ABCDE,ABCDG,,,,,,,ABCDE..,etc)を指定し、判定列の重複部分は1つにまとめ、そうでない部分はスラッシュでまとめるというし処理を行いたいです。。。。。
21
+ 本題は任意の列(A,B,C,D,E,F,G,AB, AC,AD,AEGH,など)を指定し、判定列の重複部分は1つにまとめ、そうでない部分写真の左からみはスラッシュでまとめるというし処理を行いたいです。。。。。
20
-
21
-
22
-
22
+
23
+
24
+
23
- これらの任意の列(A,B,C,D,E,F,G,AB,ABC, ABCD,ABCDE,ABCDEG)別にちまちまコードを書いていくしかないんでしょうか?
25
+ これらの任意の列の63パターンごとにちまちまコードを書いていくしかないんでしょうか?
24
26
 
25
27
 
26
28
 

1

質問内容

2019/03/14 06:11

投稿

chanken
chanken

スコア12

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ー今回実装したいことー
18
18
 
19
- 任意の列(A,B,C,D,E,F,G,AB,ABC, ABCD,ABCDE,ABCDEG)を指定し、判定列の重複部分は1つにまとめ、そうでない部分はスラッシュでまとめるというし処理を行いたいです。。。。。
19
+ 任意の列(A,B,C,D,E,F,G,AB, AC,AD,AE,AG,ABC,ABD,,,,,,,,etc ,,ABCD,ABCDE,ABCDG,,,,,,,ABCDE..,etc)を指定し、判定列の重複部分は1つにまとめ、そうでない部分はスラッシュでまとめるというし処理を行いたいです。。。。。
20
20
 
21
21
 
22
22