• ベストアンサー

EXCEL VBA オートシェイプナンバーのリセット

EXCEL2000 VBAの初心者です。 エクセル表の数字(位置座標や大きさ)に従い、数十個のオートシェイプの丸や四角を、何度も配置・消去させるプログラムを作っています。 一度に多くのオブジェクトを配置・消去しているので、自動発生するオブジェクトの番号が、現在20000程度になっています。 現状では問題ないのですが、自動発生番号に限りがあるとエラーが出ると思います。そこで、  1.オブジェクトの自動発生番号には限りがあるのか、  2.オブジェクトの発生番号を1にリセットすることは出来るのか。 を教えていただきたく、よろしくお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 下記はあくまで「オブジェクトの自動発生番号」についての記述であり、 シートにその数だけオブジェクトを挿入できるかは問題にしてません。 ■ Q1.オブジェクトの自動発生番号には限りがあるのか 多分ありますが、正しいところはよく分かりません。以前調べた限り では、シェープの内部カウンタは 32 ビット整数の範囲で有効である ように見えました。 下記のようなテストコードを走らせても、16 ビット整数の範囲は軽く クリアしますし、100万を越えても問題はありませんでした。 32 ビット整数の範囲で有効と仮定するなら、理論的には数億になっても 大丈夫なはずですし、実務的には事実上「無制限」と言って差し支え ないように思います。 Sub Sample()   Dim i As Long   On Error GoTo Err_   Application.ScreenUpdating = False   Do     With ActiveSheet.Shapes.AddLine(0, 0, 0, 0)       Application.StatusBar = "SHAPE " & .Name       .Delete     End With     DoEvents   Loop   Exit Sub Err_:   MsgBox "Stop." End Sub ■ 2.オブジェクトの発生番号を1にリセットすることは出来るのか できます。 << 方法1 >>   1. シート上のオブジェクトを全て削除   2. ブックを保存 << 方法2 >>   現在のシートを新規シートにコピーする の2つの方法です。 方法1 については、「ブックの保存」というのがポイントです。この タイミングでオブジェクトの内部カウンタがクリアされます。 ですから、全オブジェクトを削除しても、保存前に何らかのオブジェクト を追加してしまうと、シェープの内部カウンタがそのまま残ってしまい ますのでリセットされません。 方法2 については、新規シートへコピーする際に内部カウンタが再構成 されるようです。 余談ですが、オブジェクトの内部カウンタはシート単位でもっています。 ■ 参考 オブジェクトの内部カウンタについてオフィシャルな資料を見つけること はできませんでした。 Excel のファイル形式は一般に Biff フォーマットと呼ばれるものですが、 これをバイナリレベルで見ていくと、シェープ等のオブジェクトをシート に挿入すると以下4つのレコードが追加されるのを確認しました。  注)()内はレコード番号  [MSODRAWINGGROUP] (&HEB)  [MSODRAWING] (&HEC)  [OBJ] (&H5D)  [MSODRAWINGSELECTION] (&HED) オブジェジェクト1つの場合、2つの場合...のように何パターンか作成し、 これらのレコードがどのように変化するのかをトレースする。 その結果が本回答の根拠です。推測の域はでませんが、参考にはなるかと。

machin555
質問者

お礼

KenKen_SPさま ていねいなご回答ありがとうございました。 とても助かりました。 どうもありがとうございました。

