シート間の移動でエラーが発生しました。

このQ&Aのポイント
  • シートの移動においてエラーが発生しました。シートの順番やIndex番号の関係性について問題があり、正しい順番でシートを処理する方法を模索しています。
  • シートの移動に関する問題が発生しました。存在しないIndex番号のシートにアクセスするとエラーが発生し、またシートの順番が変更されている場合も正しく処理できません。
  • シートの順番やIndex番号による移動で問題が発生しました。シート名に数字を使うことで順序を保持する方法も考えられますが、それではシート名の自由度が低くなってしまいます。より良い解決策を模索しています。
回答を見る
  • ベストアンサー

シート間の移動でエラーが発生しました。

シート間の移動でエラーが発生しました。 ActiveWorkbook.Indexを基準にsheet(1)からsheet(10)までループを組みました。 調べてみると、途中に削除されて存在しないIndex番号がありました。存在しないIndex番号のシートでエラーが発生しますし、また画面上で10枚シートが存在していても、全てのシートを「順番に」(1~10まで順番通りに)処理しようとすると、最後のシートをどう指定すれば良いかも困ります。 さらに手作業でシートの順番が変更されていることも判明しました。ですから画面上ではシートが規則正しく並んでいても、Index番号は正しく並んでいません。 こういうワークブックに対して、画面上のシートの並びの通りに順番にシートを移動しながら処理を行うにはどうすれば良いでしょう。 私に思い浮かぶのは、シート名を1,2,3,・・・・という風に数字にして、ActiveWorksheet.IndexではなくActiveWorksheet.Nameを基準としたループを行うということですが、そうするとシート名に自由が無くなります。なんとなく悔しい。 何か良い方法がないでしょうか。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

試してみました Indexで取得できるのは、As Worksheet で宣言しても、Graphシートを含む番号の様ですが、 Graphシートは存在していませんか? Sub test() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets Debug.Print sh.Name, sh.Index Next sh End Sub 'Graphシートが最初に入れてあり、それのIndexが1とされます 'Sheet2は削除してありますが、そのIndexは他に割り振られます (単純にシートの並び順でつけられる) Sheet3 2 Sheet5 3 Sheet1 4 Sheet4 5 Sub test2() Dim sh As Worksheet Dim i As Long For i = 1 To ActiveWorkbook.Worksheets.Count Debug.Print i, Worksheets(i).Name Next End Sub 'これだと、1から指定できます。test()で取得されるIndexと違っています。 1 Sheet3 2 Sheet5 3 Sheet1 4 Sheet4

makoji
質問者

お礼

私に勘違いがありました。 ワークシートのIndexとオブジェクト名を混同していました。オブジェクト名の場合、あるシートを削除するとそのシートのオブジェクト名は欠番となり、新たに別のシートを挿入しても、そのオブジェクトは再利用されません。 皆さんが、私がやったのと同じようにIndexを基準にループを廻して、先頭のタブから順番に処理できているのを見て、他に原因があるはずと、再度コードを見直したところ、別のバグが見つかりました。 ご迷惑をお掛けしました。 すみません。

その他の回答 (1)

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

なんか、質問内容が判然としません。 (1)シートタブの並んでる順に処理したい (2)シート名の順に処理したい の、どちらでしょう。 For i = 1 To 10 Debug.Print Worksheets("Sheet" & i ).Name なんて書き方をしてるのでしょうか? (1)の並んでる順なら、 For i = 1 To Worksheets.Count Debug.Print Worksheets(i).Name ってな感じになります。

makoji
質問者

お礼

mitarashiさんへのレスに書いたとおり、私の不注意でした。 てっきりIndexとオブジェクト名を同じと思っておりました。大変失礼しました。 皆様にご教授いただいたコードを検分する中で、この愚昧に気づかせていただきました。 ありがとうございます。

