
EXCEL2000 VBAの初心者です。
エクセル表の数字(位置座標や大きさ)に従い、数十個のオートシェイプの丸や四角を、何度も配置・消去させるプログラムを作っています。
一度に多くのオブジェクトを配置・消去しているので、自動発生するオブジェクトの番号が、現在20000程度になっています。
現状では問題ないのですが、自動発生番号に限りがあるとエラーが出ると思います。そこで、
1.オブジェクトの自動発生番号には限りがあるのか、
2.オブジェクトの発生番号を1にリセットすることは出来るのか。
を教えていただきたく、よろしくお願いいたします。
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つの場合...のように何パターンか作成し、
これらのレコードがどのように変化するのかをトレースする。
その結果が本回答の根拠です。推測の域はでませんが、参考にはなるかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのシート連番の振り直し
Excel(エクセル)
-
VBA Shapes コピーと名前
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
EXCELのSheet番号って変更できる!?
Visual Basic(VBA)
-
5
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
6
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
7
Excelマクロ 選択画像の大きさを100%に
その他(Microsoft Office)
-
8
excelで新規作成されるシート名をリセット
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
エクセルVBAでオートシェープの連番はいくつまで使えますか?
Word(ワード)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
13
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
14
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
15
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
-
16
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
17
[ EXCEL VBA ] 図形を読み込む順番を制御するには?
Visual Basic(VBA)
-
18
Excel VBAでセル内の画像を選択したい
Excel(エクセル)
-
19
Excel VBA 以下のメッセージが出ないようにするにはどうしたらいいですか?
Excel(エクセル)
-
20
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
VBAからPDFファイルにパスワー...
-
Excelでフィルタをかけると警告...
-
テキストボックス中の文字列の...
-
エクセル/保護したシート上の埋...
-
実行時エラー 3265「要求された...
-
「オブジェクト変数または With...
-
AccessVBAで「dim dbs as datab...
-
Excel VBAでIEにアクセスするプ...
-
アクセスにてオブジェクト名変...
-
VBAで Set wb = Sheets(1).Cop...
-
VBA 実行時エラーで、"プロパテ...
-
エクセルマクロエラー「'Cells'...
-
(初心者です)VBAについて。「実...
-
CreateObjectできるものについて
-
VBAで作成するメール(開封確認...
-
表示されるまで待たせたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
テキストボックス中の文字列の...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
上下の位置揃えについて
-
ExcelVBAでのNZ関数について
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
AccessVBAで「dim dbs as datab...
-
EXCEL VBA オートシェイプナン...
-
オブジェクト変数またはWITHブ...
-
[VBA]CDOメッセージ送信エラー
-
エクセルマクロエラー「'Cells'...
-
findメソッドの変数について
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
オブジェクト変数の取得について
-
CreateObjectとGetObjectの違い
おすすめ情報