回答編集履歴

2

追記

2020/11/05 09:42

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -41,3 +41,105 @@
41
41
  最後の結果が間違いでなければ、どういう手順処理してもよいですよね?
42
42
 
43
43
  なので、一旦シート上のすべてのセルの結合を解除した方が考え方が簡単ですかね?
44
+
45
+
46
+
47
+ ```ExcelVBA
48
+
49
+ '表の成型(不要な行の削除)
50
+
51
+ Sub test()
52
+
53
+ Dim rngTable As Range
54
+
55
+ Dim c As Range
56
+
57
+ Dim a As Range
58
+
59
+ Dim b As Range
60
+
61
+
62
+
63
+ '処理する表のタイトル行を除いたセル範囲の取得
64
+
65
+ With ActiveSheet.Range("A1").CurrentRegion
66
+
67
+ Set rngTable = Intersect(.Cells, .Offset(1))
68
+
69
+ End With
70
+
71
+
72
+
73
+ '1列目と2列目の前処理
74
+
75
+ For Each c In rngTable.Resize(, 2).Columns
76
+
77
+ c.UnMerge 'セルの結合を解除
78
+
79
+ Set a = Nothing '変数の初期化
80
+
81
+ On Error Resume Next
82
+
83
+ Set a = c.SpecialCells(xlCellTypeBlanks) 'ジャンプ機能で空白セル検索
84
+
85
+ On Error GoTo 0
86
+
87
+
88
+
89
+ 'もし、空白セルがあったら
90
+
91
+ If Not a Is Nothing Then
92
+
93
+ '空白範囲毎に繰り返し
94
+
95
+ For Each b In a.Areas
96
+
97
+ 'セル範囲の1行上の値を転記
98
+
99
+ b.Value = b.Cells(0, 1).Value
100
+
101
+ Next
102
+
103
+ End If
104
+
105
+ Next
106
+
107
+
108
+
109
+ '3列目が空白の行を削除
110
+
111
+ On Error Resume Next
112
+
113
+ rngTable.Columns(3).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'ジャンプ機能で空白セル検索
114
+
115
+ On Error GoTo 0
116
+
117
+ End Sub
118
+
119
+ ```
120
+
121
+
122
+
123
+ まずは、こんな感じで成形して、小計機能やピボットテーブルなどの機能で、
124
+
125
+ 小計や総計を計算できるようにしてやります。
126
+
127
+ 元のデータが変わるので、別のシートにでもコピペして作業するとよいかと思います。
128
+
129
+ さらに別のシートにピボットテーブルで集計し、
130
+
131
+ 期待した見た目にならなければ、それの結果をまた加工したらよいかと思います。
132
+
133
+ 中間の作業に使ったシートは、削除してしまえば、
134
+
135
+ マクロを使う人には途中にどんなことをしたかはわからないようになります。
136
+
137
+ もちろん自作することも可能ですが、
138
+
139
+ せっかくエクセルを使っているのですから、
140
+
141
+ エクセルの機能を使うと、自作する労力が減らせ、コードを書く量も減らせます。
142
+
143
+ (エクセルの機能を調べる方に労力がかかるかもしれませんが。)
144
+
145
+ 今回の場合、小計機能を使ってもいいかもしれませんね。

1

追記

2020/11/05 09:42

投稿

mattuwan
mattuwan

スコア2136

test CHANGED
@@ -25,3 +25,19 @@
25
25
  意図通りに変化しているか確認してください。
26
26
 
27
27
  そうすることで問題点が見えてくると思います。
28
+
29
+
30
+
31
+ -----
32
+
33
+ 追記
34
+
35
+
36
+
37
+ 「不要な行を削除したい。」ということを見落としていました。
38
+
39
+ 最終的にマクロで形を整えるのですから、
40
+
41
+ 最後の結果が間違いでなければ、どういう手順処理してもよいですよね?
42
+
43
+ なので、一旦シート上のすべてのセルの結合を解除した方が考え方が簡単ですかね?