エクセルVBAで集計用依頼情報をコピーする際にエラーが発生する

このQ&Aのポイント
  • 部分でインデックスが有効範囲にありません。集計依頼情報(2)から集計用依頼情報にコピーする際に発生しています。エクセルVBAを使用しています。
  • 質問文章には、集計依頼情報(2)をコピーして集計用依頼情報に貼り付ける際に、インデックスが有効な範囲外であるため、エラーが発生しています。これは、エクセルVBAで行われています。
  • 集計依頼情報(2)から集計用依頼情報へのコピー時に、セルの範囲が正しく指定されていないため、エラーが発生しています。このエラーはエクセルVBAで発生しています。
回答を見る
  • ベストアンサー

★部分でインデックスが有効範囲にありません。とでます。

★部分でインデックスが有効範囲にありません。とでます。  集計依頼情報(2)から集計用依頼情報にコピーしたものを貼り付け  たいのですが、ここで上のエラーがでます。  何がおかしいのでしょうか? ちなみにエクセルVBAです。   Sub sample() Dim lngKns As Integer Dim lngRow As Long Workbooks.Open Filename:=ThisWorkbook.Path & "\集計用依頼情報(2).csv" Worksheets("集計用依頼情報(2)").Activate '受付日の数をカウントしてデータ数を取得 lngKns = WorksheetFunction.Count(Worksheets("集計用依頼情報(2)").Range("Z2:Z65536")) '集計用依頼情報(2)→集計用依頼情報にコピー Worksheets("集計用依頼情報(2)").Select Worksheets("集計用依頼情報(2)").Range("A2:CW" & 1 + lngKns).Copy Workbooks.Open Filename:=ThisWorkbook.Path & "\集計用依頼情報.csv" '受付日の数をカウントしてデータ数を取得 lngRow = WorksheetFunction.Count(Worksheets("集計用依頼情報").Range("Z2:Z65536")) ★ ThisWorkbook.Worksheets("集計用依頼情報").Activate '値貼り付け ThisWorkbook.Worksheets("集計用依頼情報").Range("A" & lngRow + 1 & _ ":CW" & lngRow + lngKns).Paste ActiveSheet.Paste Application.CutCopyMode = False End Sub

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ANo.1です。 > とったとしても貼り付けの時点で > 同じエラーがでて止まってしまいます またまたソースを見ただけでの回答ですが、Pasteはアクティブなシートやセルにしかできません(Rangeに対してはNG)。 以下のようにセルをセレクトするとどうでしょう? ThisWorkbook.Worksheets("集計用依頼情報").Activate ThisWorkbook.Worksheets("集計用依頼情報").Range("A" & lngRow + 1 & ":CW" & lngRow + lngKns).Paste ActiveSheet.Paste ↓ Worksheets("集計用依頼情報").Activate Worksheets("集計用依頼情報").Range("A" & lngRow + 1 & ":CW" & lngRow + lngKns).Select ActiveSheet.Paste あるいは、コピー&ペーストではなく、セルに値を直接入れるとか……。 Worksheets("集計用依頼情報").Range("A" & lngRow + 1 & _ ":CW" & lngRow + lngKns).Value = Worksheets("集計用依頼情報(2)").Range("A2:CW" & 1 + lngKns).Value

maki06
質問者

お礼

mt2008さん 返信ありがとうございます。 検証してみた結果データ数がエクセルの許容範囲を 超えていました。 データを削除すればいけました! ありがとうございました!

maki06
質問者

補足

