
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- その他(暮らし・生活・行事) 50代 仕事のミスが多い 2 2022/08/26 07:38
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Illustrator(イラストレーター) Illustratorでオブジェクトの色が勝手に変わって困っています。 4 2022/09/04 18:47
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのシート連番の振り直し
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
VBA Shapes コピーと名前
Excel(エクセル)
-
-
4
EXCELのSheet番号って変更できる!?
Visual Basic(VBA)
-
5
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
6
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
7
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
8
excelで新規作成されるシート名をリセット
Visual Basic(VBA)
-
9
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
エクセルVBAでオートシェープの連番はいくつまで使えますか?
Word(ワード)
-
12
特定の名前のオートシェイプの有無を知りたい(エクセルVBA)
Excel(エクセル)
-
13
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
14
Excelマクロ 選択画像の大きさを100%に
その他(Microsoft Office)
-
15
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
16
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
17
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
18
エクセルVBA シート全部のLineを消す方法
Excel(エクセル)
-
19
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
20
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
VBScriptからDLL参照設定したい
-
Excelでフィルタをかけると警告...
-
エクセルマクロエラー「'Cells'...
-
エクセルのVBAの標準モジュール...
-
上下の位置揃えについて
-
CLOBデータの取得方法
-
sheetsメソッドの失敗
-
[VBA]CDOメッセージ送信エラー
-
レコードセットの値 SelectとIN...
-
Letステートメントの使い方につ...
-
VBScriptでの起動済みのIEの操作
-
CreateObjectとGetObjectの違い
-
UserForm1.Showでエラーになり...
-
VB6のコレクション
-
コンパイルすると「メソッドま...
-
ExcelVBAでのNZ関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
AccessVBAで「dim dbs as datab...
-
Excel VBAでWordの複数ファイル...
-
オブジェクトが見つかりません
-
CreateObjectとGetObjectの違い
-
エクセルVBAで配列内に空白デー...
-
オブジェクト変数またはWITHブ...
-
VBScriptからDLL参照設定したい
-
エクセルVBAでcode128のバー...
おすすめ情報