Excel2003のVBAを使い、以下のようなことをやろうとしています。

・CSVファイルを読み込む。
・CSVファイルの1レコードを1シートに展開する。その際、原本のシートがあり、それをコピーして展開する。
このコピー結果が256シートを超えることはない。
・全レコードの展開が終わったら、生成したシートを別ブックへ移動させる。移動後、生成したシートは削除してしまう。
・別のCSVファイルを読み込み、同様の処理を行う。

この時、最初のCSVファイルから生成されたシート数がクリアされず、次のCSVファイルへ引き継がれているようで、
2本のシート数合計が256を超えるとエラーになります。

 例)1本目のCSVファイルから生成されたシート数 178シート
   2本目のCSVファイルから生成されたシート数 145シート ←このシートをコピーしている途中で256を超えるとエラーになる。


Q このシート数カウンタ(?)を意図的にクリアする方法がありますでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>この時、最初のCSVファイルから生成されたシート数がクリアされず、


>次のCSVファイルへ引き継がれているようで
シートの実態はクリアされていて、内部のカウンタだけ残っているということでしょうか?
別の内部カウンタが存在するのか不明ですが、シートをクリアした時にWorksheets.countが正しい値を示さないということでしょうか?

どのようにしてクリアなさっているのか不明ですが、クリアの方法を変えるなどで、正しく認識されるようにできないのかなぁ?
あるいは、VBA側でシート数を数える変数を作成しておいて、その変数で制御するようにすれば256シートを超えなくても済みそうですが…
(Worksheets(1)~Worksheets(256))
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

クリア時にWorksheets.countを見たのですが、
正しい値を示しています。

お礼日時:2009/05/29 18:23

No2です。



>クリア時にWorksheets.countを見たのですが、
>正しい値を示しています。
それなら、シートの数が制限を越えることは無いと思いますが??

ひょっとして値だけクリアして、新しいシートをさらに150シート作成しようとしているのでしょうか?
もしそうであるなら、シート数がオーバーするのは当然です。
以下のいずれかの方法でいけるでしょう。

1)クリアするときにシートを削除して(Worksheets.count=1になる)、
 次のブックの処理を始める

2)わざわざシートを削除する必要はないので、1ブックの処理は既存の
 シート1から始めて、シートがないときに追加作成するようにする。
 (無条件でシートを作成するようなことはしない)

3)No3様のご提案のように、1ブックの処理に新しいブックを当てて、次の
 処理の前にオールクリア(=次はまた新しいブックで処理)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり申し訳ございません。

その後、教えていただいた方法等を色々試したのですが、
マイクロソフトのサポートオンラインに解決方法がありました。
http://support.microsoft.com/kb/210684/ja

教えていただいた皆様に改めて御礼申し上げます。

お礼日時:2009/06/05 15:05

細かい事はわからないのですが、


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を超えないのでは?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なるほど、別ブックにで処理するのですか。
ちょっと試してみます。

お礼日時:2009/05/29 18:26

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

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

残念ながら、シート数に関する変数は使っていません。

お礼日時:2009/05/29 18:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qマクロでシートタブ色の変更

例えば、A1に数字が入ればシートタブが青色に、A1とA2に数字が入ればシートタブが黄色に、
A1とA2とA3に数字が入ればシートタブが赤色に、このようにするにはどのように記述したら良いでしょうか、よろしくお願いいたします。