Worksheets("集計用依頼情報").Activate Worksheets("集計用依頼情報").Range("A" & lngRow + 1 & ":CW" & lngRow + lngKns).Select ActiveSheet.Paste 返信ありがとうございます。 この通りに修正してみたんですが、やはり同じエラーが発生して しまいます。 >Pasteはアクティブなシートやセルにしかできません(Rangeに対してはNG)。 知りませんでした。  ありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルでは、ブックやシートはコレクションといい、集団で扱うことになっており、 (1)名前で特定 (2)インデックス番号で指定 (3)ActiveXX、XXNextなど、ForEachなど の、主に(1)(2)の2つが出来る。 そういう中で「インデックスが有効範囲にありません」は、指定されたブックやシートが存在しないときに指摘が出るもの。 (1)プログラムでのインデクス指定数が、不適当プログラムでエラーで暴走した(実情の存在数を超えた)や (2)その名前の物が見つからないが ほとんど。 (1)は、ほとんどこのやり方は使わないだろうし、(2)も存在しない名前をコーダーは書くつもりは無いとおもう。しかし半角全角を取り違えていたり、スペースの有無、名前のタイプミスをしていたり、シートが意に反して抹消済みだったりは起こりえる。 名前のスペルを見直したら。

maki06
質問者

お礼

imogasiさん 返信ありがとうございます。 参考になりました!

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

自ブックに"集計用依頼情報"と言うシートがありますか? コードを見て想像する限りでは、自ブックにそんなシートは無く、直前でOPENしている 集計用依頼情報.csv にペーストしたいんじゃないんですか? で、あればThisWorkbookを取ってしまえば? 次のペーストしている行も同様です。 最後のActiveSheet.Paste も余計な気がします……。

maki06
質問者

補足

返信ありがとうございます。 実はこのエラーがでるのでThisWorkbookをつけてみた次第 で当初はついていませんでした。 確かにこれだと自ブックに貼り付けたいとうことになりますよね。。 とったとしても貼り付けの時点で 同じエラーがでて止まってしまいます。

