回答編集履歴

4

追記

2019/03/14 12:59

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -99,3 +99,53 @@
99
99
  確認してないけど、提示のデータをコピペしたら、やっぱり空白に見えて空白でないセルになってる?
100
100
 
101
101
  空白セルはジャンプ機能で検索できるので、それで検索してみたらいいかも。
102
+
103
+
104
+
105
+ 読み返してみて、
106
+
107
+
108
+
109
+ > 何か方法があれば知恵を貸していただけると嬉しいです。
110
+
111
+
112
+
113
+ 方法論として、
114
+
115
+
116
+
117
+ 1)項目Gで並び替え
118
+
119
+ 2)項目Dで並び替え
120
+
121
+ 3)項目Dで、キーブレークしているところに集計機能で空白行(実際には小計行)を挿入
122
+
123
+ 4)項目Gのデータの塊毎に順に見て行き、Transepose関数にて1次配列の値を取得しVBAのJoin関数で「/(スラッシュ)」で繋いだ文字列を取得し、そのセル範囲に入力
124
+
125
+ 5)小計機能解除
126
+
127
+ 6)判定と書かれた列を右から順に並び替える
128
+
129
+ 7)判定と書かれた列をキーに集計機能でキーブレーク毎に空白行(小計行)挿入
130
+
131
+ 8)項目D列のデータの塊毎に順に見て行き、Transepose関数にて1次配列の値を取得しVBAのJoin関数で「/(スラッシュ)」で繋いだ文字列を取得し、そのセル範囲に入力
132
+
133
+ 9)最後に重複データの削除機能で重複データ削除
134
+
135
+
136
+
137
+ という手順で、欲しい結果が得られる気がします。
138
+
139
+
140
+
141
+ 並び順が変わってはいけないという事なら、
142
+
143
+ 最初に通し番号を振っておき、
144
+
145
+ 最後にその番号で並び替えをして、用が済んだ通し番号列を削除したらいいかと思います。
146
+
147
+
148
+
149
+ まずはその手順を確立されたら、
150
+
151
+ 質問するポイントが明確になるかと思います。

3

追記

2019/03/14 12:59

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -93,3 +93,9 @@
93
93
  End Function
94
94
 
95
95
  ```
96
+
97
+
98
+
99
+ 確認してないけど、提示のデータをコピペしたら、やっぱり空白に見えて空白でないセルになってる?
100
+
101
+ 空白セルはジャンプ機能で検索できるので、それで検索してみたらいいかも。

2

追記

2019/03/14 12:09

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -13,3 +13,83 @@
13
13
  >63パターンの処理をちまちま書かないで条件処理でうまくスマートに処理を行えないかということです。
14
14
 
15
15
  表の1行目に何か書いてあれば、選択されたと判断するなら、
16
+
17
+
18
+
19
+ こういうことがやりたいのかな?(あんまりよくわかってないですが^^;)
20
+
21
+ 列番号の配列が欲しければ、そういう関数を自作すればいいという話かと。。。
22
+
23
+
24
+
25
+ ```VBA
26
+
27
+ Sub test()
28
+
29
+ Dim rngTable As Range '表のセル範囲
30
+
31
+ Dim flg As Boolean 'フラグが1個も立ってないかのチェック
32
+
33
+ Dim vntIndex() As Variant 'フラグが立っている列番号の配列
34
+
35
+
36
+
37
+ Set rngTable = Worksheets("Sheet2").Range("A1").CurrentRegion
38
+
39
+ flg = GetArrayOfNumbers(rngTable, vntIndex)
40
+
41
+ If flg = False Then Exit Sub
42
+
43
+
44
+
45
+ rngTable.RemoveDuplicates vntIndex
46
+
47
+ End Sub
48
+
49
+
50
+
51
+ Function GetArrayOfNumbers(ByRef Rng As Range, _
52
+
53
+ ByRef ixResult() As Variant) As Boolean
54
+
55
+ Dim rngFlag As Range
56
+
57
+ Dim c As Range
58
+
59
+ Dim i As Long
60
+
61
+
62
+
63
+ i = Rng.Columns.Count
64
+
65
+ ReDim ixResult(0 To i - 1)
66
+
67
+ On Error Resume Next
68
+
69
+ Set rngFlag = Rng.Rows(1).SpecialCells(xlCellTypeConstants)
70
+
71
+ On Error GoTo 0
72
+
73
+ If rngFlag Is Nothing Then Exit Function
74
+
75
+
76
+
77
+ i = 0
78
+
79
+ For Each c In rngFlag.Columns
80
+
81
+ ixResult(i) = c.Column
82
+
83
+ i = i + 1
84
+
85
+ Next
86
+
87
+
88
+
89
+ ReDim Preserve ixResult(0 To i - 1)
90
+
91
+ GetArrayOfNumbers = True
92
+
93
+ End Function
94
+
95
+ ```

1

追記

2019/03/14 11:55

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -7,3 +7,9 @@
7
7
  また、連番の入力も、「連続データ」の入力機能がありますので、そっちを使ってください。
8
8
 
9
9
  僕の実験では連続データ機能を使うのが、他のどの方法よりも、(思いついた方法のなかで)最速でした。
10
+
11
+
12
+
13
+ >63パターンの処理をちまちま書かないで条件処理でうまくスマートに処理を行えないかということです。
14
+
15
+ 表の1行目に何か書いてあれば、選択されたと判断するなら、