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

回答編集履歴

1

工数処理を別のサブルーチンへもっていく処理を追記

2020/09/21 03:35

投稿

tomiieee
tomiieee

スコア27

answer CHANGED
@@ -9,4 +9,81 @@
9
9
  以下で動作しますでしょうか?
10
10
  ```VBA
11
11
  If Cells(n, 3) = "" Then
12
+ ```
13
+
14
+ **追記**
15
+ 工数の処理部分を別のサブルーチンに持って行ったほうが良さそうです。
16
+
17
+ ```VBA
18
+ '担当者が空白の時スキップする
19
+ If Cells(n, 3) = " " Then
20
+ n = n + 1
21
+ End If
22
+
23
+ '工数
24
+ 'ここから・・・
25
+ wsSet.Cells(lngRowsNo, 4).Value = .Cells(n, 5).Value
26
+
27
+ wsSet.Cells(lngRowsNo, 5).Value = .Cells(n, 8).Value
28
+
29
+ wsSet.Cells(lngRowsNo, 6).Value = .Cells(n, 11).Value
30
+
31
+ wsSet.Cells(lngRowsNo, 7).Value = .Cells(n, 14).Value
32
+
33
+ wsSet.Cells(lngRowsNo, 8).Value = .Cells(n, 17).Value
34
+
35
+ wsSet.Cells(lngRowsNo, 9).Value = .Cells(n, 20).Value
36
+
37
+ wsSet.Cells(lngRowsNo, 10).Value = .Cells(n, 23).Value
38
+
39
+ wsSet.Cells(lngRowsNo, 11).Value = .Cells(n, 26).Value
40
+
41
+ wsSet.Cells(lngRowsNo, 12).Value = .Cells(n, 29).Value
42
+
43
+ wsSet.Cells(lngRowsNo, 13).Value = .Cells(n, 32).Value
44
+ 'ここまでを別のサブルーチンに持ってく。
45
+
46
+ '1行下へ
47
+ lngRowsNo = lngRowsNo + 1
48
+
49
+ Next n
50
+ ```
51
+
52
+ 以下を試してみてください。
53
+ ```VBA
54
+ '担当者が空白でなければ、工数処理を呼ぶ。
55
+ If Cells(n, 3) <> "" Then
56
+ Call 工数処理(wsSet, lngRowsNo, n)
57
+ End If
58
+
59
+ '1行下へ
60
+ lngRowsNo = lngRowsNo + 1
61
+
62
+ Next n
63
+
64
+ End Sub
65
+
66
+ '例えば、「工数処理」という名前でサブルーチンを作成する。
67
+ Sub 工数処理(wsSet As Worksheet, lngRowsNo As Long, n As Long)
68
+ wsSet.Cells(lngRowsNo, 4).Value = .Cells(n, 5).Value
69
+
70
+ wsSet.Cells(lngRowsNo, 5).Value = .Cells(n, 8).Value
71
+
72
+ wsSet.Cells(lngRowsNo, 6).Value = .Cells(n, 11).Value
73
+
74
+ wsSet.Cells(lngRowsNo, 7).Value = .Cells(n, 14).Value
75
+
76
+ wsSet.Cells(lngRowsNo, 8).Value = .Cells(n, 17).Value
77
+
78
+ wsSet.Cells(lngRowsNo, 9).Value = .Cells(n, 20).Value
79
+
80
+ wsSet.Cells(lngRowsNo, 10).Value = .Cells(n, 23).Value
81
+
82
+ wsSet.Cells(lngRowsNo, 11).Value = .Cells(n, 26).Value
83
+
84
+ wsSet.Cells(lngRowsNo, 12).Value = .Cells(n, 29).Value
85
+
86
+ wsSet.Cells(lngRowsNo, 13).Value = .Cells(n, 32).Value
87
+
88
+ End Sub
12
89
  ```