teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

追記

2021/07/09 11:39

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  For I = 9 To wb2Row
5
5
  List = .Cells(I, "E").Value
6
6
  If Not dc.Exists(List) Then
7
- dc.Add List, Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H"))
7
+ dc.Add List, Array(.Cells(I, "D"), .Cells(I, "M"), .Cells(I, "H"))
8
8
  End If
9
9
  Next I
10
10
  ```
@@ -13,7 +13,7 @@
13
13
  '後勝ちの場合
14
14
  For I = 9 To wb2Row
15
15
  List = .Cells(I, "E").Value
16
- dc(List) = Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H"))
16
+ dc(List) = Array(.Cells(I, "D"), .Cells(I, "M"), .Cells(I, "H"))
17
17
  Next I
18
18
  ```
19
19
 
@@ -26,11 +26,11 @@
26
26
  For I = 9 To wb2Row
27
27
  List = .Cells(I, "E").Value
28
28
  If Not dc.Exists(List) Then
29
- dc.Add List, Array(Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H")))
29
+ dc.Add List, Array(Array(.Cells(I, "D"), .Cells(I, "M"), .Cells(I, "H")))
30
30
  Else
31
31
  arr = dc(List)
32
32
  ReDim Preserve arr(UBound(arr) + 1)
33
- arr(UBound(arr)) = Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H"))
33
+ arr(UBound(arr)) = Array(.Cells(I, "D"), .Cells(I, "M"), .Cells(I, "H"))
34
34
  dc(List) = arr
35
35
  End If
36
36
 
@@ -76,4 +76,53 @@
76
76
  dc(List) = dc(List) + 1
77
77
  Next I
78
78
 
79
+ ```
80
+ ---
81
+ ```ここに言語を入力
82
+ Sub sample()
83
+ Dim wb1 As Workbook
84
+ Dim wb2 As Workbook
85
+
86
+ Dim ws1 As Worksheet
87
+ Dim ws2 As Worksheet
88
+ Dim ws3 As Worksheet
89
+
90
+ Set ws1 = wb1.Sheets("入力")
91
+ Set ws2 = wb2.Sheets("転記")
92
+
93
+ Dim dc As Scripting.Dictionary
94
+ Set dc = CreateObject("Scripting.Dictionary")
95
+
96
+ Dim inData, inCount
97
+ With ws1
98
+ inData = .Range(.Range("C9"), .Cells.SpecialCells(xlCellTypeLastCell)).Value
99
+ inCount = UBound(inData, 1)
100
+ End With
101
+
102
+ Dim i, k, arr
103
+ For i = 1 To inCount
104
+ k = inData(i, 5)
105
+ arr = Array(inData(i, 4), inData(i, 13), inData(i, 8), inData(i, 9) + inData(i, 10), inData(i, 11), inData(i, 12))
106
+ If Not dc.Exists(k) Then dc.Add k, CreateObject("Scripting.Dictionary")
107
+ dc(k).Add dc(k).Count, arr
108
+ Next
109
+
110
+ Dim j
111
+ j = 10
112
+ For Each k In dc
113
+ wb2.Sheets("転記").Copy After:=Worksheets(Worksheets.Count)
114
+ Set ws3 = wb2.Sheets("転記(2)")
115
+
116
+ With ws3
117
+ .Name = k
118
+ .Range("F4") = k
119
+ For Each arr In dc(k).Items
120
+ .Cells(j, 3).Resize(, 4).Value = Array(arr(0), arr(1), arr(2), arr(3))
121
+ .Cells(j + 1, 3).Resize(, 4).Value = Array(arr(0), arr(1), arr(2), arr(4))
122
+ j = j + 2
123
+ Next
124
+ End With
125
+ Next
126
+ End Sub
127
+
79
128
  ```

4

修正

2021/07/09 11:38

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -70,9 +70,9 @@
70
70
  dc(List) = 10
71
71
  End If
72
72
 
73
- wb2.Sheets(List).Cells(I + dc(List), "C") = .Cells(I, "D").Value
73
+ wb2.Sheets(List).Cells(dc(List), "C") = .Cells(I, "D").Value
74
- wb2.Sheets(List).Cells(I + dc(List), "D") = .Cells(I, "M").Value
74
+ wb2.Sheets(List).Cells(dc(List), "D") = .Cells(I, "M").Value
75
- wb2.Sheets(List).Cells(I + dc(List), "E") = .Cells(I, "H").Value
75
+ wb2.Sheets(List).Cells(dc(List), "E") = .Cells(I, "H").Value
76
76
  dc(List) = dc(List) + 1
77
77
  Next I
78
78
 

3

追記

2021/07/09 08:08

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -57,4 +57,23 @@
57
57
  Next
58
58
  Next L
59
59
 
60
+ ```
61
+ ---
62
+ <再追記>
63
+ ```VBA
64
+ For I = 9 To wb2Row
65
+ List = .Cells(I, "E").Value
66
+ If Not dc.Exists(List) Then
67
+ wb2.Sheets("転記").Copy after:=Worksheets(Worksheets.Count)
68
+ wb2.Sheets("転記(2)").Name = List
69
+ wb2.Sheets(List).Range("F4") = List
70
+ dc(List) = 10
71
+ End If
72
+
73
+ wb2.Sheets(List).Cells(I + dc(List), "C") = .Cells(I, "D").Value
74
+ wb2.Sheets(List).Cells(I + dc(List), "D") = .Cells(I, "M").Value
75
+ wb2.Sheets(List).Cells(I + dc(List), "E") = .Cells(I, "H").Value
76
+ dc(List) = dc(List) + 1
77
+ Next I
78
+
60
79
  ```

2

修正

2021/07/09 07:57

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -19,9 +19,24 @@
19
19
 
20
20
  ---
21
21
  <追記>
22
+ やりたいことを取り違えていたようなので修正。
22
23
 
23
24
  ```VBA
25
+ Dim arr
26
+ For I = 9 To wb2Row
27
+ List = .Cells(I, "E").Value
28
+ If Not dc.Exists(List) Then
29
+ dc.Add List, Array(Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H")))
30
+ Else
31
+ arr = dc(List)
32
+ ReDim Preserve arr(UBound(arr) + 1)
33
+ arr(UBound(arr)) = Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H"))
34
+ dc(List) = arr
35
+ End If
36
+
37
+ Next I
24
38
 
39
+
25
40
  Dim dcKey, dcItem
26
41
 
27
42
  For L = 0 To dc.Count - 1
@@ -29,15 +44,17 @@
29
44
  dcItem = dc.Items(L)
30
45
 
31
46
  wb2.Sheets("転記").copy after:=Worksheets(Worksheets.Count)
32
- wb2.Sheets("転記(2)").Range("F4") = dcKey 'Keyの転記
33
-
34
- '------------------------------------------------------------------------------------
35
- wb2.Sheets("転記(2)").Cells(I + 10, "C") = dcItem(0) 'Item1の転記-No.
36
- wb2.Sheets("転記(2)").Cells(I + 10, "D") = dcItem(1) 'Item2の転記-Code
37
- wb2.Sheets("転記(2)").Cells(I + 10, "E") = dcItem(2) 'Ite3の転記-Name
38
- '------------------------------------------------------------------------------------
39
-
40
47
  wb2.Sheets("転記(2)").Name = dcKey 'Keyの転記
48
+ wb2.Sheets(dcKey).Range("F4") = dcKey 'Keyの転記
49
+
50
+ Dim v, j
51
+ j = 10
52
+ For Each v In dcItem
53
+ wb2.Sheets(dcKey).Cells(I + j, "C") = v(0)
54
+ wb2.Sheets(dcKey).Cells(I + j, "D") = v(1)
55
+ wb2.Sheets(dcKey).Cells(I + j, "E") = v(2)
56
+ j = j + 1
57
+ Next
41
58
  Next L
42
59
 
43
60
  ```

1

追記

2021/07/09 07:50

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -15,4 +15,29 @@
15
15
  List = .Cells(I, "E").Value
16
16
  dc(List) = Array(.Cells(I, "D"), .Cells(I, "M").Cells(I, "H"))
17
17
  Next I
18
+ ```
19
+
20
+ ---
21
+ <追記>
22
+
23
+ ```VBA
24
+
25
+ Dim dcKey, dcItem
26
+
27
+ For L = 0 To dc.Count - 1
28
+ dcKey = dc.Keys(L)
29
+ dcItem = dc.Items(L)
30
+
31
+ wb2.Sheets("転記").copy after:=Worksheets(Worksheets.Count)
32
+ wb2.Sheets("転記(2)").Range("F4") = dcKey 'Keyの転記
33
+
34
+ '------------------------------------------------------------------------------------
35
+ wb2.Sheets("転記(2)").Cells(I + 10, "C") = dcItem(0) 'Item1の転記-No.
36
+ wb2.Sheets("転記(2)").Cells(I + 10, "D") = dcItem(1) 'Item2の転記-Code
37
+ wb2.Sheets("転記(2)").Cells(I + 10, "E") = dcItem(2) 'Ite3の転記-Name
38
+ '------------------------------------------------------------------------------------
39
+
40
+ wb2.Sheets("転記(2)").Name = dcKey 'Keyの転記
41
+ Next L
42
+
18
43
  ```