VBAのコピーメソッドを使い、一時的に256以上のシートを扱うことが可能ですか。

このQ&Aのポイント
  • Excel2003のVBAを使い、CSVファイルのデータを読み込み、1レコードごとに新しいシートに展開する処理を行いたいと思っています。しかし、先に展開したシートの数が256を超えるとエラーが発生してしまいます。このシート数カウンタをクリアする方法はありますか?
  • Excel2003のVBAを使用して、CSVファイルのデータを1レコードずつ新しいシートに展開する処理を行っています。ただし、この処理を繰り返していると、展開したシートの数が256を超えるとエラーが発生します。このシート数カウンタをリセットする方法はありますか?
  • Excel2003のVBAを利用して、CSVファイルのデータを1シートに1レコードずつ展開する処理を行いたいのですが、展開したシートの数が256を超えるとエラーが発生してしまいます。このシート数カウンタを初期化する方法はありますか?
回答を見る
  • ベストアンサー

【Excel2003】VBAのコピーメソッドを使い、一時的に256以上のシートを扱うことが可能ですか。

Excel2003のVBAを使い、以下のようなことをやろうとしています。 ・CSVファイルを読み込む。 ・CSVファイルの1レコードを1シートに展開する。その際、原本のシートがあり、それをコピーして展開する。 このコピー結果が256シートを超えることはない。 ・全レコードの展開が終わったら、生成したシートを別ブックへ移動させる。移動後、生成したシートは削除してしまう。 ・別のCSVファイルを読み込み、同様の処理を行う。 この時、最初のCSVファイルから生成されたシート数がクリアされず、次のCSVファイルへ引き継がれているようで、 2本のシート数合計が256を超えるとエラーになります。  例)1本目のCSVファイルから生成されたシート数 178シート    2本目のCSVファイルから生成されたシート数 145シート ←このシートをコピーしている途中で256を超えるとエラーになる。 Q このシート数カウンタ(?)を意図的にクリアする方法がありますでしょうか。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

>この時、最初のCSVファイルから生成されたシート数がクリアされず、 >次のCSVファイルへ引き継がれているようで シートの実態はクリアされていて、内部のカウンタだけ残っているということでしょうか? 別の内部カウンタが存在するのか不明ですが、シートをクリアした時にWorksheets.countが正しい値を示さないということでしょうか? どのようにしてクリアなさっているのか不明ですが、クリアの方法を変えるなどで、正しく認識されるようにできないのかなぁ? あるいは、VBA側でシート数を数える変数を作成しておいて、その変数で制御するようにすれば256シートを超えなくても済みそうですが… (Worksheets(1)~Worksheets(256))

mogmogtae
質問者

お礼

ご回答ありがとうございます。 クリア時にWorksheets.countを見たのですが、 正しい値を示しています。

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

No2です。 >クリア時にWorksheets.countを見たのですが、 >正しい値を示しています。 それなら、シートの数が制限を越えることは無いと思いますが?? ひょっとして値だけクリアして、新しいシートをさらに150シート作成しようとしているのでしょうか? もしそうであるなら、シート数がオーバーするのは当然です。 以下のいずれかの方法でいけるでしょう。 1)クリアするときにシートを削除して(Worksheets.count=1になる)、  次のブックの処理を始める 2)わざわざシートを削除する必要はないので、1ブックの処理は既存の  シート1から始めて、シートがないときに追加作成するようにする。  (無条件でシートを作成するようなことはしない) 3)No3様のご提案のように、1ブックの処理に新しいブックを当てて、次の  処理の前にオールクリア(=次はまた新しいブックで処理)

mogmogtae
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなり申し訳ございません。 その後、教えていただいた方法等を色々試したのですが、 マイクロソフトのサポートオンラインに解決方法がありました。 http://support.microsoft.com/kb/210684/ja 教えていただいた皆様に改めて御礼申し上げます。

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

細かい事はわからないのですが、 Sub sample() Dim genponBook As Workbook '原本ブック Dim kekkaBook As Workbook '結果ブック Set genponBook = Workbook.Add '原本ブックを作る Set kekkaBook = Workbook.Add '結果ブックを作る '処理 genponBook.Close SaveChanges:=False '原本ブックを保存せずに閉じる kekkaBook.Close SaveChanges:=False '結果ブックを保存せずに閉じる End Sub とすれば、各々256を超えないのでは?

mogmogtae
質問者

お礼

ご回答ありがとうございます。 なるほど、別ブックにで処理するのですか。 ちょっと試してみます。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

シート数に関する変数にByte型を使用していませんか?

mogmogtae
質問者

お礼

ご回答ありがとうございます。 残念ながら、シート数に関する変数は使っていません。