Aベストアンサー

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("A1:A3"), Target) Is Nothing Then
Worksheets("Sheet1").Tab.ColorIndex = -4142
If Range("A1") <> "" And Range("A2") <> "" And Range("A3") <> "" Then
Worksheets("Sheet1").Tab.ColorIndex = 3
ElseIf Range("A1") <> "" And Range("A2") <> "" Then
Worksheets("Sheet1").Tab.ColorIndex = 6
ElseIf Range("A1") <> "" Then
Worksheets("Sheet1").Tab.ColorIndex = 5
End If
End If
End Sub
これで良いのかな。
ーー
結構、初心者には勉強点があるように思う。
(1)シートイベントというものの勉強
(2)マクロの記録でタブの色を変えるコードを勉強する
また色を抹消するコードを勉強する。
(3)3つの場合の場合分け(条件の多いほうから聞く)
(4)A1:A3以外は素通りさせる方が良いかな(ntersectの利用。これはIFでORを使っても出来る)
数字かどうかのチェックを略している(IsNumericで、使って追加してください)
しかしこの質問のアイデアは珍奇で使えるのかな(今まで質問に出たこと無いような)。
Changeイベントを扱う難しさなどがある。上記コードでは多数例テストして無いので、出来るだけテストして見てください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("A1:A3"), Target) Is Nothing Then
Worksheets("Sheet1").Tab.ColorIndex = -4142
If Range("A1") <> "" And Range("A2") <> "" And Range("A3") <> "" Then
Worksheets("Sheet1").Tab.ColorIndex = 3
ElseIf Range("A1") <> "" And Range("A2") <> "" Then
Worksheets("Sheet1").Tab.ColorIndex = 6
ElseIf Range("A1") <> "" Then
Worksheets("Sheet1").Tab.ColorIndex = 5
End If
End I...続きを読む

QAccess又はExcelで256項目を超えるCSVファイルをインポートしたい

たとえば500項目(フィールド)あるCSVファイ
ルを取り込みたいのですが、AccessもExcelも
256項目までしかインポートできません。


500項目を200項目ごとに
 1回目   1~200項目まで
 2回目 201~400項目まで
 3回目 401~500項目まで
分けてでもいいのですが。


又直接でなくても
別途、エディッタを使うとかで加工後、Access
にインポートするでもOkなんです。

ただ、レコード件数が多いため1レコード毎に加工
するのは無理なんです。


何かよい方法はないでしょうか? 

Aベストアンサー

http://rd.vector.co.jp/soft/win95/business/se096074.html

http://www.koka-soft.com/okada/koka_software/chgfld.htm


これあたりで 事前に加工できそうですが・・・

QofficeXP Excel シートタブの色変更が出来るタイプと出来ないタイプ??? 

自宅も会社もofficeXPなんですが、少し違うところがあります。

エクセルで、自宅のはシートのタブが色変更できます。
シートタブ上で右クリックから色を選べます。

でも、会社のは同じXPなのに、右クリックからこの機能が出てこないのです。
これってバージョンによるものなんですか?

それとも、法人向けはこの色変更の機能を抜き取っているんですか?

どなたかわかるかたいますか?
よろしくお願いします。

Aベストアンサー

こんにちは

バージョンの違いがあるのでは、バージョンは?
検索していると2002からだとか(未確認ですが)
http://www.relief.jp/itnote/archives/002047.php

では。

Q列数が4000を超えるcsvファイルをExcelで読み込むには?

横に4000くらいカンマで区切られたcsvファイルがあります(各々は数値)。Excelで列数の限界は256かと思われますが、それ以上の列数のファイルを扱うことは可能でしょうか?目的は、個別にグラフデータの数値として認識させたいのです。
その他扱えるツールがあるようでしたら、そちらもお教えいただければうれしいです。プログラム等での縦横入れ替えは、この度は除外させてください。

言葉足らず、不適切な表現はお詫び・補足いたします。

Aベストアンサー

こんにちは。

>プログラム等での縦横入れ替えは、この度は除外させてください。

現行の256列で、物理的には、そのままインポートするのは常識的に不可能です。もし、現行の256列にインポートするなら、正規表現付きのテキスト・エディタで、改行コードを入れればよいのでは?それがダメなら新しいExcelを購入すればよいのではありませんか?

もう少し基本的な話になるけれども、それは、シーケンシャルファイルなど、コンマ切り(CSV)テキストファイルでも、通常取り扱うCSVでも、似ていて非なるものだと思うのです。いわゆる原始型のデータ・ソースです。もともと、そういうデータを、そのままインポートする機能は、Excelにはありません。VBAを使用不可とするなら、Excelの外部データのインポート機能で、ODBCを利用して、CSVファイルをデータベース用に置き換えてインポートすることは可能かもしれませんが、私はやったことがありません。

