質問編集履歴
4
画像追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -105,6 +105,8 @@
|
|
105
105
|
End Sub
|
106
106
|
|
107
107
|
```
|
108
|
+
Calendarのイメージ
|
109
|
+

|
108
110
|
**【やりたいこと③】のソースコード**
|
109
111
|
```
|
110
112
|
Sub 値に変換()
|
3
質問内容の詳細を追記。画像追加。
title
CHANGED
File without changes
|
body
CHANGED
@@ -19,13 +19,36 @@
|
|
19
19
|
ある特定の文字列(例えば"小計")がある行まで処理が進んだら、
|
20
20
|
その行以降はシート②に転記せず終了する。
|
21
21
|
|
22
|
+

|
23
|
+
|
24
|
+
文章で表しにくかったので、画像を。。。
|
25
|
+
例えば、品目が「バナナ」で、2行目はA列からG列まで値が入っているので、
|
26
|
+
これは2行目を全てシート②へ転記。
|
27
|
+
3行目はA列からC列はブランク⇒C列からG列まで値が入っているので、
|
28
|
+
このC列からG列までの値を上記で転記した行の下に追記。
|
29
|
+
7行目まで、同じ処理をしたい。
|
30
|
+
D列の<小計>がある行は転記不要なので、この"<小計>"の文字列に来たら、
|
31
|
+
転記せず、次の処理に進みたい。
|
32
|
+
|
33
|
+
次の処理とは、
|
34
|
+
品目が「マンゴー」で、
|
35
|
+
10行目はA列からG列まで値が入っているので、
|
36
|
+
これは10行目を全てシート②へ転記。
|
37
|
+
11行目から13行目まではA列からC列はブランク⇒C列からG列まで値が入っているので、このC列からG列までの値を上記で転記した行の下に追記。
|
38
|
+
*「バナナ」の時と同じ要領で行いたいです。
|
39
|
+
|
40
|
+
シート②の貼付先シートの完成図は
|
41
|
+
以下の画像のようになるように処理を行いたいです(可能でしたら)
|
42
|
+