関連するQ&A

  • excelマクロ シートの移動

    excelのシートを移動するときにマクロでイベントを発生させたい。 移動前のシートにWorksheet_Deactivate()の処理を 書いたのですが移動前のシートをselectしているため 何度もループしてしまいます。 何かよい方法はありますでしょうか?

  • シートは存在するのに、実行時エラー40036が発生

    シートは存在するのに、実行時エラー40036が発生する エクセルで、「シート名」と言うシートは存在するのに、 Sheets("シート名").Select が「アプリケーション定義またはオブジェクト定義のエラー 」というエラーになります。 1度目のマクロは問題なく動くのですが、 同じプロシージャーをもう一度実行しようとするとエラーが発生します。 そもそも 実行時エラー40036と1004は何が違うのでしょうか? エクセル2010です。 再起動したら治ります。

  • Excel2007でBOOK間のシート移動をVBAで行うとエラーになる

    Excel VBAで開発されたソフトの改造を行ってますが、Excel2007で動作しないマクロがあり困ってます。 <開発環境> ・WindowsXP Pro SP3 ・Celeron 540(1.8GHz) ・メモリ1GB ・Excel2007 SP1 (Microsoft Office2007) 改造元ソフトはOffice2000で開発されており、Excel2007で動作するとマクロエラーが発生する処理があります。 因みにまだソフト改造はしてなく、そのままExcel2007で動作させるだけでマクロエラーが発生します。 発生する箇所はVBAで開発されており、下記のコマンドです。 Sheets(移動元シート名).Move Before:=Application.Workbooks(移動先ブック名).Sheets(1) 異常の内容は下記になります。 ------------------------------- ?err.Description 移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー] コマンドと [貼り付け] コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 ?err.Number 1004 ------------------------------- 移動元BOOKは1シート、移動先BOOKは1シートあります。 これをExcel2000で実行すると正常にシートが移動できます。 (移動元BOOKのシートがなくなりBOOKが終了して、移動先BOOKは2シートになります) Excel画面の移動元シートを選択して、右クリックメニューの「移動またはコピー」で移動先ブックを指定して移動すると 「移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー] コマンドと [貼り付け] コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。」 とVBAから実行した時と同じ内容のエラーダイアログが表示されました。 (Excel2000では手動でも移動できました) Excel2007では1シートで構成されたBOOK間の移動はできないのでしょうか? また、これをVBAで対策しようとした場合にどうしたら良いのでしょうか? ネットで調べましたが判らず、ここで質問させて頂きました。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • EXCEL VBA シートをコピーする時にエラーが発生してしまう件

    EXCEL VBAでシートをコピーするマクロを作成しているのですが、【10】にて時々エラーが発生してしまいます。100シート分ぐらいをコピーしたいのですが、途中で30シートぐらいの所で止まってしまいます。 (シートが10前後だと問題なく処理が終ります) 止まってしまうシートはまちまちなので、 シート名称が問題だとは考えにくいです。 ちなみに【8】でのsheets_nameは取得できてます。 前後に何かを入れることにより解決するのか、 ソース本体をいじれば解決するのか、 詳しい方、何卒、解決方法を ご指導いただけますよう宜しくお願いします。 【1】 '取得した配列の数だけループを行う。 【2】 For i = LBound(test) To 配列数 - 1 【3】 【4】 列番号 = Mid(test(i), 4, 3) 【5】 Debug.Print "test(" & i; ") : " & test(i) 【6】 【7】 'FORMATシートをコピーし、その名称を変数名にする 【8】 sheets_name = Worksheets("実績").Cells(18, 列番号).Value 【9】 【10】 Worksheets("FORMAT").Copy After:=Sheets("FORMAT") 【11】 【12】 ActiveSheet.Name = (sheets_name) 【13】 Cells(4, 3) = (sheets_name)

  • マクロ実行時のエラー処理について

    VBAのエラー処理の方法について教えて下さい。 エクセル2007を使用しています。 VBAでシートの名前を以下のように変更しようとしています。 シート名1 ← "1" シート名2 ← "2" シート名3 ← "3" 記述内容は以下の通りです。 '〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 On Error GoTo Err1  For i = 1 to 3   Sheet(i).Name = i  'Sheet(i)の名前を変数"i"に変更する。 Err1:   Sheet(i).Delete   '上記処理でエラーが発生した場合はそのシートを削除する。  Next i '〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓  以上の処理を実行しようとした場合、同じ名前の既存シートが存在していたり、シート名に含まれてはいけない文字列が含まれていたりした場合、エラーが発生しますが、On Errorステートメントを使用してエラーが発生した場合の処理を実行したいのですが、1回目のエラーについてはOn Errorが働くのですが、2回目になるとOn Errorが働きません。  2回目以降のエラーも1回目と同様に処理したいのですが、コードの記述の変更方法や又は他の処理方法を教えて下さい。 エラーの種類は以下の通りです。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 実行時エラー'1004': シートの名前をほかのシート、Visual Basicで参照されるオブジェクト ライブラリまたは ワークシートを同じ名前に変更することはできません。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 以上。 尚、On Error Resume Nextは処理を無視するだけなので使用したくありません。 以上、宜しくお願い致します。

  • Excelシートの移動について

    いつもお世話になります。Excel2000を勉強中の初心者です。 ひとつのブックにワークシートが100枚くらいあります。 各シートに担当者の名前をつけています(例、山田、鈴木、田中、佐藤、安部...)。しかし、sheet1から新規シートを作成するたびに、担当者の名前をランダムにシート名としてつけていたため、ブック内のシートの順番がバラバラの状態です。これらのシートをあいうえお順になるようにブック内でシートの移動をしたいのですが、シート枚数が多いので、一つずつ移動していくのは大変な作業になりそうです。 なにか、一発であいうえお順にシートを移動することができる方法はないでしょうか? よろしくお願いします。

  • 【早急回答求む】ページ移動について

    【早急回答求む】ページ移動について 質問です。 例えば http://www.test.com/input.zip が存在するとします。 もし「http://www.test.com/」以下にある全ての.zipをアクセスした時に、 自動的にリダイレクト(別ぺーじ 例:http://www.test.com/index.html)等に 移動させたい場合どうすれば良いのでしょうか? .htacces のリダイレクトの場合、 無限ループが発生してしまいます。 逆に"DirectoryIndex index.html"と設定すると 500Errorになってしまいます。 どうすれば良いでしょうか・・・。

    • ベストアンサー
    • HTML
  • ネットワークID エラーが発生します

    OS:win2000pro ドメイン:TEST-DOM 端末(コンピュータ名:TEST-01)の状態が不安定になり、OSを再インストールしました 再度、同設定にしていますと [マイ コンピュータ]-[システムのプロパティ]-[ネットワークID(シート)]-[プロパティ]にて  識別変更画面にて、コンピュータ名を元の名前に戻そうとすると「コンピュータ名を"TEST-01"に変更中に次のエラーが発生しました:アカウントは既に存在します」のエラーが発生します  解決方法をご存知の方ご教示お願いいたします

  • Ubuntu、ファイル移動によるエラー発生について

    Ubuntu10.10Desktopを中古のノートPCにフルインストールしたのですが、ファイルの 移動でエラーが発生したので質問させていただきます。 デスクトップの壁紙を変えようと、ネットから気に入った壁紙をデスクトップにダウンロードして その画像を、ファイルシステム→usr→share→backgroundsと移動して、backgroundsフォルダに、ドラッグアンドドロップで移動しようとすると、 ”Docks.jpg”の移動中にエラーが発生しました。 /usr/share/backgroundsの中にファイルを移動する際にエラーが発生しました。 と表示されます 詳細を表示すると ファイルを移動する際にエラー:許可がありません と表示されます。 どうすればドラッグアンドドロップで移動できますか? システム→システム管理→ユーザーとグループとたどってユーザー設定でアカウントの種類は管理者で、高度な設定でユーザーの権限は、すべてチェックを入れてます。 このユーザー名はインストールするときに作成したユーザー名です。 管理者ですべての権限があるはずなのに、なぜファイルの移動ができないのでしょうか?

  • エクセルのシートコピーのエラー

    Windows7 エクセル2007です。 ブック間のシートコピーでエラー発生し挿入できません。原因と挿入方法お願いします。 エラーメッセージ; ------------------------------- 移動先またはコピー先のブックの行列数が元のブックの行数列よりも少ないため、シートを移動先またはコピー先のブックに挿入されません。 データを別のブックに移動またはコピーするにはデータを選択して、「コピー」コマンドと「貼りつけ」コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 ----------------------------------- やりたいこと; ファイル名AAAの一つのシートをファイル名BBBのシート末尾にコピーしたい。

専門家に質問してみよう