また、データベース用のソースを加工するフリーソフトウェアが、「窓の杜」に出ていたと思います。

私は、いままで、どこでも同じ質問が何度もみましたが、みな同じような質問で、ひとつも、Excelで解決したというのをみたことがありません。それは、データの種類が違うからなのです。

こんにちは。

>プログラム等での縦横入れ替えは、この度は除外させてください。

現行の256列で、物理的には、そのままインポートするのは常識的に不可能です。もし、現行の256列にインポートするなら、正規表現付きのテキスト・エディタで、改行コードを入れればよいのでは?それがダメなら新しいExcelを購入すればよいのではありませんか?

もう少し基本的な話になるけれども、それは、シーケンシャルファイルなど、コンマ切り(CSV)テキストファイルでも、通常取り扱うCSVでも、似ていて非なるものだと...続きを読む

Q[EXCELマクロ] シートタブに自動で色をつけるには?

シートが、1日~31日まであり、シート内は31枚とも全て同じで、
例えば、セルA1 に、日付(平成19年7月18日と表示)があったとき、
その日付を参照して、土曜日なら青色、日曜日なら赤色、というふうに
自動で31枚全てのタブの色を変更してくれるようにしたいのですが、
可能でしょうか?
また可能であれば、どのようにマクロを組めばいいでしょうか?

Excel2003を使用しています。
よろしくお願い致します。

Aベストアンサー

全シートのセルA1に日付が入っている場合でのサンプル。

Sub test()
  Dim sh As Worksheet
  Dim hi As Integer
For Each sh In Worksheets
  With sh
     Select Case Weekday(.Range("A1").Value, vbMonday)
         Case 6
         .Tab.ColorIndex = 41
         Case 7
         .Tab.ColorIndex = 3
         Case Else
         .Tab.ColorIndex = xlColorIndexNone
     End Select
 End With
Next
End Sub
日付以外が入っている場合は、修正が必要かもしれません。
ご参考程度として下さい。

QExcel: 256列以上の列数データ(複数シート)のピボットテーブル

非常に大きなデータを扱ってピボットテーブルを作ろうとしています(串刺し集計ではありません)
「複数のワークシート範囲」からデータを指定したのですが、レイアウト画面では例えば20アイテムを選択しても、「行」「列」「値」「ページ1」という4項目しか選択することができず、データ範囲に指定した項目を選ぶことができません。
何かよい方法をご存知の方はいらっしゃいませんでしょうか??

Aベストアンサー

pinkwitheさんのようにセルとセルを=A1&B1&C1
などとして、複数のセルをまとめるか、
一度CSV形式でファイルを保存して、
そのファイルを開くときに、1つのセルに複数の列が入るように、自分で区切り位置を指定してあげればよいと思います。
ピボット終了後、またCSVで保存して、今度は、現在の区切り位置である , 「カンマ」で読み込めばよいのではないでしょうか。

Q該当月のみにシートタブに自動で色

いつもお世話になります。
Win7 Excell2010 てす。

記入 顧客名簿 1 ~ 12  とシートがあります。

1)記入、顧客名簿 のシートには色付けしています。
2)1 ~ 12 は半角文字です。 (1月~12月を意味しています)

例えば、
A1 のセルに 8 と 今月は 8月ですから 8のシートタブに自動的色付けさせたいのですが可能でしょうか。
いろんなサイトで検索しましたが見つけることができませんてした。
VBAの記述と思いますがもし可能ならご指導いただけませんか。

Aベストアンサー

例として。

Dim sh As Worksheet
    For Each sh In Worksheets
        If sh.Name = Month(Now) Then
            sh.Tab.Color = 255    ' 赤
        Else
            sh.Tab.ColorIndex = xlNone
        End If
    Next

これを「開く時」イベントに書いておくと、
おそらくお望みの
・該当月の見出しは「赤」
・それ以外の見出しは「無色」
に出来ます。

