Excel VBA質問箱 IV

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

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


1576 / 13645 ツリー ←次へ | 前へ→

【73395】for〜nextで繰り返したい 山中成利 13/1/4(金) 20:36 質問[未読]
【73397】Re:for〜nextで繰り返したい UO3 13/1/4(金) 21:18 発言[未読]
【73398】Re:for〜nextで繰り返したい UO3 13/1/4(金) 21:24 発言[未読]
【73399】Re:for〜nextで繰り返したい 13/1/5(土) 9:02 回答[未読]

【73395】for〜nextで繰り返したい
質問  山中成利 E-MAIL  - 13/1/4(金) 20:36 -

引用なし
パスワード
   1行目からn行目まで順に別のシートの1行目にコピーしたい。
次のようなマクロで動かしているのですが、量が膨大になると書いてられません。
 
Windows("data.xls").Activate
Rows("1:1").Select
Selection.copy
Windows("calculation.xls").Activate
Sheets("data2").Select
Rows("1:1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

Windows("data.xls").Activate
Rows("2:2").Select
Selection.copy
Windows("calculation.xls").Activate
Sheets("data2").Select
Rows("1:1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

for nextの書き方がよくわかりません。
ご教示願えれば幸いです。
よろしく

【73397】Re:for〜nextで繰り返したい
発言  UO3  - 13/1/4(金) 21:18 -

引用なし
パスワード
   ▼山中成利 さん:

こんばんは

転記元のシート名を"Sheet1"にしてあります。
Sample1 は 1〜100 を。Sample2 は data.xls 側のデータ行数分。
そして Sample3 は、もしかしたら、こういうこと? というコードです。

Sub Sample1()
  Dim i As Long
  Dim n As Long
  Dim shT As Worksheet
  
  Set shT = Workbooks("calculation.xls").Sheets("data2")
  shT.Cells.ClearContents   'コピー前にコピー先をクリア
  
  n = 100   'コピー行数指定
  
  For i = 1 To 100   '1行目から100行目まで
    shT.Rows(i).Value = Workbooks("data.xls").Sheets("Sheet1").Rows(i).Value
  Next
  
End Sub

Sub Sample2()
  Dim i As Long
  Dim n As Long
  Dim shT As Worksheet
  
  Set shT = Workbooks("calculation.xls").Sheets("data2")
  shT.Cells.ClearContents   'コピー前にコピー先をクリア
  
  With Workbooks("data.xls").Sheets("Sheet1")
  
    n = .UsedRange.Row + .UsedRange.Rows.Count - 1 'data.xls側のデータ最終行番号
  
    For i = 1 To n   '1行目から最終行まで
      shT.Rows(i).Value = Workbooks("data.xls").Sheets("Sheet1").Rows(i).Value
    Next
    
  End With
  
End Sub

Sub Sample3()
  
  Workbooks("data.xls").Sheets("Sheet1").Cells.Copy _
    Workbooks("calculation.xls").Sheets("data2").Range("A1")
  
End Sub

【73398】Re:for〜nextで繰り返したい
発言  UO3  - 13/1/4(金) 21:24 -

引用なし
パスワード
   ▼山中成利 さん:

↑ 勘違いですかね。
1行目からn行目まで順に別のシートの1行目からn行目にコピーするコードでした。

でも・・・・

>1行目からn行目まで順に別のシートの1行目にコピーしたい。

次から次へと1行目にコピー?
ということは、n-1行目までのコピーは意味が無く、n行目を 1行目にコピーするということですか?

【73399】Re:for〜nextで繰り返したい
回答    - 13/1/5(土) 9:02 -

引用なし
パスワード
   こんにちは。

for next の書き方、かたちは決まっているんです。
そのかたちのまんま書けばいいです。

・まず1行目に「for i = 1 to n」と書きます。
・その2行下に「next i」と書いてしまいます。
 あとで書こうと思っていると、忘れることがあります。
・そしてあいだの行に、繰り返したい内容をまずはコピペで持ってきて
 適宜字下げをおこない、
・ループのたびに変えたい部分を、iを使った形に書き換えます。
 今回のだったら、コピー元が i 行目になりますね。
・さいごに、ループのたびに実行しなくても1回実行すれば足りることを
 ループの外に追い出します。

山中成利さんのコードに、上記の手順をあてはめたコードがこれです。
改善の余地はありますが、それは for next とはべつの話です。
むつかしいことは一度に1つずつ、です。

Sub test()
 Dim i As Long
 Dim n As Long
 
 n = 3 '仮
 Windows("calculation.xls").Activate
 Sheets("data2").Select
 Rows("1:1").Select
 
 For i = 1 To n
  Windows("data.xls").Activate
  Rows(i & ":" & i).Select
  Selection.Copy
  Windows("calculation.xls").Activate
  ActiveSheet.Paste
 Next i

 Application.CutCopyMode = False
End Sub


▼山中成利 さん:
>1行目からn行目まで順に別のシートの1行目にコピーしたい。
>次のようなマクロで動かしているのですが、量が膨大になると書いてられません。
> 
>Windows("data.xls").Activate
>Rows("1:1").Select
>Selection.copy
>Windows("calculation.xls").Activate
>Sheets("data2").Select
>Rows("1:1").Select
>ActiveSheet.Paste
>Application.CutCopyMode = False
>
>Windows("data.xls").Activate
>Rows("2:2").Select
>Selection.copy
>Windows("calculation.xls").Activate
>Sheets("data2").Select
>Rows("1:1").Select
>ActiveSheet.Paste
>Application.CutCopyMode = False
>
>for nextの書き方がよくわかりません。
>ご教示願えれば幸いです。
>よろしく

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