質問編集履歴
6
画像の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
現在の売上管理シート↓
|
34
34
|
|
35
|
-
![イメージ説明](
|
35
|
+
![イメージ説明](3673ca0a834b8eaecbc0eebb82cede84.png)
|
36
36
|
|
37
37
|
売上管理シート完成見本↓
|
38
38
|
|
5
コード修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,15 +54,11 @@
|
|
54
54
|
|
55
55
|
Sub Total()
|
56
56
|
|
57
|
-
|
57
|
+
'売上管理のシートにNo、販売日時、商品コード、商品名、単価、販売数、販売額を記入
|
58
|
-
|
59
|
-
Dim k
|
60
58
|
|
61
59
|
Dim lngNo As Long
|
62
60
|
|
63
61
|
Dim strNitiji As String
|
64
|
-
|
65
|
-
Dim varKodoNamePrice As Variant
|
66
62
|
|
67
63
|
strNitiji = Format(Now, "YYYY/MM/DD hh:mm")
|
68
64
|
|
@@ -70,7 +66,9 @@
|
|
70
66
|
|
71
67
|
Dim Arow As Long
|
72
68
|
|
73
|
-
Dim i As Long, j As Long
|
69
|
+
Dim i As Long, j As Long, k As Long
|
70
|
+
|
71
|
+
k = 0
|
74
72
|
|
75
73
|
Dim myDic As Object
|
76
74
|
|
@@ -92,15 +90,13 @@
|
|
92
90
|
|
93
91
|
|
94
92
|
|
95
|
-
|
96
|
-
|
97
|
-
|
93
|
+
With Worksheets("明細")
|
98
94
|
|
99
95
|
For i = 2 To Arow
|
100
96
|
|
101
|
-
|
97
|
+
ProductCode = .Cells(i, 1).Value
|
102
98
|
|
103
|
-
|
99
|
+
If myDic.Exists(ProductCode) = False Then
|
104
100
|
|
105
101
|
ProductName = .Cells(i, 2).Value
|
106
102
|
|
@@ -114,39 +110,49 @@
|
|
114
110
|
|
115
111
|
myDic.Add ProductCode, varArrayItems
|
116
112
|
|
117
|
-
|
113
|
+
End If
|
118
114
|
|
119
115
|
Next
|
120
116
|
|
121
|
-
|
117
|
+
End With
|
122
118
|
|
123
|
-
|
119
|
+
With Worksheets("売上管理")
|
124
120
|
|
125
|
-
|
121
|
+
.Cells(lngEndRow, 2).End(xlUp).Offset(1).Value = strNitiji
|
126
122
|
|
127
|
-
|
123
|
+
For j = 0 To myDic.Count - 1
|
128
124
|
|
129
|
-
|
125
|
+
mykeys = myDic.Keys
|
130
126
|
|
131
|
-
|
127
|
+
myItems = myDic.Items
|
132
128
|
|
133
|
-
|
129
|
+
'販売日時、商品コード、商品名、単価、販売数、販売額を表示する
|
134
130
|
|
135
|
-
|
131
|
+
.Range("A" & j + 2).Value = lngNo + 1
|
136
132
|
|
137
|
-
|
133
|
+
.Range("B" & j + 2).Value = strNitiji
|
138
134
|
|
139
|
-
|
135
|
+
.Range("C" & j + 2).Value = mykeys(j)
|
140
136
|
|
141
|
-
|
137
|
+
.Range("D" & j + 2).Value = myItems(j)(k)
|
142
138
|
|
143
|
-
|
139
|
+
.Range("E" & j + 2).Value = myItems(j)(k + 1)
|
144
140
|
|
145
|
-
|
141
|
+
.Range("F" & j + 2).Value = myItems(j)(k + 2)
|
146
142
|
|
147
|
-
|
143
|
+
.Range("G" & j + 2).Value = myItems(j)(k + 3)
|
148
144
|
|
145
|
+
k = 0
|
146
|
+
|
147
|
+
Next j
|
148
|
+
|
149
|
-
End
|
149
|
+
End With
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
'Dictionaryを初期化
|
154
|
+
|
155
|
+
myDic.RemoveAll
|
150
156
|
|
151
157
|
|
152
158
|
|
4
文変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
Sub Total()
|
56
56
|
|
57
|
-
'売上管理のシートにNo、販売日時、商品コード、商品名、単価、販売数、販売額を記入
|
57
|
+
'売上管理のシートにNo、販売日時、商品コード、商品名、単価、販売数、販売額を記入
|
58
58
|
|
59
59
|
Dim k
|
60
60
|
|
@@ -76,141 +76,79 @@
|
|
76
76
|
|
77
77
|
Dim mykeys, myItems
|
78
78
|
|
79
|
-
Dim
|
79
|
+
Dim varArrayItems As Variant
|
80
80
|
|
81
|
-
|
81
|
+
Dim ProductCode, ProductName, Tanka, Hanbaisuu, Hanbaigaku
|
82
82
|
|
83
|
-
|
83
|
+
'Setステートメントで戻り値をオブジェクト変数に代入する
|
84
84
|
|
85
|
-
|
85
|
+
Set myDic = CreateObject("Scripting.Dictionary")
|
86
86
|
|
87
|
+
|
88
|
+
|
89
|
+
'A列でリストの最終行を調べる
|
90
|
+
|
91
|
+
Arow = Worksheets("明細").Cells(Rows.Count, 1).End(xlUp).Row
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
If myDic.Exists(ProductCode) = False Then
|
98
|
+
|
99
|
+
For i = 2 To Arow
|
100
|
+
|
101
|
+
With Worksheets("明細")
|
102
|
+
|
103
|
+
ProductCode = .Cells(i, 1).Value
|
104
|
+
|
105
|
+
ProductName = .Cells(i, 2).Value
|
106
|
+
|
87
|
-
|
107
|
+
Tanka = .Cells(i, 3).Value
|
108
|
+
|
109
|
+
Hanbaisuu = Application.WorksheetFunction.CountIf(.Range("B:B"), .Cells(i, 2).Value)
|
110
|
+
|
111
|
+
Hanbaigaku = Tanka * Hanbaisuu
|
112
|
+
|
113
|
+
varArrayItems = Array(ProductName, Tanka, Hanbaisuu, Hanbaigaku)
|
114
|
+
|
115
|
+
myDic.Add ProductCode, varArrayItems
|
116
|
+
|
117
|
+
End With
|
118
|
+
|
119
|
+
Next
|
120
|
+
|
121
|
+
With Worksheets("売上管理")
|
88
122
|
|
89
123
|
.Cells(lngEndRow, 2).End(xlUp).Offset(1).Value = strNitiji
|
90
124
|
|
91
|
-
|
125
|
+
For j = 0 To myDic.Count - 1
|
92
126
|
|
127
|
+
mykeys = myDic.Keys
|
128
|
+
|
129
|
+
myItems = myDic.Items
|
130
|
+
|
131
|
+
'キーとデータをセルに表示する
|
132
|
+
|
93
|
-
|
133
|
+
.Range("C" & j + 2).Value = mykeys(j)
|
134
|
+
|
135
|
+
.Range("D" & j + 2).Value = myItems(j)(j)
|
136
|
+
|
137
|
+
.Range("E" & j + 2).Value = myItems(j)(j + 1)
|
138
|
+
|
139
|
+
.Range("F" & j + 2).Value = myItems(j)(j + 2)
|
140
|
+
|
141
|
+
.Range("G" & j + 2).Value = myItems(j)(j + 3)
|
142
|
+
|
143
|
+
Next j
|
144
|
+
|
145
|
+
End With
|
94
146
|
|
95
147
|
|
96
148
|
|
97
|
-
|
149
|
+
End If
|
98
150
|
|
99
|
-
Arow = Worksheets("明細").Cells(Rows.Count, 1).End(xlUp).Row
|
100
151
|
|
101
|
-
|
102
|
-
|
103
|
-
'連想配列、キー重複の時エラーを無視
|
104
|
-
|
105
|
-
On Error Resume Next
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
For i = 2 To Arow
|
110
|
-
|
111
|
-
RangeItems = Range(Worksheets("明細").Cells(i, 2).Value, Worksheets("明細").Cells(i, 3).Value)
|
112
|
-
|
113
|
-
'連想配列、キーとデータを追加する
|
114
|
-
|
115
|
-
myDic.Add Worksheets("明細").Cells(i, 1).Value, RangeItems
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
For j = 0 To myDic.Count - 1
|
122
|
-
|
123
|
-
mykeys = myDic.Keys
|
124
|
-
|
125
|
-
myItems = myDic.RangeItems
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
'キーとデータをセルに表示する
|
130
|
-
|
131
|
-
.Range("C" & j + 2).Value = mykeys(j)
|
132
|
-
|
133
|
-
.Range("D" & j + 2).Value = myItems(i, j)
|
134
|
-
|
135
|
-
Next j
|
136
|
-
|
137
|
-
Next i
|
138
|
-
|
139
|
-
'オブジェクトを解放する
|
140
|
-
|
141
|
-
Set myDic = Nothing
|
142
|
-
|
143
|
-
.Cells(lngEndRow, 6).End(xlUp).Offset(1).Value = Application.WorksheetFunction.CountIfs(.Range("B:B"), .Cells(k, 2).Value, .Range("C:C"), .Cells(k, 3).Value)
|
144
|
-
|
145
|
-
'.Cells(lngEndRow, 7).End(xlUp).Offset(1).Value = .Cells(k, 5).Value * .Cells(k, 6).Value
|
146
|
-
|
147
|
-
Else
|
148
|
-
|
149
|
-
'.Cells(lngEndRow, 1).Offset(1).Value = .Cells(lngEndRow - 1, 1).Value + 1
|
150
|
-
|
151
|
-
.Cells(lngEndRow, 2).End(xlUp).Offset(1).Value = strNitiji
|
152
|
-
|
153
|
-
'Setステートメントで戻り値をオブジェクト変数に代入する
|
154
|
-
|
155
|
-
Set myDic = CreateObject("Scripting.Dictionary")
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
'A列でリストの最終行を調べる
|
160
|
-
|
161
|
-
Arow = Worksheets("明細").Cells(Rows.Count, 1).End(xlUp).Row
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
'連想配列、キー重複の時エラーを無視
|
166
|
-
|
167
|
-
On Error Resume Next
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
For i = 2 To Arow
|
172
|
-
|
173
|
-
RangeItems = Range(Worksheets("明細").Cells(i, 2).Value, Worksheets("明細").Cells(i, 3).Value)
|
174
|
-
|
175
|
-
'連想配列、キーとデータを追加する
|
176
|
-
|
177
|
-
myDic.Add Worksheets("明細").Cells(i, 1).Value, RangeItems
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
For j = 0 To myDic.Count - 1
|
184
|
-
|
185
|
-
mykeys = myDic.Keys
|
186
|
-
|
187
|
-
myItems = myDic.RangeItems
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
'キーとデータをセルに表示する
|
192
|
-
|
193
|
-
.Range("C" & j + 2).Offset.Value = mykeys(j)
|
194
|
-
|
195
|
-
.Range("D" & j + 2).Offset.Value = myItems(i, j)
|
196
|
-
|
197
|
-
Next j
|
198
|
-
|
199
|
-
Next i
|
200
|
-
|
201
|
-
'オブジェクトを解放する
|
202
|
-
|
203
|
-
Set myDic = Nothing
|
204
|
-
|
205
|
-
.Cells(lngEndRow, 6).End(xlUp).Offset(1).Value = Application.WorksheetFunction.CountIfs(.Range("B:B"), .Cells(k, 2).Value, .Range("C:C"), .Cells(k, 3).Value)
|
206
|
-
|
207
|
-
'.Cells(Rows.Count, 7).End(xlUp).Offset(1).Value = .Cells(k, 5).Value * .Cells(k, 6).Value
|
208
|
-
|
209
|
-
End If
|
210
|
-
|
211
|
-
End With
|
212
|
-
|
213
|
-
Next
|
214
152
|
|
215
153
|
End Sub
|
216
154
|
|
3
省略化
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,32 +54,6 @@
|
|
54
54
|
|
55
55
|
Sub Total()
|
56
56
|
|
57
|
-
' --- 各セルのRangeオブジェクトを準備 ---
|
58
|
-
|
59
|
-
Dim objTotalPriceCell As Range
|
60
|
-
|
61
|
-
Dim objPaymentPriceCell As Range
|
62
|
-
|
63
|
-
Dim objChangePriceCell As Range
|
64
|
-
|
65
|
-
With Worksheets("商品登録")
|
66
|
-
|
67
|
-
Set objTotalPriceCell = .Range("F10")
|
68
|
-
|
69
|
-
Set objPaymentPriceCell = .Range("F13")
|
70
|
-
|
71
|
-
Set objChangePriceCell = .Range("F15")
|
72
|
-
|
73
|
-
End With
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
'おつりの計算
|
78
|
-
|
79
|
-
objChangePriceCell = objPaymentPriceCell - objTotalPriceCell
|
80
|
-
|
81
|
-
|
82
|
-
|
83
57
|
'売上管理のシートにNo、販売日時、商品コード、商品名、単価、販売数、販売額を記入
|
84
58
|
|
85
59
|
Dim k
|
2
画像の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -30,6 +30,10 @@
|
|
30
30
|
|
31
31
|
![明細シート](43f772eff6255cad17503cf676863646.png)
|
32
32
|
|
33
|
+
現在の売上管理シート↓
|
34
|
+
|
35
|
+
![イメージ説明](f8648490b3414b426d5e27d0c3d128f4.png)
|
36
|
+
|
33
37
|
売上管理シート完成見本↓
|
34
38
|
|
35
39
|
![売上管理シート](b9cfa39fef8607ff45f732329fcd5a9a.png)
|
1
説明の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,20 +1,26 @@
|
|
1
1
|
### 売上管理シート作成
|
2
2
|
|
3
|
+
現在売上管理シートをを作成していて、連番と重複を1行にまとめるコードをを調べながら書いてる途中です。
|
4
|
+
|
3
|
-
|
5
|
+
下記の項目機能を作成したいのですが、全くわからないので下記の項目が動くコード教えてもらえると幸いです。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
・「No」は1からの連番を振り、1回の会計で1つのNoとする
|
10
|
+
|
11
|
+
・1商品毎1行で表記する(同一会計内において、「No」と「販売日時」は垂直方向でセル結合をする)
|
12
|
+
|
13
|
+
・「販売日時」は「会計」ボタンをを押した時点の日時とし、「YYYY/MM/DD hh:mm」の形式とする
|
14
|
+
|
15
|
+
・価格を表示する部分は「¥9,999(¥は半角文字)」の形式とし、数字は整数表記とする
|
16
|
+
|
17
|
+
・「販売額」は [単価×販売数]で計算する
|
4
18
|
|
5
19
|
|
6
20
|
|
7
21
|
会計ボタンを押すと、明細シートのA1セル「商品コード」B1セル「商品名」C1セル「単価」の下に情報が記入された後に、売上管理シートに「No」「販売日時」「商品コード」「商品名」「単価」「販売数」「販売額」データを反映したいです。
|
8
22
|
|
9
|
-
|
23
|
+
|
10
|
-
|
11
|
-
・1商品毎1行で表記する(同一会計内において、「No」と「販売日時」は垂直方向でセル結合をする)
|
12
|
-
|
13
|
-
・「販売日時」は「会計」ボタンをを押した時点の日時とし、「YYYY/MM/DD hh:mm」の形式とする
|
14
|
-
|
15
|
-
・価格を表示する部分は「¥9,999(¥は半角文字)」の形式とし、数字は整数表記とする
|
16
|
-
|
17
|
-
・「販売額」は [単価×販売数]で計算する
|
18
24
|
|
19
25
|
削除ボタンがあるので、会計ボタンを押した後は明細シートの情報を消します。
|
20
26
|
|
@@ -68,6 +74,10 @@
|
|
68
74
|
|
69
75
|
objChangePriceCell = objPaymentPriceCell - objTotalPriceCell
|
70
76
|
|
77
|
+
|
78
|
+
|
79
|
+
'売上管理のシートにNo、販売日時、商品コード、商品名、単価、販売数、販売額を記入
|
80
|
+
|
71
81
|
Dim k
|
72
82
|
|
73
83
|
Dim lngNo As Long
|