VBAの使い方は別途お調べくださいませ。

QExcelのシートをシート毎他のファイルにコピーしたい。

Excelのシートをシート毎他のファイルにコピーしたい。

おはようございます。
Excelのシートをシート毎他のファイルにコピーしたいのですが、
元のファイルのシートをコピーしても、貼り付け先のファイルが
参照から見えないときがあります。
これは何が原因でしょうか。

両方のファイルともデスクトップにおいて実行しているのですが。
Win 7 Office 2007 だからでしょうか。
原因としては何が考えられるのでしょうか。

Aベストアンサー

回答No3です。
移そうとするブックがエクセルに取り込まれている状態、すなわちタスクバーにそのブック名が表示されている状態になっていなければ「移動先ブック名」をプルダウンしても名前が表示されません。
移そうとするブックを必ず取り込んでおくことが必要です。

QEXCELシートのタブの色

EXCELでシート(初期設定でsheet1とかsheet2とか)の色が変えられたと思ったんですけどやり方を忘れてしまいました。
教えてくださ~い!

Aベストアンサー

こんにちは。maruru01です。

一応、2000以前での方法を載せてあるページです。
裏技的なので、おすすめしませんが。

http://xcelfiles.homestead.com/Excel01_J.html#anchor_14133

参考URL:http://xcelfiles.homestead.com/Excel01_J.html#anchor_14133

QCSVファイルからエクセルへの展開時

CSVファイルに「電話番号」が有る場合、
エクセルに展開すると3********のように「03」の「0」がなくなってしまいます。
CSV内には確かに03とあるのですが。。。
どのようにすれば「03********」としてエクセルへ取り込むことができるのでしょうか?
電話利用金明細を取り込んだときに不便なのです。、

Aベストアンサー

▼操作手順:先頭が「0」の数値を文字列と認識させてCSVファイルを開く
Windowsエクスプローラやフォルダウィンドウで、
CSVファイルの拡張子を「.csv」から「.txt」に変更
 ↓
Excelのメニュー[ファイル]-[開く]をクリック
 ↓
[ファイルを開く]ダイアログ-[ファイルの種類]コンボボックスで、
「テキストファイル(*.prn;*.txt;*.csv)」を選択
 ↓
先に拡張子を「.txt」に変更したファイルを選択し、[開く]ボタンをクリック
 ↓
[テキストファイルウィザード-1/3]ダイアログ-[元のデータ形式]欄で、
「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」オプションボタンをOnにして[次へ]ボタンをクリック
 ↓
[テキストファイルウィザード-2/3]ダイアログで、
[区切り文字]-[カンマ]チェックボックスをOnにし、
[次へ]ボタンをクリック
 ↓
[テキストファイルウィザード-3/3]ダイアログ-[データのプレビュー]欄で、
頭の「0」を表示させたいフィールドを選択後、
[列のデータ形式]欄で「文字列」オプションボタンをOnに
 ↓
[データのプレビュー]欄で、
選択していたフィールドの上部に表示されている文字列が、
「G/標準」から「文字列」になったことを確認
 ↓
[テキストファイルウィザード-3/3]ダイアログ-[完了]ボタンをクリック


http://www.relief.jp/itnote/archives/000839.php
http://www.morgan.co.jp/kiso/3file-4.htm

でできると思います。

▼操作手順:先頭が「0」の数値を文字列と認識させてCSVファイルを開く
Windowsエクスプローラやフォルダウィンドウで、
CSVファイルの拡張子を「.csv」から「.txt」に変更
 ↓
Excelのメニュー[ファイル]-[開く]をクリック
 ↓
[ファイルを開く]ダイアログ-[ファイルの種類]コンボボックスで、
「テキストファイル(*.prn;*.txt;*.csv)」を選択
 ↓
先に拡張子を「.txt」に変更したファイルを選択し、[開く]ボタンをクリック
 ↓
[テキストファイルウィザード-1/3]ダイアログ-[元の...続きを読む


人気Q&Aランキング