|
43
|
+
|
22
44
|
**【やりたいこと②】**
|
23
45
|
シート①にある、該当するセルの値(文字列)を、シート②に値として転記したいが、
|
24
46
|
そのシート①にあるセルの値(文字列)は、行・列ばらばらに入っているので、
|
25
47
|
繰り返し処理がうまく書けない。
|
26
48
|
色々やっても自分で書いたソースでは、値を抽出できなかったので、
|
27
49
|
恥ずかしながら、この処理は「マクロの記録」で行ったものです。単純にシート①にある必要な値をコピペでシート②に貼り付けした作業です。
|
28
|
-
|
50
|
+
|
51
|
+
|
29
52
|
**【やりたいこと③】**
|
30
53
|
シート①のあるセルに入っている値を、シート②の所定の箇所に転記した際、
|
31
54
|
数字が一桁なら、頭に一つ0をつけて表示したい。その時この抽出した値の
|
@@ -103,7 +126,10 @@
|
|
103
126
|
```
|
104
127
|
**Sub 【やりたいこと③ 転記用データ() ⇒頭に"WK"の文字列をつけるソースコード】**
|
105
128
|
|
129
|
+
```
|
130
|
+
Sub 転記用データ()
|
131
|
+
|
106
|
-
|
132
|
+
ActiveCell.FormulaR1C1 = "=IF(RC[-1]<>"""",""WK"" & RC[-1],"""")"
|
107
133
|
Range("G3").Select
|
108
134
|
Selection.AutoFill Destination:=Range("G3:G74")
|
109
135
|
Range("G3:G74").Select
|
@@ -113,8 +139,20 @@
|
|
113
139
|
|
114
140
|
End Sub
|
115
141
|
```
|
142
|
+
【やりたいこと②と③のイメージ】
|
143
|
+

|
144
|
+
赤枠内の値(文字列として)、別シートに転記したい。
|
145
|
+
*下記の自分のソースコードで実行すると、文字列として抽出したいのに、
|
146
|
+
計算式が入った状態でしか抽出できず、以降の作業でエラーを出さないために、
|
147
|
+
値で取るようにと言われています。なので、自分で考えたのが、次の画像に
|
148
|
+
あるように、隣の列で文字列に変換する処理です。
|
149
|
+
この文字列に変換した値を、さらに隣の列"DB用"に、
|
150
|
+
値が一桁の数字なら頭に0をつけて見た目を揃え、更にその文字列の頭に
|
151
|
+
"WK"を付ける処理を行いたいです。
|
116
152
|
|
153
|
+

|
117
154
|
|
155
|
+
|
118
156
|
宜しくお願い致します。
|
119
157
|
teratailに登録したばかりで、質問文がわかりににく、
|
120
158
|
申し訳ございません。
|
2
タイトル修正、本文修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
【Excel VBA】
|
1
|
+
【Excel VBA】繰り返し処理と文字列の転記について
|
body
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
どなたかご教示いただけると幸いです。宜しくお願い致します。
|
10
10
|
|
11
11
|
|
12
|
-
【やりたいこと①】
|
12
|
+
**【やりたいこと①】**
|
13
13
|
シート①にあるデータを、必要な項目だけを抜粋して、シート②に転記したい。
|
14
14
|
この時シート①にあるデータは、毎月行数が変わるので、
|
15
15
|
何行目まで必要になるか不明。
|
@@ -19,14 +19,14 @@
|
|
19
19
|
ある特定の文字列(例えば"小計")がある行まで処理が進んだら、
|
20
20
|
その行以降はシート②に転記せず終了する。
|
21
21
|
|
22
|
-
【やりたいこと②】
|
22
|
+
**【やりたいこと②】**
|
23
23
|
シート①にある、該当するセルの値(文字列)を、シート②に値として転記したいが、
|
24
24
|
そのシート①にあるセルの値(文字列)は、行・列ばらばらに入っているので、
|
25
25
|
繰り返し処理がうまく書けない。
|
26
26
|
色々やっても自分で書いたソースでは、値を抽出できなかったので、
|
27
27
|
恥ずかしながら、この処理は「マクロの記録」で行ったものです。単純にシート①にある必要な値をコピペでシート②に貼り付けした作業です。
|
28
28
|
で
|
29
|
-
【やりたいこと③】
|
29
|
+
**【やりたいこと③】**
|
30
30
|
シート①のあるセルに入っている値を、シート②の所定の箇所に転記した際、
|
31
31
|
数字が一桁なら、頭に一つ0をつけて表示したい。その時この抽出した値の
|
32
32
|
先頭に"WK"という文字列をつけて、"WK01"、"WK02"~"WK15"などと表示させたい。
|
@@ -38,9 +38,9 @@
|
|
38
38
|
と思い、一つの処理に対して、一つのソースコードを書いています。
|
39
39
|
|
40
40
|
### 該当のソースコード
|
41
|
-
【やりたいこと①のソースコード】
|
41
|
+
**【やりたいこと①のソースコード】**
|
42
|
+
```
|
42
43
|
Sub Weeklyシート加工()
|
43
|
-
|
44
44
|
Dim S1 As Worksheet, S2 As Worksheet
|
45
45
|
|
46
46
|
'S1は"Weekly"シート
|
@@ -53,6 +53,7 @@
|
|
53
53
|
S1.Range(S1.Cells(5, 2), S1.Cells(5, 9)).Copy S2.Range(S2.Cells(2, 3), S2.Cells(2, 10))
|
54
54
|
|
55
55
|
End Sub
|
56
|
+
```
|
56
57
|
|
57
58
|
⇒S1.Range(S1.Cells(5, 2), S1.Cells(5, 9)).Copy S2.Range(S2.Cells(2, 3), S2.Cells(2, 10))
|
58
59
|
この部分を繰り返しすればいいのかも知れませんが、loop処理方法が分かりません。シートとセルの指定で混乱してしまい、指定の行まで順に処理を進め、上記に記載した、「B列からD列の値がブランクでも、E列以降に値が入っていたら、
|
@@ -62,7 +63,8 @@
|
|
62
63
|
その行以降はシート②に転記せず終了する。」
|
63
64
|
という処理をしたいです。
|
64
65
|
|
65
|
-
【やりたいこと②】のソースコード
|
66
|
+
**【やりたいこと②】のソースコード**
|
67
|
+
```
|
66
68
|
Sub WK抽出()
|
67
69
|
'
|
68
70
|
' CalendarからWK_No.を抽出
|
@@ -79,7 +81,9 @@
|
|
79
81
|
|
80
82
|
End Sub
|
81
83
|
|
84
|
+
```
|
82
|
-
【やりたいこと③】のソースコード
|
85
|
+
**【やりたいこと③】のソースコード**
|
86
|
+
```
|
83
87
|
Sub 値に変換()
|
84
88
|
|
85
89
|
Range("E3:E74").Select
|
@@ -87,7 +91,6 @@
|
|
87
91
|
|
88
92
|
Range("F3:F74").Value = Range("E3:E74").Value
|
89
93
|
|
90
|
-
|
91
94
|
Selection.Copy
|
92
95
|
ActiveWindow.SmallScroll Down:=-72
|
93
96
|
Range("F3").Select
|
@@ -95,22 +98,23 @@
|
|
95
98
|
:=False, Transpose:=False
|
96
99
|
ActiveSheet.Paste
|
97
100
|
Application.CutCopyMode = False
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
+
|
101
102
|
End Sub
|
103
|
+
```
|
102
|
-
Sub 転記用データ() ⇒頭に"WK"の文字列をつけるソースコード
|
104
|
+
**Sub 【やりたいこと③ 転記用データ() ⇒頭に"WK"の文字列をつけるソースコード】**
|
103
105
|
|
104
|
-
|
105
|
-
ActiveCell.FormulaR1C1 = "=IF(RC[-1]<>"""",""WK"" & RC[-1],"""")"
|
106
|
+
``` ActiveCell.FormulaR1C1 = "=IF(RC[-1]<>"""",""WK"" & RC[-1],"""")"
|
106
107
|
Range("G3").Select
|
107
108
|
Selection.AutoFill Destination:=Range("G3:G74")
|
108
109
|
Range("G3:G74").Select
|
109
110
|
ActiveWindow.SmallScroll Down:=60
|
110
111
|
|
111
112
|
Range("G3:G74").Value = Range("G3:G74").Value
|
112
|
-
|
113
|
+
|
113
114
|
End Sub
|
115
|
+
```
|
114
116
|
|
115
117
|
|
116
|
-
|
118
|
+
宜しくお願い致します。
|
119
|
+
teratailに登録したばかりで、質問文がわかりににく、
|
120
|
+
申し訳ございません。
|
1
文法の修正および追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -31,14 +31,12 @@
|
|
31
31
|
数字が一桁なら、頭に一つ0をつけて表示したい。その時この抽出した値の
|
32
32
|
先頭に"WK"という文字列をつけて、"WK01"、"WK02"~"WK15"などと表示させたい。
|
33
33
|
|
34
|
+
私の書き方が誤っているせいだと思うのですが、
|
35
|
+
一つのプロシージャ内に、まとめて処理を記述すると、
|
34
|
-
|
36
|
+
必ずどちらかが動かず(もしくはエラーが出ました)、
|
37
|
+
処理が進まないので、今はひとまずVBAの基本の基本から手を動かして覚えなくては!
|
38
|
+
と思い、一つの処理に対して、一つのソースコードを書いています。
|
35
39
|
|
36
|
-
### 発生している問題・エラーメッセージ
|
37
|
-
|
38
|
-
```
|
39
|
-
エラーメッセージ
|
40
|
-
```
|
41
|
-
|
42
40
|
### 該当のソースコード
|
43
41
|
【やりたいこと①のソースコード】
|
44
42
|
Sub Weeklyシート加工()
|