エクセルシートのコピー時に起きる「インデックスが有効範囲にありません」エラーについて

このQ&Aのポイント
  • エクセルシートのコピー時に「インデックスが有効範囲にありません」というエラーメッセージが表示される問題が発生しています。
  • 問題は、コピーしたシートに含まれる印刷行の確認プロシージャーが停止することで発生しています。
  • エラーを回避するためには、「確認」プロシージャーの実行時にデバッグを行い、継続実行する必要があります。
回答を見る
  • ベストアンサー

シートCopyを行った時のエラーについて

エクセルシートの***にはA4横ページで縦に約20ページが並んでいます。 この***シートを別ブックにコピーしてCallで確認プロシージャーを呼び出して、印刷行の確認を行っています。(本来はそれ以外にも実行していますが、原因を探して行くとこの部分が残りました。) しかし、この状態で「確認」を実行すると9ページ前後でプログラムが「インデックスが有効範囲にありません」とメッセージが出て、停止しています。停止した状態でデバックを行い(MsgBox ActiveSheet.HPageBreaks(i).Location.Rowの箇所が示されます)、継続実行を行うと後は問題なく実行されます。 各種On Errorを入れて試しましたが、やはり上手く行きません。 しかし、「確認」を単独で実行したり、「移動開始」の.Copyを.Moveに換えると問題なく実行されます。.COPYした時のクリップボード情報の何かが、問題を起こしているのかと思い、WEB見つけたクリップボードをクリアーにするプロシージャーを追加しましたが、やはり上手く行きません。 .Move後に.Copyで戻すという手も考えましたが、もう少しスマートな方法は無いでしょうか? 原因と回避の方法がありましたらご教示をお願い致します。 Sub 移動開始() Sheets("***").Copy ActiveWorkbook.Sheets("***").Select Call 確認 End Sub Sub 確認() For i = 1 To ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(i).Location.Row Next i End Sub

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

  • ベストアンサー
  • korin_
  • ベストアンサー率69% (46/66)
回答No.2

#1です。 ごめんなさい、参考のページのURLを間違えました。orz こちらを参考にしてください。 http://okwave.jp/qa340769.html ちなみに、シートのコピーとは関係なくこの問題は発生します。

ae-1sp
質問者

お礼

改ページプレビューの命令を入れる事で、実施できました。 私もご紹介いただいた質問者さんと同様に非常に悩みました。 ありがとうございます。

その他の回答 (1)

  • korin_
  • ベストアンサー率69% (46/66)
回答No.1

こんにちは。 以下の記事を読むと、HPageBreaks の仕様のようです。 [XL2002] 印刷されるページの総数を調べる方法 http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP408/0/42.asp この際、正しい改ページ位置を取得するためには、下記3つのうちどれかを行う必要があるそうです。 お好きな方法を試してみてください。 > ・改ページされているセルを画面に表示 > ・ZOOM で縮小したあと元に戻す > ・印刷プレビューを実行する また、改ページプレビューを表示する方法でもOKみたいです。 過去ログをご参考にどうぞ。 http://okwave.jp/qa1491218.html

