Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3236 / 13644 ツリー ←次へ | 前へ→

【63367】再度ループの質問です もん太 09/10/29(木) 14:18 質問[未読]
【63368】Re:再度ループの質問です Yuki 09/10/29(木) 14:51 発言[未読]
【63370】Re:再度ループの質問です もん太 09/10/29(木) 15:04 お礼[未読]
【63369】Re:再度ループの質問です こもと 09/10/29(木) 14:58 発言[未読]
【63371】Re:再度ループの質問です もん太 09/10/29(木) 15:08 お礼[未読]

【63367】再度ループの質問です
質問  もん太  - 09/10/29(木) 14:18 -

引用なし
パスワード
   シート「1」から「31」までの31枚のシートがあります。
各シートのA2〜E86までをコピーして
シート「データ」に上から順番(85行おき)に貼付けしたいと思っています。

「1」のシートA2〜E86を「データ」シートA2〜E86に貼付け
「2」のシートA2〜E86を「データ」シートA87〜E171に貼付け
「3」のシートA2〜E86を「データ」シートA172〜E256に貼付け
「31」のシートまで連続して処理を行いたいと思っています。


最初に書いた記述が下記のような記述になります。


   Sheets("1").Select
  Range("A2:E86").Select
  Selection.Copy
  Sheets("データ").Select
  Range("A2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  
  Sheets("2").Select
  Range("A2:E86").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("データ").Select
  Range("A87").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  
    Sheets("3").Select
  Range("A2:E86").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("データ").Select
  Range("A172").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False

この処理を31回分記述しているのですが
これを一つにまとめるにはどのように記述すればよいのでしょうか?

先ほどの質問の応用編だと思うのですが
どう記述したらよいのかわかりません。

再度宜しくお願いしますm(。_。;))m ペコペコ…

【63368】Re:再度ループの質問です
発言  Yuki  - 09/10/29(木) 14:51 -

引用なし
パスワード
   こんにちは。
検証していませんが多分良いと思います。

Sub TEST1()
  Dim i  As Long
  For i = 1 To 31
    Worksheets(CStr(i)).Range("A2:E86").Copy _
    Worksheets("データ").Range("A" & (i - 1) * 85 + 2)
  Next
End Sub

【63369】Re:再度ループの質問です
発言  こもと  - 09/10/29(木) 14:58 -

引用なし
パスワード
   ▼もん太 さん:

値貼り付けのようですので、コピーを使わない案です。

Sub test()
Dim i As Long
For i = 1 To 31
 Worksheets("データ").Range("A" & (i - 1) * 85 + 2).Resize(84, 5).Value = _
  Worksheets(CStr(i)).Range("A2:E86").Value
Next i
End Sub

【63370】Re:再度ループの質問です
お礼  もん太  - 09/10/29(木) 15:04 -

引用なし
パスワード
   ▼Yuki さん:
>こんにちは。
>検証していませんが多分良いと思います。
>
>Sub TEST1()
>  Dim i  As Long
>  For i = 1 To 31
>    Worksheets(CStr(i)).Range("A2:E86").Copy _
>    Worksheets("データ").Range("A" & (i - 1) * 85 + 2)
>  Next
>End Sub

Yukiさん!たびたびありがとうございました!!
今回も思い通りの結果がえられました。
VBAは勉強したてなのでわからないことだらけですが
こんなにも簡単な記述で思い通りの処理が出来るのですね。

私が作成したVBAは恥ずかしいぐらいの
長い長いものでした。
おかげさまで、なんとか間に合いそうです!
ありがとうございました☆

【63371】Re:再度ループの質問です
お礼  もん太  - 09/10/29(木) 15:08 -

引用なし
パスワード
   ▼こもと さん:
>▼もん太 さん:
>
>値貼り付けのようですので、コピーを使わない案です。
>
>Sub test()
>Dim i As Long
>For i = 1 To 31
> Worksheets("データ").Range("A" & (i - 1) * 85 + 2).Resize(84, 5).Value = _
>  Worksheets(CStr(i)).Range("A2:E86").Value
>Next i
>End Sub

こもとさん、ありがとうございました!
こもとさんが教えてくださった方法でも、同じく希望通りの結果がえられました!
本当にお二人には感謝いたしております。

コピーを使わないで貼り付けられるというのが
いまいち理解できていないため、あとでしっかりと勉強したいと思います。
本当にありがとうございました!

3236 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free