質問編集履歴
8
タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
マクロ VB データ一覧表を元に別のシートにそれぞれの内容をコピーする方法
|
1
|
+
マクロ VB データ一覧表を元に別のシートにそれぞれの内容をコピーまたは複写する方法
|
body
CHANGED
File without changes
|
7
分からない点についてさらに追記
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
|
+

|
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
追記修正
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
追記間違え
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
追記
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
追記
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
追記の記述
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
画像の誤りを修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
###前提・実現したいこと
|
6
6
|
1、現在の状況としては「データ一覧」というデータの一覧(国名)を表にしたシートがあり、
|
7
7
|
以下のように「国名」、「略称」、「備考」のデータがあります。
|
8
|
-

|
9
9
|
|
10
10
|
2、そしてこの表の略称と一致するシートがあり、
|
11
11
|
それぞれ以下のようなフォーマットが用意されています。
|
12
|
-

|
13
13
|
(※実際に作りたいデータでは、一覧データと同じフォーマットではなく、
|
14
14
|
もう少し詳細内容が追加されています)
|
15
15
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
それに対応するシートのフォーマットにも同じように「国名」と「備考」が表示されるようにしたいということです。
|
18
18
|
(例)略称が[USJ]の場合
|
19
19
|
⇒[USJ]シートの「国名」に「アメリカ」、「備考」に「留学した」
|
20
|
-

|
21
21
|
(例)略称が[CAN]の場合
|
22
22
|
⇒[CAN]シートの「国名」に「カナダ」、「備考」は空
|
23
23
|

|
@@ -60,10 +60,9 @@
|
|
60
60
|
Next 略称
|
61
61
|
End Sub
|
62
62
|
```
|
63
|
-

|
64
64
|
|
65
65
|
|
66
|
-
|
67
66
|
エクセルもろくに使いこなせない中、マクロを使わなければならなくなり勉強しているのですが、
|
68
67
|
何をどのように進めていけばよいのか分からず悩んでいます。
|
69
68
|
分からないことだらけで非常に申し訳ないのですが、よろしくお願いいたします。
|