関連するQ&A

  • エクセルVBAでシートコピー

    Sheets("Sheet1")をCopyして、現在の最終のシートの後に持っていき、それを変数wsに設定しようとしています。 Sub TEST01() Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) Set ws = Sheets(Sheets.Count) MsgBox ws.Name End Sub これで通常はうまくいきますが、最終シートが非表示になっているとwsはその非表示のシートが指定され、Sheets("Sheet1")をCopyしたものでなくなってしまいます。 Sheets("Sheet1")をCopyして、現在の最初のシートの前に持っていき、それを変数に設定しようとしています。 Sub TEST02() Sheets("Sheet1").Copy Before:=Sheets(1) Set ws = Sheets(1) MsgBox ws.Name End Sub これで通常はうまくいきますが、最初のシートが非表示になっているとwsはその非表示のシートが指定され、Sheets("Sheet1")をCopyしたものでなくなってしまいます。 Set ws = ActiveSheet で設定できましたが、それ以外の方法はないでしょうか?

  • マクロで、改ページがうまく認識されません

    マクロで、改ページがうまく認識されません Excel2002を使用しています。 1ページ内に収まるように作った「内訳明細書」の型があり、 複数ページに渡る時は、ボタンを押せば新しいページが下に追加される…という マクロを作りたいと思い、いろいろ調べながらやってみたのですがうまくいきません。 以下のように、 「シートの最後の改ページの次の行に、原紙シートからコピーしたフォームを貼り付ける」 としてみたのですが、 最後の改ページの後ろ側に何かしらのデータがある時は ちゃんと最後の改ページを認識するのに、それがない時は、そのひとつ手前の 改ページを最後の改ページとみなすようです。 これはこういうものなのでしょうか? 何か解決策がありましたら、お教え願います。 Sub 改ページを入れる() Sheets("内訳明細書").Select p = ActiveSheet.HPageBreaks.Count '改ページの総数 L = ActiveSheet.HPageBreaks(p).Location.Row '最後の改ページの行 Sheets("原紙").Select Rows("1:26").Select Selection.Copy Sheets("内訳明細書").Select Rows(L).Select ActiveSheet.Paste Range("A7").Select Sheets("原紙").Select Application.CutCopyMode = False 'コピーモードを解除 Range("A1").Select Sheets("内訳明細書").Select  ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブにする 最終行 = ActiveCell.Row + 1 'アクティブセルの行番号(+1)    Worksheets("内訳明細書").Rows(最終行).PageBreak = xlPageBreakManual End Sub

  • VBAがうまくうごきません。

    以下のプログラムを書きました。 以下のプログラムではA1~C108を1ページ、A109~C216を2ページ目、A217~C325を3ページ目として印刷するようにページ設定したいのですが、うまく動きません。 どうしてでしょうか? わかるかたがいたら教えていただけないでしょうか? よろしくお願いします。 Sub 改ページ設定() ActiveWindow.View = xlPageBreakPreview '改ページプレビュー Set ActiveSheet.HPageBreaks(1).Location = Range("C109") '水平改ページ位置1を変更 Set ActiveSheet.HPageBreaks(2).Location = Range("C217") '水平改ページ位置2を変更 Set ActiveSheet.HPageBreaks(3).Location = Range("C326") '水平改ページ位置2を変更 End Sub

  • 【Excel VBA】フォームボタンの操作

    IF文の中でフォームボタンを自動でクリックする処理を追記したく、 以下のコードで実行しましたが、エラーとなりました。 IF文のSubプロシージャが閉まっていないと弾かれたのですが、 どう修正すれば正常に機能しますでしょうか? ここから↓ actsht = ActiveSheet.Name For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Private Sub clear_Click() '※ End Sub '※ Exit For ElseIf Anser = vbNo Then Exit For End If End If Next

  • シート名に自動で年月をつけたい!

    VBA初心者です。 「新規ページ作成」のマクロを作りました。 「H23.3」のシートの上で実行すると、新規ページを挿入し、 雛形というシートにある表をコピーするところまではできました。 そこに、シート名に自動で翌月(この場合は「H24.4」)をつけるにはどうすれば良いでしょうか? 不都合であれば、表記は「平成●年●月」等でも構いません。 また、「H24.4」で実行したら「H24.5」・・・・としていきたいです。 現在のところまでは下記のとおりです。 Sub 新規ページ作成() ' ' 新規ページ作成 Macro ' ' Sheets("H24.3").Select Sheets.Add Sheets("Sheet3").Select Sheets("Sheet3").Move Before:=Sheets(5) Sheets("雛形").Select Cells.Select Selection.Copy Sheets("Sheet3").Select Cells.Select ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub 質問の仕方に不備等があればご指摘下さい。 回答と併せてよろしくお願いします。

  • EXCEL2002でRange.Copyでエラー

    お世話になります。 OSがWINDOWS XPの環境で EXCEL2002で既存の入力用のシートAとマクロで追加して削除するワーク用に2つのシートB,Cがあるのですが、ワーク用のシートに下記コマンドを実行するとエラーなります。EXCEL2003では問題なく動くのですが、EXCEL2002しか入っていない環境もあるのでご教授して頂ければ助かります。 Sheets("A").Range("d10:d60").Copy Sheets("B").Range("a1) Sheets("A").Range("h10:h60").Copy Sheets("B").Range("51") Sheets("A").Range("e10:e60").Copy Sheets("C").Range("a1) Sheets("A").Range("i10:i60").Copy Sheets("C").Range("51") 以上 宜しくお願いします。

  • マクロエラー

    実行時エラー1004結合セルの一部を変更することができません と表示されました なぜでしょうか? 以前まで使用できていたのですが Sub 作成() Dim MySheetName As Variant MySheetName = InputBox("シート名を入力してください") If MySheetName = "" Then Exit Sub Sheets("原本").Copy After:=Sheets(Worksheets.Count) ActiveSheet.Name = MySheetName Sheets("1").Range("A1:K73").Copy Sheets("原本").Range("A1") End Sub Sheets("1").Range("A1:K73").Copy Sheets("原本").Range("A1") この部分で黄色く表示されます

  • 【Excel VBA】ワークシートの表示(続き)

    すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub

  • VBAで、ある文字の列を他のシートにコピーしたい時

    名称   /数量 /種類 りんご /1 /食べ物  自動車 /2 /乗り物 a /3 /アルファベット バナナ /4 /食べ物 消防車 /6 /乗り物 b /5 /アルファベット 上記の様な表で種類の列を基準に、「食べ物」のある行だけ集めて別のシートにコピーして、「乗り物」のある行だけ集めて別のシートにするということはできますか? 下記のように考えてみましたが上手くいきませんでした。 質問内容が上手く説明ができないため 分かりづらいかもしれませんが、 もし、お分かりになりましたら教えてください。 ------------------------------ Sub test2() Dim i As Long For i = 2 To 7 Select Case Cells(i, 3).Value Case "食べ物" Rows(i).Select Selection.Copy Sheets("食べ物").Select Rows(i).Select ActiveSheet.Paste Case "乗り物" Rows(i).Select Selection.Copy Sheets("乗り物").Select Rows(i).Select ActiveSheet.Paste Case Else Rows(i).Select Selection.Copy Sheets("その他").Select Rows(i).Select ActiveSheet.Paste End Select Next End Sub

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。