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

質問編集履歴

4

画像追加

2019/03/06 07:18

投稿

carrin
carrin

スコア15

title CHANGED
File without changes
body CHANGED
@@ -105,6 +105,8 @@
105
105
  End Sub
106
106
 
107
107
  ```
108
+ Calendarのイメージ
109
+ ![イメージ説明](c959fd2c19d8e069bb2e66d87bd2b0f3.jpeg)
108
110
  **【やりたいこと③】のソースコード**
109
111
  ```
110
112
  Sub 値に変換()

3

質問内容の詳細を追記。画像追加。

2019/03/06 07:18

投稿

carrin
carrin

スコア15

title CHANGED
File without changes
body CHANGED
@@ -19,13 +19,36 @@
19
19
  ある特定の文字列(例えば"小計")がある行まで処理が進んだら、
20
20
  その行以降はシート②に転記せず終了する。
21
21
 
22
+ ![イメージ説明](58c0c210efbba60a2c05af4e71f69861.jpeg)
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
+ ![イメージ説明](957c131adb03695e2fbefc8a3864e5ec.jpeg)
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
- ``` ActiveCell.FormulaR1C1 = "=IF(RC[-1]<>"""",""WK"" & RC[-1],"""")"
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
+ ![イメージ説明](fbc95c60eb05479a1b306cc1d0210b99.jpeg)
144
+ 赤枠内の値(文字列として)、別シートに転記したい。
145
+ *下記の自分のソースコードで実行すると、文字列として抽出したいのに、
146
+  計算式が入った状態でしか抽出できず、以降の作業でエラーを出さないために、
147
+  値で取るようにと言われています。なので、自分で考えたのが、次の画像に
148
+  あるように、隣の列で文字列に変換する処理です。
149
+  この文字列に変換した値を、さらに隣の列"DB用"に、
150
+  値が一桁の数字なら頭に0をつけて見た目を揃え、更にその文字列の頭に
151
+  "WK"を付ける処理を行いたいです。
116
152
 
153
+ ![イメージ説明](c509dc11110e5e857984e452630b0701.jpeg)
117
154
 
155
+
118
156
  宜しくお願い致します。
119
157
  teratailに登録したばかりで、質問文がわかりににく、
120
158
  申し訳ございません。

2

タイトル修正、本文修正

2019/03/05 07:47

投稿

carrin
carrin

スコア15

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

文法の修正および追記

2019/03/05 06:57

投稿

carrin
carrin

スコア15

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シート加工()