関連するQ&A

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • ”インデックスが有効範囲にありません”と言われます

    はじめまして。 VBA初心者です。 次のプログラムを実行すると、 ”インデックスが有効範囲にありません”と言われます。 見よう見まねで本を参考に式を書いてみました。 1.csv のシート名”1”→ 2.csvのシート名"2"→…→100.csvのシート名”100”と順にファイルを読込みませて、 1つのシートに上から、1.csvのシート”1”の結果、2.csvのシート名の”2”の結果、と順に100行まで書き込みたいと考えているのですが上記のエラーになってしまいました。 今のままだと1行目、2行目に1.csvの結果が表示されるだけです。 エラーの原因がわからなくなってしまいました… すみませんが、よろしくお願いします。 以下、VBAです。 Option Explicit Sub test() Dim fileNames As Variant Dim a(12) As Long Dim lp As Integer fileNames = Application.GetOpenFilename(MultiSelect:=True) If IsArray(fileNames) = True Then For lp = 1 To UBound(fileNames) Workbooks.Open (fileNames(lp)) ThisWorkbook.Worksheets("Sheet1").Range("B2", "B" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF5").Value ThisWorkbook.Worksheets("Sheet1").Range("C2", "C" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF6").Value ThisWorkbook.Worksheets("Sheet1").Range("D2", "D" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF7").Value ThisWorkbook.Worksheets("Sheet1").Range("E2", "E" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF8").Value ThisWorkbook.Worksheets("Sheet1").Range("F2", "F" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF9").Value ThisWorkbook.Worksheets("Sheet1").Range("G2", "G" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF10").Value ThisWorkbook.Worksheets("Sheet1").Range("H2", "H" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF11").Value ThisWorkbook.Worksheets("Sheet1").Range("I2", "I" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF12").Value ThisWorkbook.Worksheets("Sheet1").Range("J2", "J" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF13").Value ThisWorkbook.Worksheets("Sheet1").Range("K2", "K" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF14").Value ThisWorkbook.Worksheets("Sheet1").Range("L2", "L" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF15").Value ThisWorkbook.Worksheets("Sheet1").Range("M2", "M" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF16").Value a(1) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF5").Value a(2) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF6").Value a(3) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF7").Value a(4) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF8").Value a(5) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF9").Value a(6) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF10").Value a(7) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF11").Value a(8) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF12").Value a(9) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF13").Value a(10) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF14").Value a(11) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF15").Value a(12) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF16").Value ThisWorkbook.Worksheets("Sheet1").Range("N2", "N" & lp).Value _ = (a(1) + a(2) + a(3) + a(4) + a(5) + a(6) + a(7) + a(8) + a(9) + a(10) + a(11) + a(12)) / 12 ThisWorkbook.Worksheets("Sheet1").Range("O2", "O" & lp).Value _ = WorksheetFunction.Max(a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9), a(10), a(11), a(12)) ActiveWorkbook.Close a(1) = 0 a(2) = 0 a(3) = 0 a(4) = 0 a(5) = 0 a(6) = 0 a(7) = 0 a(8) = 0 a(9) = 0 a(10) = 0 a(11) = 0 a(12) = 0 Next End If End Sub

  • メッセ-ジボックスを非表示に出来ますか

    マクロ初心者です 先日ココで助けて頂きファイルの読み込みの記述を教えて頂き 下記記述を作りました が!一つ問題がありまして再度助けて頂きたいのですが コピ-したあとそのファイルが不要の為閉じますが その際メッセ-ジボックスが現れ 「クリップボ-ドに大きな情報があります。この情報をほかのプログラムに貼り付けられるようにしますか?」 と、 「クリップボ-ドに保存されているデ-タの大きさや形が、指定された領域と異なります。貼り付けますか?」 と現れるのですが、このメッセ-ジを表示しないようにしたいのですが 何か良い手はありますでしょうか? 回答 宜しくお願い致します Filename = ThisWorkbook.Sheets("す-ぱ-こんぴゅ-た-").Range("B1").Value Workbooks.Open Filename:= _ "C:\Documents and Settings\k-saruwatari\" & Filename Cells.Select Selection.Copy ActiveWindow.Close Windows("試作.xls").Activate Sheets("Error Log").Select Cells.Select ActiveSheet.Paste Sheets("ぽちっと").Select ThisWorkbook.Activate Filename = ThisWorkbook.Sheets("す-ぱ-こんぴゅ-た-").Range("C1").Value Workbooks.Open Filename:= _ "C:\Documents and Settings\k-saruwatari\" & Filename Cells.Select Selection.Copy ActiveWindow.Close Windows("試作.xls").Activate Sheets("Lot Log").Select Cells.Select ActiveSheet.Paste Sheets("ぽちっと").Select ThisWorkbook.Activate

  • 複数のシートの値を一つのシートに整列

    よろしくお願いします。 複数のシートに行も列もバラバラになっているデータを一つのシートの行に整列させたいと思っています。 具体的には下記のようなシートがあります。一つは組織の名前のシート、一つは組織の基礎情報といった感じでシートごとに回答されています。 これを他のシートに一つの組織を一つの行で整列させ分析をしていきたいと思っています。 ファイルが数千あるため、マクロで書こうと思っているのですが、下記のように書いたのですがうまくいきません。 アドバイスをいただけないでしょうか? ファイルは(アンケートデータ1,アンケートデータ2といった感じで統一、作業フォルダ内にすべて保存) マクロを動かすセルは”統合”というファイル名、シート1に持ってきます。 Sub Macro1() Dim i As Integer For i = 1 To 1000 'アンケートデータファイルを開く Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\作業\アンケートデータ" & i" .xls 'アンケートデータファイル 学校名シートのB11 を新しいブックのシート1のA1にコピー Worksheets(学校名).Activate Range("B11").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("A" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Worksheets(基本データ).Activate Range("D3").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("B" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Worksheets(基本データ).Activate Range("D6").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("C" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True 'アンケートデータファイルを閉じる ActiveWorkbook.Saved = True ActiveWorkbook.Close Next i End Sub 最終的には統合ファイル内で      A(学校名)         B(学校区分)    C(広さ)   D経営状況   E   F 1列  アイウエオ学校       3             500    黒字 2列    といった感じで学校数文行で並ぶようにしたいのです。 上記の式の間違いの指摘、書き方についてアドバイスをください。

  • VBAのコピー

    VBAのコピー Dim xls As New Excel.Application Dim wbk As New Excel.Workbook Dim sh3 As Worksheet Set sh3 = Worksheets("全") sh3.Activate sh3.Range("A1:Z65536").Select Selection.Clear Set wbk = xls.Workbooks.Open("\\***.***.*.***\管理\全データ抽出.xls") wbk.Worksheets("全").Activate 'ワークシートをアクティブにする wbk.Worksheets("全").Range("A1:Z65536").Copy 'コピーする 'ActiveSheet.Paste Destination:=Worksheets("全").Range("A1") '貼り付ける Worksheets("全").Range("A1").PasteSpecial Paste:=xlPasteValues wbk.Close SaveChanges:=False 'Worksheets("メイン").Cells(1, 1).Select を実行すると 『wbk.Close SaveChanges:=False』のところで クリップボードに大きな情報があります。・・・・ と言うメッセージがでて必ずとまってしまうのですが メッセージをでないようにしたいのですが 教えてください。お願いします。

  • Excel2007 VBA 転記について

    ご指導のほどお願いします。 見積書からボタン300をクリックするとFAX送付状(テンプレート).xlsに下記内容が転記するように書いたのですが、質問させてください。 ("見積書").Range("c6")→("Sheet1").Range("e14")に貼り付けはうまく行きますが 本当は("見積書").Range("c6")&("見積書").Range("c8")=&"の件"を("Sheet1").Range("e14")に貼り付けしたいのです。 C6セル「○○○工場」 C8セル「○○○作業」 の件 ↑をE14セルに「○○○工場 ○○○作業の件」 として貼り付けたいです。 Sub ボタン300_Click() Workbooks.Open "\FAX送付状\FAX送付状(テンプレート).xls" ThisWorkbook.Worksheets("見積書").Range("a4").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("f6").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("見積書").Range("i8").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("AD9").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("見積書").Range("c6").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("e14").PasteSpecial Paste:=xlPasteValues  ActiveSheet.Range("F9").Value = Date End Sub ご指導のほどお願いします。

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • WorkbookのCopyについて

    Workbookのコピーについて教えてください。 下記のマクロにセル内の数式もコピーしたいのですが、出来ないで困ってます。 値と数式をコピーする、マクロを入れると指定した範囲にコピーされません。 Sub CopyWorkbookToWorkbook() Windows("sheet2.xls").Activate Workbooks.Open Filename:="D:\book1.xls" Workbooks("book1.xls").Worksheets("sheet1").Range("A6:k1000").Copy Workbooks("book2.xls").Worksheets("sheet1").Range("A6").PasteSpecial    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False,Transpose:=False          Workbooks("book1.xls").Close End Sub よろしくお願いします。

  • VBAで値だけコピー

    EXCEL VBAで別ファイルの値をコピーして貼り付けをしているのですが、セルの中の一部のみを貼り付けしたいと思いますが、 どのようにしたらいいのでしょうか? 関数では取り出すことができたのですが、できればVBAの中で処理できればと思っています。 =IFERROR(MID(Z2,FIND("6",Z2),FIND(" has",Z2)-FIND("6",Z2)),"") やりたいこと 1.左から見て6~空白までの値のみを貼り付けしたい 2.エラーの時は空白にしたい Sub SO_Copy() Dim ws As Worksheet Set ws = Worksheets("Sheet1") Dim FilePath, FileName As String 'C8&C9にファイルパス/ファイル名を入力 FilePath = ws.Range("C8").Value & "\" & ws.Range("C9").Value FileName = ws.Range("C9").Value Workbooks.Open FilePath 'Z2~コピーして、"メール送信.xlsm"のD11以降に値だけ貼り付け Range("Z2", Range("Z2").End(xlDown)).Copy Windows("メール送信.xlsm").Activate Range("D11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks(FileName).Close End Sub

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう