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

質問編集履歴

8

タイトルの変更

2016/08/03 08:50

投稿

riorio
riorio

スコア11

title CHANGED
@@ -1,1 +1,1 @@
1
- マクロ VB データ一覧表を元に別のシートにそれぞれの内容をコピーする方法
1
+ マクロ VB データ一覧表を元に別のシートにそれぞれの内容をコピーまたは複写する方法
body CHANGED
File without changes

7

分からない点についてさらに追記

2016/08/03 08:50

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -107,7 +107,7 @@
107
107
  エクセルは2013を利用しています。
108
108
  よろしくお願いいたします。
109
109
 
110
- (追記)
110
+ (追記1-1)
111
111
  たびたび申し訳ございません。
112
112
  こちらのマクロで試してみたところ、うまくコピペすることができました。
113
113
  このように一個一個分けていかないとだめなのでしょうか?
@@ -124,4 +124,104 @@
124
124
  Range("B5").Select
125
125
  ActiveSheet.Paste
126
126
  End Sub
127
- ```
127
+ ```
128
+
129
+ ###追記-その2
130
+ あともう少しで目指しているマクロができそうなのですが、
131
+ またもやわからない部分があるため、追記させてください。
132
+
133
+ 最初に提示させていただいた目標と多少変わったのですが、
134
+ 「データ一覧」とその他のシートはこのように変更となっております。
135
+
136
+ ![イメージ説明](fc11e98768d813d436215715f5acbc77.png)
137
+
138
+ 「データ一覧」において、略称に対して国名が定義されているものは国名でシートが作成されており、
139
+ 国名が定義されていないものは略称のままでシートが作成されています。
140
+
141
+ さらに、略称に対してはハイパーリンクを設定し、
142
+ 略称と連動しているシートに飛べるようになっています。
143
+
144
+ 最初は、処理の中でIf文を使って、「略称に対して国名がある場合は国名の付いたシートに飛んで値を出力。そうでないものは略称のシートに飛んで値を出力」ということを行っていました。
145
+ ```lang-VB
146
+ Sub for文_別のシートに値を出力_その1()
147
+ ' 「データ一覧」シートの「略称」の値を上から順番に取得して、
148
+ ' それぞれの略称名と一致するシートに国名と備考を出力
149
+ Dim 略称 As Range
150
+ Dim 略称取得用 As String
151
+ Dim 国名 As String
152
+ For Each 略称 In Worksheets("データ一覧").Range("B4:B8")
153
+ ' 国名が記述されていない場合
154
+ If 略称.Offset(0, -1).Value = 0 Then
155
+ ' String型の変数「略称取得用」にRange型の変数「略称」を代入
156
+ ' これにより「略称」と一致する名前を持つシートの選択が可能となる
157
+ 略称取得用 = 略称
158
+ With Worksheets(略称取得用)
159
+ .Range("B5") = 略称.Offset(0, -1).Value
160
+ .Range("D5") = 略称.Offset(0, 1).Value
161
+ End With
162
+ ' 国名が記述されている場合
163
+ Else
164
+ 国名 = 略称.Offset(0, -1)
165
+ With Worksheets(国名)
166
+ .Range("B5") = 略称.Offset(0, -1).Value
167
+ .Range("D5") = 略称.Offset(0, 1).Value
168
+ End With
169
+ End If
170
+ Next 略称
171
+ End Sub
172
+ ```
173
+ ですが、ハイパーリンクが設定されていることからもっと簡単に「リンク設定先のシートに値を出力する」
174
+ というようにできないか検証した結果、以下のようなマクロになりました。
175
+ ```lang-VB
176
+ Sub for文_別のシートに値を出力_その2()
177
+ ' ハイパーリンク先を取得してそのシートに「データ一覧」の「国名」と「備考」を出力
178
+ ' "Withステートメント"を使って簡略化
179
+ Dim 略称 As Range
180
+ For Each 略称 In Worksheets("データ一覧").Range("B4:B8")
181
+ 略称.Hyperlinks(1).Follow
182
+ With ActiveSheet
183
+ .Range("B5") = 略称.Offset(0, -1).Value
184
+ .Range("D5") = 略称.Offset(0, 1).Value
185
+ End With
186
+ Next 略称
187
+ End Sub
188
+ ```
189
+ これによりやりたいことはほぼ実現できたのですが、
190
+ 現在の状況としてはセルの範囲を固定しています。
191
+
192
+ これを「値のある範囲まで」"For Each文"で検索するにはどのようにしたらよろしいでしょうか?
193
+
194
+ 結果としては【B4~B8】までの略称が入っているところまでということで同じになるとは思うのですが、
195
+ 今後データが追加された際、そのたびにマクロの適用される範囲を修正する必要があるため、
196
+ ここを動的に処理してくれるようにしたいです。
197
+
198
+ [参考①](http://excel-ubara.com/excelvba4/EXCEL257.html)
199
+ [参考②](http://www.start-macro.com/55/w/s029.html)
200
+ [参考③](http://oshiete.goo.ne.jp/qa/3243933.html)
201
+ [参考④](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13103630668)
202
+
203
+ これらを参考にマクロを以下のように書き換えてみたのですが、
204
+ こうすると[略称.Hyperlinks(1).Follow]の位置で
205
+ 「インデックスが有効範囲にありません」とエラーが起きてしまいます。
206
+ ```lang-VB
207
+ Sub for文を使った値の取得()
208
+ ' ハイパーリンク先を取得してそのシートに「データ一覧」の「国名」と「備考」を出力
209
+ ' "Withステートメント"を使って簡略化
210
+ Dim 略称 As Range
211
+ ' セルの範囲を値のある範囲までとしたい
212
+ For Each 略称 In Worksheets("データ一覧").Range("B4", Cells(Rows.Count, 1).End(xlUp))
213
+ 略称.Hyperlinks(1).Follow
214
+ With ActiveSheet
215
+ .Range("B5") = 略称.Offset(0, -1).Value
216
+ .Range("D5") = 略称.Offset(0, 1).Value
217
+ End With
218
+ Next 略称
219
+ End Sub
220
+ ```
221
+ デバッグを行うと[Cells(Rows.Count, 1)]のところが[Rows.Count=1048576]で、
222
+ [End(xlUp)]が[xlUp=-4162]となっているようで、明らかに値があるところ以外を見てしまっています。
223
+
224
+ そのため上にあげたエラーが出てしまっているのかと思いますが、
225
+ どのようにして解決したらよろしいでしょうか?
226
+
227
+ よろしくお願いいたします。

6

追記修正

2016/08/03 04:52

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -108,5 +108,20 @@
108
108
  よろしくお願いいたします。
109
109
 
110
110
  (追記)
111
- 申し訳ございません。
111
+ たびたび申し訳ございません。
112
- 先ほどこちらに追記していたマクロ内容間違えため取り消しました。
112
+ こちらマクロで試しところ、うくコピペすることができました。
113
+ このように一個一個分けていかないとだめなのでしょうか?
114
+
115
+ ```lang-VB
116
+ Sub セルコピペ_その2()
117
+ '
118
+ ' セルをコピーして別のシートに貼り付け
119
+ '
120
+ Worksheets("データ一覧").Select
121
+ Range("A4").Select
122
+ Selection.Copy
123
+ Worksheets("USA").Select
124
+ Range("B5").Select
125
+ ActiveSheet.Paste
126
+ End Sub
127
+ ```

5

追記間違え

2016/08/02 04:44

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -108,17 +108,5 @@
108
108
  よろしくお願いいたします。
109
109
 
110
110
  (追記)
111
- たびたび申し訳ございません。
111
+ 申し訳ございません。
112
- こちらマクロで試しところコピペがうくいきました。
112
+ 先ほどこちらに追記していたマクロ内容間違えていため取り消しました。
113
- こんなにまどろっこしい形にしないとだめなのでしょうか?
114
- ```lang-VB
115
- Sub セルコピー貼り付け_その1()
116
- ' ワークシートの1つのセルの値を
117
- ' 別のシートの別のセルにコピー貼り付け
118
- '
119
- Worksheets("データ一覧").Range("A4").Select
120
- Selection.Copy
121
- Sheets("USA").Select
122
- ActiveSheet.Paste
123
- End Sub
124
- ```

4

追記

2016/08/02 04:12

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -105,4 +105,20 @@
105
105
  エラー内容は「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません」、「セルコピー貼り付け_その2()」となっています。
106
106
 
107
107
  エクセルは2013を利用しています。
108
- よろしくお願いいたします。
108
+ よろしくお願いいたします。
109
+
110
+ (追記)
111
+ たびたび申し訳ございません。
112
+ こちらのマクロで試したところコピペがうまくいきました。
113
+ こんなにまどろっこしい形にしないとだめなのでしょうか?
114
+ ```lang-VB
115
+ Sub セルコピー貼り付け_その1()
116
+ ' ワークシートの1つのセルの値を
117
+ ' 別のシートの別のセルにコピー貼り付け
118
+ '
119
+ Worksheets("データ一覧").Range("A4").Select
120
+ Selection.Copy
121
+ Sheets("USA").Select
122
+ ActiveSheet.Paste
123
+ End Sub
124
+ ```

3

追記

2016/08/02 03:00

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -104,4 +104,5 @@
104
104
  ちなみに'Paste'メソッドをつけなくても貼り付けできるという記事を[こちら](http://www.atmarkit.co.jp/ait/articles/1402/24/news108_2.html)で見たのですが、これも同じくエラーが出ています。
105
105
  エラー内容は「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません」、「セルコピー貼り付け_その2()」となっています。
106
106
 
107
+ エクセルは2013を利用しています。
107
108
  よろしくお願いいたします。

2

追記の記述

2016/08/02 02:53

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -65,4 +65,43 @@
65
65
 
66
66
  エクセルもろくに使いこなせない中、マクロを使わなければならなくなり勉強しているのですが、
67
67
  何をどのように進めていけばよいのか分からず悩んでいます。
68
- 分からないことだらけで非常に申し訳ないのですが、よろしくお願いいたします。
68
+ 分からないことだらけで非常に申し訳ないのですが、よろしくお願いいたします。
69
+
70
+ ###追記-その1
71
+ 皆様ご回答いただきありがとうございます。
72
+
73
+ 昨日に引き続きマクロを勉強しております。
74
+ 皆様が教えてくださったおかげで完成までのイメージは掴むことができたのですが、
75
+ やはり1つ1つできることからやっていってみようと思い、
76
+ 基本的なところから勉強をやり直しています。
77
+
78
+ そして今、1つのシートのセルの値をコピーして別のシートに貼り付ける
79
+ ということを試しているのですが、調べたとおりにやってみてもエラーが出てしまい
80
+ うまくいきません。
81
+ 何がいけないのかお力添えいただけますでしょうか?
82
+
83
+ ```lang-VB
84
+ Sub セルコピー貼り付け_その1()
85
+ ' ワークシートの1つのセルの値をコピーして
86
+ ' 同じシートの別のセルに貼り付ける場合
87
+ '
88
+ Worksheets("データ一覧").Range("B4").Copy
89
+ ActiveSheet.Range("B11").Paste
90
+ End Sub
91
+
92
+ ```
93
+
94
+ ```lang-VB
95
+ Sub セルコピー貼り付け_その2()
96
+ ' ワークシートの1つのセルの値をコピーして
97
+ ' 別のシートのセルに貼り付ける場合
98
+ '
99
+ Worksheets("データ一覧").Range("B4").Copy
100
+ Worksheets("USA").Range("B11").Paste
101
+ End Sub
102
+
103
+ ```
104
+ ちなみに'Paste'メソッドをつけなくても貼り付けできるという記事を[こちら](http://www.atmarkit.co.jp/ait/articles/1402/24/news108_2.html)で見たのですが、これも同じくエラーが出ています。
105
+ エラー内容は「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません」、「セルコピー貼り付け_その2()」となっています。
106
+
107
+ よろしくお願いいたします。

1

画像の誤りを修正

2016/08/02 02:49

投稿

riorio
riorio

スコア11

title CHANGED
File without changes
body CHANGED
@@ -5,11 +5,11 @@
5
5
  ###前提・実現したいこと
6
6
  1、現在の状況としては「データ一覧」というデータの一覧(国名)を表にしたシートがあり、
7
7
  以下のように「国名」、「略称」、「備考」のデータがあります。
8
- ![イメージ説明](4cefdc903f0caabcc499006ee5a1645f.png)
8
+ ![イメージ説明](4f447f5adcacc880366b1e08a5363c55.png)
9
9
 
10
10
  2、そしてこの表の略称と一致するシートがあり、
11
11
  それぞれ以下のようなフォーマットが用意されています。
12
- ![イメージ説明](7553337de754e860e597d7c2d4389649.png)
12
+ ![イメージ説明](29d6be083acbe307210a60191ea11258.png)
13
13
  (※実際に作りたいデータでは、一覧データと同じフォーマットではなく、
14
14
  もう少し詳細内容が追加されています)
15
15
 
@@ -17,7 +17,7 @@
17
17
  それに対応するシートのフォーマットにも同じように「国名」と「備考」が表示されるようにしたいということです。
18
18
  (例)略称が[USJ]の場合
19
19
  ⇒[USJ]シートの「国名」に「アメリカ」、「備考」に「留学した」
20
- ![イメージ説明](4b2528fa794369f84886e168fde1408d.png)
20
+ ![イメージ説明](e166abd9e6778df6c90267585a652a45.png)
21
21
  (例)略称が[CAN]の場合
22
22
  ⇒[CAN]シートの「国名」に「カナダ」、「備考」は空
23
23
  ![イメージ説明](03515c20775215a3c665a0b51fcbe011.png)
@@ -60,10 +60,9 @@
60
60
  Next 略称
61
61
  End Sub
62
62
  ```
63
- ![イメージ説明](c25e51acac5ac53abc4f25776c87f363.png)
63
+ ![イメージ説明](9a0fea69d7af33a5b73128f7c804e5e1.png)
64
64
 
65
65
 
66
-
67
66
  エクセルもろくに使いこなせない中、マクロを使わなければならなくなり勉強しているのですが、
68
67
  何をどのように進めていけばよいのか分からず悩んでいます。
69
68
  分からないことだらけで非常に申し訳ないのですが、よろしくお願いいたします。