質問編集履歴

3

現状の式の提示

2019/02/26 05:08

投稿

lq_hm_165912
lq_hm_165912

スコア18

test CHANGED
File without changes
test CHANGED
@@ -109,3 +109,69 @@
109
109
  End Sub
110
110
 
111
111
  ```
112
+
113
+
114
+
115
+ ↓Esc押せば結果がなぜか出てくるコードはこちら↓
116
+
117
+ ```VBA
118
+
119
+
120
+
121
+ Sub 構成反映()
122
+
123
+ Dim Sh1, Sh2 As Worksheet
124
+
125
+ Set Sh1 = ThisWorkbook.Worksheets("集計画面")
126
+
127
+ Set Sh2 = ThisWorkbook.Worksheets("材料構成")
128
+
129
+ '------最終行の取得
130
+
131
+
132
+
133
+ Dim lastrow As Long
134
+
135
+ lastrow = Sh2.Cells(Rows.Count, "A").End(xlUp).Row
136
+
137
+
138
+
139
+ Dim prefRng, cityRng As Range
140
+
141
+ Set prefRng = Range(Sh2.Cells(2, 1), Sh2.Cells(40000, 1))
142
+
143
+
144
+
145
+ Dim workEndR, workTmpR As Long, tmpStr As String
146
+
147
+ workEndR = Sh1.Cells(Rows.Count, 1).End(xlUp).Row
148
+
149
+
150
+
151
+ Dim x As Long
152
+
153
+ Application.ScreenUpdating = False
154
+
155
+
156
+
157
+ For x = 0 To workEndR
158
+
159
+ For workTmpR = 2 To workEndR
160
+
161
+ tmpStr = Sh1.Cells(workTmpR, 10).Value
162
+
163
+ On Error Resume Next
164
+
165
+ Sh1.Cells(workTmpR, 20).Value = Sh2.Cells(Application.WorksheetFunction.Match(tmpStr, prefRng, 0) + 1, 3)
166
+
167
+ Next
168
+
169
+ Next
170
+
171
+ Sh1.Range("T1").Value = "構成"
172
+
173
+
174
+
175
+ End Sub
176
+
177
+ ```

2

説明文の変更

2019/02/26 05:08

投稿

lq_hm_165912
lq_hm_165912

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,16 @@
1
- 以下のが行数が多くなると固まってしまいます。
1
+ 以下のコードが行数が多くなると固まってしまいます。
2
2
 
3
3
  (10万行ほど)
4
4
 
5
5
 
6
6
 
7
- 95行あるリスから一致する項目(4行目)の隣の値をを集計画面の19行目反映す。
7
+ 構成シーのA列と、集計画面のJ列が一致したら、集計画面のT列構成シートのC列を出力のです。
8
8
 
9
- 行数少なとすぐに終わりが、と固ります。
9
+ この構成シートのA列にあたる部分固定されてる他のマクロでは上手く動きしたが、今回は変動有のリストなので最終行まで見ようとしています。
10
10
 
11
+
12
+
11
- 軽くする手段あれば教えください。
13
+ ※最初の変動ないリストに関しは無事動作しました
12
14
 
13
15
 
14
16
 

1

上手く動かないコード

2019/02/26 03:25

投稿

lq_hm_165912
lq_hm_165912

スコア18

test CHANGED
File without changes
test CHANGED
@@ -14,62 +14,96 @@
14
14
 
15
15
  ```VBA
16
16
 
17
- Sub 類別選択()
17
+ Sub 構成反映2()
18
18
 
19
19
 
20
20
 
21
+
22
+
23
+ Dim Sh1, Sh2 As Worksheet
24
+
25
+ Dim rM, rH, rMy, rFirst, rU As Range
26
+
27
+
28
+
21
- '===========================================  項目名振替
29
+ Set Sh1 = ThisWorkbook.Worksheets("集計画面")
30
+
31
+ Set Sh2 = ThisWorkbook.Worksheets("構成")
22
32
 
23
33
 
24
34
 
25
- Dim Sh1, Sh2, Sh3 As Worksheet
35
+ Application.ScreenUpdating = False
26
36
 
27
- Set Sh1 = ThisWorkbook.Worksheets("集計画面")
37
+ Application.Calculation = xlManual
28
38
 
29
- Set Sh2 = ThisWorkbook.Worksheets("リスト用")
39
+
30
40
 
31
-
41
+ '最終行の取得
32
42
 
33
- Dim prefRng, cityRng As Range
43
+ Dim lastrow As Long
34
44
 
45
+ Dim lastrow2 As Long
46
+
47
+ lastrow = Sh1.Cells(Rows.Count, 10).End(xlUp).Row
48
+
49
+ lastrow2 = Sh2.Cells(Rows.Count, 1).End(xlUp).Row
50
+
51
+
52
+
53
+ '検索
54
+
55
+ For Each rM In Sh2.Range("A2:A" & lastrow2)
56
+
35
- Set prefRng = Range(Sh2.Cells(2, 4), Sh2.Cells(95, 4))
57
+ Set rH = Sh1.Range("J2:J" & lastrow)
58
+
59
+ Set rMy = rH.Find(What:=rM.Value)
60
+
61
+
62
+
63
+ If rMy Is Nothing Then
64
+
65
+ Exit For
66
+
67
+ Else
68
+
69
+ Set rFirst = rMy
70
+
71
+ rMy.Offset(, 10).Value = rM.Offset(, 2).Value
72
+
73
+ End If
74
+
75
+ Do
76
+
77
+ Set rMy = rH.FindNext(rMy)
78
+
79
+ If rMy.Address = rFirst.Address Then
80
+
81
+ Exit Do
82
+
83
+ Else
84
+
85
+ rMy.Offset(, 10).Value = rM.Offset(, 2).Value
86
+
87
+ End If
88
+
89
+ Loop
90
+
91
+ Next
36
92
 
37
93
 
38
94
 
39
95
 
40
96
 
41
- Dim workEndR, workTmpR As Long, tmpStr As String
97
+ Sh1.Range("T1").Value = "構成"
42
98
 
99
+
100
+
43
- workEndR = Sh1.Cells(Rows.Count, 4).End(xlUp).Row
101
+ Application.Calculation = xlAutomatic
102
+
103
+ Application.ScreenUpdating = True
44
104
 
45
105
 
46
106
 
47
- Dim x As Long
48
-
49
- Application.ScreenUpdating = False
50
-
51
-
52
-
53
- For x = 0 To workEndR
54
-
55
- For workTmpR = 2 To workEndR
56
-
57
- tmpStr = Sh1.Cells(workTmpR, 4).Value
58
-
59
- On Error Resume Next
60
-
61
- Sh1.Cells(workTmpR, 19).Value = Sh2.Cells(Application.WorksheetFunction.Match(tmpStr, prefRng, 0) + 1, 5)
62
-
63
- Next
64
-
65
- Next
66
-
67
-
68
-
69
- Sh1.Range("S1").Value = "類別名"
70
-
71
107
  End Sub
72
108
 
73
-
74
-
75
109
  ```