• ベストアンサー

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

エクセルのマクロの質問です。 こんにちわ。エクセルのマクロを始めて間もないものです。 下記ようなマクロを組みましたが「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

  • エクセルのマクロで繰り返し処理

    当方マクロ初心者ですが下記のマクロをCheckBox0~CheckBox23についてコピーするセルを変化させながら繰り返し処理を行いたいのですが、簡単なループ処理で行えますか? 教えていただければ幸いです。 If CheckBox0.Value = True Then Worksheets("sheets1").Activate  行 = Worksheets("sheets1").Range("e7")   行 = 行   Worksheets("sheets1").Range("g7:t7").Copy Windows("Books1.xls").Activate Sheets("sheets1").Select Range(Cells(行, 15), Cells(行, 15)).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If

  • エクセル2000マクロエラー

    下記のマクロを実行すると、Sheets(M_KAKOBA(count)).Selectのロジックでインデック スが有効範囲にありません。というエラーメッセージがでます。 エクセルのツール→オプション→全般→新しいシートの数を2から3に変更すると エラーは発生しないのですが、エクセルのツール→オプション→全般→新しいシートの数を2 のままでエラーを出さないようにするには、ロジックを変更すればできるのでしょうか? ロジックの追加方法を教えてください。 Sub 送信() '変数の設定 Dim work, hensu, i, j Windows("加工品.xls").Activate work = Sheets("masta").Cells(3, 6).Text 'シート名の変更 Windows(F_NAME).Activate Sheets(M_KAKOBA(count)).Select ActiveSheet.Name = work Windows("加工品.xls").Activate Sheets(work).Select i = 5 Do i = i + 1 hensu = Cells(i, 5) Loop While hensu <> "" Range(Cells(1, 1), Cells(i + 1, 33)).Select Selection.Copy Windows(F_NAME).Activate Sheets(work).Select Range("a1").Select Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A2").Select End With Selection.BorderAround Weight:=xlThin, ColorIndex:=xlAutomatic ' '行の高さ If Worksheets(work).AutoFilterMode = False Then Range(Cells(5, 1), Cells(i + 1, 31)).Select Selection.AutoFilter End If End Sub

  • マクロを使って不特定のファイルからコピー&ペーストしたい(エクセル)

    エクセルのデータの必要な列を別のブックに入っているフォーマットにどんどん追加していけるようなマクロを作りたいと思っています。 マクロの自動記録を使ってみたのですが、特定のファイル名が入っているので、使えません。 中を見てみると Windows("A.xls").Activate Columns("b:b").select Selection.copy workbooks.open Filename:="B.xls" Windows("B.xls").Activate Range("D9").select Windows("A.xls").Activate Application.CutCopyMode = False Range("b:b").select Selection.copy Windows("B.xls").Activate Selection.Pastespecial Paste:=xlValues,Operation:=xlNone,SkipBlanks:=False,Transpose:=False . . . となっています。 このファイルAとなっている部分を、どのファイルでも実行できるようにしたいです。 後、ファイルBに貼り付けるときに一番最終行に追加していくにはどのような構文を足せばいいか教えていただきたいです。 初心者で質問の意図が伝わりにくかったらすみません.. よろしくお願いします。

  • Excelマクロ

    Excelマクロで1行が選ばれたかを判定したいのですが セルであらわすとCells(0,1)と(0があるのかわかりませんが)なるところがセレクトされているかを知りたいです 誰か教えていただけるとうれしいです

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • エクセルマクロ・Cells.Find のエラー

      VBA初心者です。 ファイルA の C列 に入力されているデータが ファイルB に含まれているかどうか検索するマクロを Cells.Find を使って作ろうとしています。 データがファイルBに存在する場合は問題ありませんが存在 していない場合エラーが出て止まってしまいます。 ヘルプを見ると「セルが見つからなかった場合は、Nothingを返します」 と書かれていますが、どうもNothingとは返ってきません。 このエラーを回避する方法を教えてください。 例えばこんなマクロを組みました。  For tate = 0 To 19    Windows("ファイルA.xls").Activate    Range("C1").Offset(tate, 0).Select    データ = Range("C1").Offset(tate, 0)    Windows("ファイルB.xls").Activate    Cells.Find(データ, MatchCase:=False).Activate  Next tate 例えば最後の2行を    結果 = Cells.Find(What:=ISISDate, MatchCase:=False).Activate      MsgBox (結果)  Next tate とするとデータが含まれている場合は「True」と返ってきますが、 含まれていない場合は MsgBox が表示される前にエラーとなってしまいます。 とりあえずこのエラーを回避する方法をご存知でしたらお教えください。  

  • エクセル マクロ

    はじめまして。 エクセルでマクロを使って研究を進めているものです。 最近マクロを使い始めたのですが、ワークシート関数のスクリプトについてご質問があります。 具体的な記述を書いたほうが説明しやすいので、下に記述します。 Sub Macro1() Windows("a.xls").Activate ActiveCell.FormulaR1C1 = "=SUM(RC[-8]:RC[-1])"・・・(1) Range("J3").Select End Sub このような命令があるときに、sum関数の中に変数を入れることを考えます。そのときに、R1C1表示では選択したセルを基準にして変数を考えなくてはいけないので考えにくいです。そこで、イメージとしてですがこのような書き方はできないのでしょうか。 (1)の部分 ActiveCell.Formula = "=SUM(Range(Cells(2, 2), Cells(2, 変数)))" つまり、rangeやcellsを使って書きたいということです。 また、実際のエクセルのセルに入力されている関数をそのままコピーして、それに変数を自分で手直しして加えるような方法がありましたら教えてください。 よろしくお願いします。

  • エクセル2000でマクロを作成するのに困っています。

    エクセル2000でマクロを作成するのに困っています。 ↓やりたいこと (1)データを一行コピーする (2)別のファイルを開いて、データを値貼り付けする。  ※値を貼り付けるのは、空白のセルに。 (同じように下の列に値貼りつけを順次行い、データを作成する) ----------------------------------------------------------------------------------------- Sub Macro1() ' ' Aファイルの1行をBファイルのA列が空欄の行へ貼りつけ' 'シートの選択' Worksheets("Sheet3").Activate '行を選択コピー' Sheets("Sheet3").Rows("2:2").Select Selection.Copy 'ファイルを開く' Workbooks.Open Filename:="C:\Documents and Settings\hiro\デスクトップ\Book2.xls" 'ファイル選択' Windows("Book2.xls").Activate 'シートを選択しA列が空欄のセルに貼りつけ' Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues Application.CutCopyMode = False 'ファイルオープン時のシートを選択' Worksheets("Sheet1").Activate 'ファイルを閉じる' ActiveWorkbook.Close SaveChanges:=True '元ファイルに戻る' Windows("100520_一覧.xls").Activate End Sub -------------------------------------------------------------------------------------------- 2003ではうまくいきますが、会社のPCが2000のためか、下記文言でエラーがでます。 'シートを選択しA列が空欄のセルに貼りつけ' Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues Application.CutCopyMode = False ●エラー表示   438 プロパティまたはメソッドをサポートしてません。 どのように入力すればよいでしょうか。 マクロを今まで一度も作ったことがわからないので、本当にわかりません。 よろしくお願いいたします。

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • エクセルマクロ セルの貼り付けについて

    マクロ初心者でわからないことばかりで困っております。 For i = 1 To 721 Step 80 Sheets("Sheet2").Activate Range("G3").Select ActiveCell.FormulaR1C1 = i Range("A1:D80").Select   Selection.Copy Sheets("Sheet3").Activate このあとにコピーしたもの「Range("A1:D80").Select」をセルに貼り付ける時に一回ごとに80行ずつずらして貼り付けたいのですが、そのような場合は どのようにRange指定して貼り付ければよろしいのですか? sheet2で演算した結果をsheet3のセルA1からA721まで貼り付けたいのです。一回の演算で80行まで計算されます。 わかりずらくて申し訳ありません。

専門家に質問してみよう