人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[excel・webクエリ・マクロ初心者]HP上の4つの表をwebクエリで取り込むマクロを(はてなで教えていただき)それぞれ作ってみました。感動的でした。しかし面倒なので4つを一度に取り込めるマクロを作りたいと思っています。これらの4つの表は日によって行数が変わります。また、それらの表と表の間は3行あける必要があります。この場合、VBA上でどのような記述を加えればよいのかわかりやすく教えてください。よい回答にはよいポイントをつけさせていただきます。

●質問者: ayaka2002
●カテゴリ:コンピュータ インターネット
✍キーワード:Excel Hp VBA Web いただきます
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● nabetomo
●27ポイント

Selection.End(xlDown)

は現在選択している位置からの最終行を表します。

この最終行に4を足せば表の末尾から3行間隔があきますので

表を貼り付けた後に下記のコードを追記すれば、次の表との間が3行開きます。

Cells(Selection.End(xlDown) + 4, ActiveCell.Column).Select

表の貼り付け->3行開ける・・・これを繰り返せば

思惑の動作が可能だと思います。

http://q.hatena.ne.jp

◎質問者からの返答

ありがとうございました。

表1を取り込むコードと表2を取り込むコードの間に(End Withの次)教えていただいたコードを入れてみたのですがどうもうまくいきませんでした。何かやり方が間違っているのでしょうか。


2 ● arhbwastrh
●27ポイント

一番簡単なコードで書いてみました。

http://www.yahoo.co.jp


Sub test()
 Dim i As Long 'sub○○のすぐ下に書く

'以下はまとめて書く
i = 1
Do While i <> 4'iが4じゃなければ以下の作業を繰り返しなさい
 ActiveCell.Offset(1, 0).Activate'アクティブセルのひとつ下のセルをアクティブにしなさい
 If ActiveCell.Value = "" Then'もしそこが空白なら以下の処理をしなさい
 i = i + 1
 If i = 4 Then'さらに、もしiが4なら以下の処理をしなさい
ActiveCell.Offset(1, 0).Activate
 '貼り付けをするコードを書く
 End If
 Else'iが4じゃなければ、iを1にしなさい
 i = 1
 End If
Loop
End Sub
>||
◎質問者からの返答

ありがとうございました。頑張ってやってみます!


3 ● Mook
●26ポイント

保存位置はいつでも選択した位置で指定したいのでしょうか。


もしA列を基準に、いつでも最下行に3列あけてコピーすると考えることが出来るなら、下記のようにもできます。

Sub copyNext()
 Dim nextRow As Long
 With Worksheets(1)
 nextRow = .Range("A" & .Rows().Count).End(xlUp).Row + 4
 Worksheets(2).Range("A1:D10").Copy Destination:=.Range("A" & nextRow)
 End With
End Sub

この例は二枚目のシートの"A1:D10" を 1枚目のシートの最下行に3列あけてコピーする例です。


蛇足ですが、

With ****

.###

End With

のように記述した場合、"." で始まる部分は

****.###

という意味になるので、最初の例で


.Range(・・・)

というのは

Worksheets(1).Range(・・・)

というように明示的に1枚目のシートを指したことになります。なので、最初の書き方は、複数のシートにまたがった処理を簡単にすることが出来ます。


Select を使うと、こういったことが出来ないので、一度試してみてはいかがでしょうか。


VBA 高速化テクニック Select するな

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