• ベストアンサー

エクセルのマクロの質問です。

エクセルのマクロの質問です。 こんにちわ。エクセルのマクロを始めて間もないものです。 下記ようなマクロを組みましたが「Windows("B.xls").Activate」(※の部分)でとまってしまいます。 なぜかもわからず困っています。 Workbooks.Open Filename:="B.xls" For i = 1 To 1000 Step 1 Range(Cells(i, 1), Cells(i, 5)).Select Selection.Copy Windows("A.xls").Activate Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select ActiveSheet.Paste ※ Windows("B.xls").Activate Next i 一応、動作としては Bのマクロを開く→ループ始点(1000回繰り返す) 一回目⇒A1~B5をコピー→Aのエクセルを開く→A列のセル1行目に貼り付ける→Bのエクセルを開く 二回目⇒A2~B5をコピー→Aのエクセルを開く→A列のセル2行目に貼り付ける→Bのエクセルを開く . . . ループ終点 こんな感じで作成しましたが、どうしても上手く動かないで困っています。 無駄な動作が多いかもしれませんが、ぜひアドバイスをお願いします。 また、もっと簡単な動作ができるのであればそちらもお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#192382
noname#192382
回答No.4

二つのブックを開いて並べておいて次のマクロをブックAに入れておき実行すると、BブックのデータがAにコピーできました。参考にしてください。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2010/9/7 ユーザー名 : ' ' Dim i As Integer, j As Integer For i = 1 To 10 Step 1 For j = 1 To 5 Step 1 Windows("B.xls").Activate Cells(i, j).Select Application.CutCopyMode = False Selection.Copy Windows("A.xls").Activate Cells(i, j).Select ActiveSheet.Paste Application.CutCopyMode = False Next j Next i End Sub

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

参考レベルです。 アクティブを使うのは良いです。 今Bブック指定のアクティブですが、Bブックのxxシートをアクティブ、ということにしないとうまくいかないのか、と。Aブックのアクティブはエラーないので説明不足ですが、リンク先説明をみるとそんな感じです。拡張子ありなしでも違いがありそうです。 EXCELでお仕事 というサイトのVBA応用「自ブックとそうでないブックの見分け方」に関連した説明あります。これが起きているのではと思います。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

実行時エラー「インデックスが有効範囲にありません」 同じことが起きていますか?。 http://www.happy2-island.com/excelsmile/smile03/capter00401.shtml 4.1 ワークシートを選択(アクティブに)する http://www.asahi-net.or.jp/~zn3y-ngi/index.html 範囲選択 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv206.html#11 異なるシート間で範囲指定してコピーして貼り付けるには? http://www.asahi-net.or.jp/~zn3y-ngi/YNxv991.html ----------------------------------- お試し ブックAにマクロ保存して ブックBが閉じている状態で実行してエラーはでませんでした。 Sub Macro1() ChDir "C:\temp" Workbooks.Open Filename:="C:\temp\B.xls" For i = 1 To 10 Step 1 Range(Cells(i, 1), Cells(i, 5)).Select Selection.Copy Windows("A.xls").Activate Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select ActiveSheet.Paste Windows("B.xls").Activate Next i MsgBox ("end") End Sub ----------------------------------- 同じようにやって 再現しなかったのでなんとも言えませんが、 ブックを開いた直後に(シートや)セルを選択させておくとか、 でも違うかもしれません。 Activateさせる対象が不十分なのだろうと思います。 まずはエラーを無くすのが先、 その後で効率化をはかっても良いと思います。

osarusan0214
質問者

補足

>Activateさせる対象が不十分なのだろうと思います。 とはどういうことでしょうか? 色々とやってみたのですが Windows("B").Activate の部分でエラー(インデックスが有効範囲にありません)が出ます。 この文はBのエクセルをアクティブにする。(操作できる画面に持ってくる?) という事だと理解しているのですが、なぜこういった事が起こるのかがわかりません。 効率化は何かあれば参考にお願いします。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

まずは、 AとBのブックは同じフォルダにありますか。 CHDIR フォルダ名 のコマンドを参考に。

osarusan0214
質問者

補足

はい。同じフォルダにあります。(実際は絶対パスで入力されています) ファイルを開くところはできているのですが、※印のBのウィンドウをアクティブにするところが上手く動かないみたいです。 そもそも考え方が違うのでしょうか・・・?

関連するQ&A