関連するQ&A

  • Excel2007で2003のVBAが実行時エラー1004

    普段は事務員の非プログラマーです。 Excel2000,2003で動いていたマクロを2007でも動くようにしてほしいと言われて頑張っているのですが、どうすればいいのか見当がつきません(*_*) どうぞ知識者の皆様のお知恵をお貸しください。 Excel2003で読み取りのみのVBAのファイルで、ボタンを押すとマクロが実行され、別CSVファイルを指定しVBAのファイルの別シートとして読み込みます。次に別txtファイルを指定してVBAのファイルの別シートに読み込みます。最後にその2つのシートの必要な個所のみ結合して、新しいcsvファイルとして保存する処理をしています。 Excel2007でこれを実行すると、csvファイルを読み込むときに次のようなエラーがでます。 「実行時エラー'1004':移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー]コマンドと[貼り付け]コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 マクロの中身はこのような感じです。 エラーは最終行の「ActiveSheet~」ででています。 Sub openExcel() 'Step1 open excel Dim ExcelFileOpen As String ExcelFileOpen = Application.GetOpenFilename(FileFilter:="Excel Files,*.csv") If ExcelFileOpen <> "False" Then Workbooks.OpenText Filename:=ExcelFileOpen ActiveSheet.Move After:=Workbooks(ThisWorkbook.Name).Sheets(1) どうぞよろしくお願いいたします(_ _)

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

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

  • ACCESS EXCELシートのコピー

    ACCESSでEXCELシートのコピーを教えてください。 ブックに原本というシートがあり、それを先頭にCOPYして シート名を店舗名にしようと思っています。 原本が原本(2)にCOPYはできるのですが、名前の変更が 出来ません。 原本(2)の(2)がまずいのか、”インデックスが有効の範囲にない” でエラーになります。 COPYする時に、直接、名前を指定出来るならその方がありがた いのですが、何か方法はありませんか? EXCELブックOPENして、店舗マスタを読みながらCOPYするようにしています。 xlsobj_.sheets("原本").Copy before:=xlsobj_.sheets("原本") xlsobj_.sheets("原本(2)").NAME = 店舗名 単純に原本と言うシートを10個程度(店舗が10店舗ぐらいあります) COPYしてそれぞれのシート名を店舗名にしたいだけです。 宜しくお願い致します。

  • VBSでExcelシートのコピー

    VBSである決まったExcelシートを別なExcelファイルにシートコピーできる方法はないですか? やりたいことは、Excelファイル「A.xls」内の「Sheet1」というシートをExcelファイル「B.xls」の一番末尾に「Sheet1」をコピーする、です。 (Excelのシート名上で右クリック→「移動またはコピー」→移動先ブック名を選択→「末尾へ移動」、「コピーを作成」にチェック、と同じことをVBS上で行いたいのですが。)

  • 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で対策しようとした場合にどうしたら良いのでしょうか? ネットで調べましたが判らず、ここで質問させて頂きました。 判りにくい説明で申し訳ありませんが、よろしくお願いします。

  • exel2007のブックシートコピーができない(windows7)

    EXEL2007、Windows7です。 ファイル間で、ブックシートのコピーをしたいです。 コピー元のシートを右クリックでメニューを出し、「移動またはコピー」で コピー先を指定します。 すると「コピー先のブックの行列数が元のブックの行列数よりも少ないためシートを移動先のブックに挿入できませんでした」 とエラーがでます。 EXEL2003、WinXPの時には問題なくできてました。 原因がわかりません。 よろしくお願いします。

  • 別ブックへのシートのコピー(Excel)

    エクセル上で、Aというブックのaというシートを、Bというブックにコピーしようと思っています。 過去の質問を検索したらNo2459324でわかりやすい解答があったので試してみたのですが、 AとBのブックを画面上で両方開いて、Aブックのaシート上で、「編集」→「シートの移動またはコピー」とすると、確かに小さな入力ボックスがでてくるのですが、その中の「移動先ブック名」の欄にBというブック名が表示されないので、選択先としてBブックを指定できないのです(その欄にブック名の手入力もできません)。 「(新しいブック)」を選択すると、AでもBでもない新しいブックが生成されてそちらにコピーされてしまうようです。 どのようにしたらブックAからブックBにシートをコピーできるでしょうか。

  • Excelのシートのコピー

    現在268枚のシートが入ったファイルがあります。 1つ1つのシートはそれほど情報量が多いわけでもなく、大体印刷すると1ページにおさまるほどの量で 色もあまり使っていなく、単なる文字&表くらいです。 このファイルにあるシートを「移動またはコピー」を選んでコピーをすると、エラーは出ませんが、コピーできません。 移動はできます。 単に「挿入-新規シート」を選ぶと新規にワークシートを挿入することは出来ます。 (試しに370枚までやってみましたが、何のエラーも出ませんでした。) また、このファイルのシートを「移動またはコピー」で他の新規ブックにコピーしようとしてもできません。 移動はできます。 手作業ではなく、VBAではどうかと思いやってみましたが、やはりコピーはダメで移動はOKでした。 これはいったいなぜなのでしょうか? Excelは2000です。 2台のPCで試してみましたが、どちらでもダメでした。

  • Excel2007 ブック間でのシートコピー

    Excel2007を使っています。 ブックABCのシート1を、ブックEFGにコピーしたいのですが・・・ コピーしたいシート名(画面下のタブ)を右クリックし、「移動またはコピー」をクリック、「移動先ブック名」でブックEFGを選択したいのですが、「新しいブック」しか選択できません。 新しいブックにコピーしても、それをブックEFGで取り込めれば いいのですが、何か方法はないでしょうか? よろしくお願いします。

  • WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

    よろしくお願いします。 今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは ここから//////// 'ブックを開く Workbooks.Open コピー元のブックのパス 'シートをコピー Worksheets.Item(コピーするシート名).Copy _ after:=Workbooks(コピー先のブック名).Sheets(1) 'ブックを閉じる Application.DisplayAlerts = False Workbooks.Item(コピー元のブック名)Close True Application.DisplayAlerts = True ここまで//// なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。 ご存知の方がいらっしゃいましたら、ご教授お願いします。

専門家に質問してみよう