関連するQ&A

  • ExcelでVBAを利用してオートシェイプ情報取得

    Excelのオートシェイプをテキストデータに変化するVBAを作成したいです ただし対象となるオートシェイプは複数のオートシェイプがグループ化された グループオブジェクトになっています それら特定のパターンを持つオートシェイプオブジェクトの一群があり 1つ1つには想定される名称が存在します 具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを 作成し、それらにそって対応するテキストを配置していきたいというものです このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか よろしくお願いいたします

  • オートシェイプが消えたり出たりする

    Windows 7+ Excel 2013を利用しています。 オートシェイプを200個位(四角、丸)入れています、重ね合わせはありません。 エクセルで職場のレイアウトを作成・更新しているのですが、 突然、全てのオートシェイプが表示されなくなり、オートシェイプがあるあたりの セルをクリックしたら、幾つかのオートシェイプが表示され、マウスを動かすと オートシェイプが消えてしまいます。 また、別のセルをクリックしたら、先とは、違うパターンで幾つかオートシェイプが 表示され、マウスを動かすと、何個かオートシェイプが表示されたまま、他のが消えます。 オブジェクトの選択と表示では、全て表示になっていますが、一旦、全て非表示にして、全て表示にしても、全く、オートシェイプが表示されません。 慌てて、保存せずに、終了して、パソコンを再起動、変になったエクセルブックを開いても直っていません。 仕方なく、先月のブックをコピーして、修正しています。 変になったエクセルブックですが、他のパソコン何台かで開いても同じようになります。 マクロでもあるのかと思い、Alt + F10を押してみましたが、コードは書かれていません。 諦めかけていたら、調べていないPCから開いたら、表示されています。 そこで、そのPCで上書き保存してから、変になったPCで開いたら、表示されています。 何故なんでしょうか? エクセルブックは、壊れてなかったんでしょうか?

  • Excelのオートシェイプについて

    お世話になります。 Excel2003について質問させてください。 Excelを利用して、表を作っているのですが オートシェイプで四角の図形を用います。 書式設定で、中身を「塗りつぶしなし」に設定。 線を残して、枠として利用しているのですが ファイルを保存して改めて開いた時に なぜか、テキストが入力できるオブジェクトになってしまっていて 枠の下のExcel自体のセルが選択できなくなってしまっています。 非常に使いづらいのですが、設定などで直す方法。 または、閉じてもテキストオブジェクトにならない方法を ご存知の方ご教授願います。

  • オートシェイプの位置

    私は、エクセルで文章等に○を付けたい場合は、オートシェイプを使用しているのですが(例:参加・不参加 ご希望のものに○を付けて下さい)、自分が正しいと思った位置にオートシェイプを配置しても、印刷プレビュー画面で確認すると、オートシェイプの位置が自分の希望とは違う場所に位置している事が多々あります。 この上記のズレを無くす方法、またはオートシェイプ以外で文章に○を付ける際に便利な機能を御存知な方がいらっしゃいましたら回答をお願い致します。 ちなみに、Microsoft Office Excel 2003を使用しています。

  • エクセルのオートシェープについて

    エクセルのオートシェープで「グループ化ではなく、図形の結合」って出来ないですか? (○と△を合体させて一つの金魚のような図形にすることです。) VBAを使う方法でもそのようなことが出来ればありがたいのですが、そのサンプルプログラムを探しても見当たりませんでした。 方法知ってる方いましたら教えてください。

  • 特定のオートシェイプだけ削除するVBA

    エクセルで一枚のシートに複数のオートシェイプを使用したものがあります。 オートシェイプを使用しているセルの範囲は (A1:L22)と(M1:U22)の二箇所なのですが、 VBAで(A1:L22)の範囲にあるオートシェイプのみ削除する事は可能でしょうか? (A1:L22)内のオートシェイプは作業内容により毎回変わるので 形などは特定できません。 また、オブジェクトの選択で範囲指定をした後削除という方法もあるのですが この削除の作業の前後に他の作業のVBAを使用しているので VBAで削除が出来ればと思います。 よろしくお願いします。

  • エクセルでオートシェイプをデータによって移動できますか?

    エクセルでオートシェイプをデータによって自動で移動させる事は可能でしょうか? 例えば、 『血液型 : A・B・O・AB』 という項目があって、血液型によって○で囲む書式の場合に(血液型がA型ならば、Aを○で囲む)他のセルで血液型を入力して、その値が変更する事によって、囲む○(オートシェイプを使用)の位置を自動で移動させたい。 VBAはほとんどわからないので、マクロ使用程度でできたら、と思っています。 エクセルのバージョンは2003です。

  • Excelのオートシェイプについて

    OS95でExcel97を使用しています。突然Excelでオブジェクトで罫線や楕円を描くと線が青くなってしまいます。Normal.dotを上書きすると一時的になおるんですが、ファイルを上書き保存で閉じて開きなおすと元に戻ってるんです。オートシェイプの既定値に設定も試してもファイルを開きなおすと元に戻ってしまいます。ご教授お願いします。

  • エクセルのオートシェイプの作成について

    エクセルにスキャナした建物の図面を貼り付けて そこに♂の○の部分に1~30位の番号をいれて 写真を撮った部分が分かるよう図面に入れたいのですが 何か良い方法は無いでしょうか? 今考えているのは テキストボックスで (1)←化けていますが1を変換し○で囲んだものです。 を作って オートシェイプで矢印を別で作成する というやり方なのですが、 番号が(20)←同様 を超えると21からは変換しても丸で囲む変換が無かったり、 丸を作成して中に文字を入れても印刷時にずれたりと効率が悪いです。 オートシェイプで♂のようなものがあれば一番いいのですが、 どなたか良い方法をご存知の方いらっしゃいますでしょうか?

  • Excel オートシェイプの位置が勝手に動いてしまう

    Excel2007でセルに21を打ちこみ これをオートシェイプの○で囲みました いったん保存し閉じて 次にこのファイルを開いたとき○が21から離れて別のところに移動してしまっています これを防止または予防することはできないものでしょうか よろしくお願いします