質問編集履歴
4
質問タイトルの内容を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
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
質問タイトルの内容を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
任意に
|
1
|
+
判定という文字を(ABCDEG)の上に任意の場所に入力し、判定列の重複している行をまとめたい。(写真とコード参照)
|
test
CHANGED
File without changes
|
2
質問タイトルの内容を修正
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
|
21
|
+
本題は任意の列(A,B,C,D,E,F,G,AB, AC,AD,AEGH,など)を指定し、判定列の重複部分は1つにまとめ、そうでない部分写真の左からみはスラッシュでまとめるというし処理を行いたいです。。。。。
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
|
23
|
+
|
24
|
+
|
23
|
-
これらの任意の列
|
25
|
+
これらの任意の列の63パターンごとにちまちまコードを書いていくしかないんでしょうか?
|
24
26
|
|
25
27
|
|
26
28
|
|
1
質問内容
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,ABCDE
|
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
|
|