2024-01-25

増田エクセルマクロ詳しい人いる?

エクセルマクロで膨大な量の名前定義を一括で削除させたくて、こんな風に書いたんだけど

'「Print_Area」以外の名前定義を全部消す

For Each n In ActiveWorkbook.Names

If InStr(1, n.Name, "Print_Area") = 0 Then

n.Delete

ElseIf n.Value Like "*[#]REF!*" Then

n.Delete 'プリントエリアでもエラーだったら消す

End If

next

なぜか参照エラーになってるプリントエリアを消すべきところでエラー起こしてないプリントエリアが消される。

「Print_Area」だけど参照エラーになってるものが一個だけあるからそれを消してほしいだけなんだけど、アクティブシートのプリントエリアが消されて参照エラーの方は生き残ってしまう。

なんで…?

 

【やりたいこと】 

名前管理目視確認すると同じ「Print_Area」名で

1.シート1を正しく参照しているもの

2.シート2を正しく参照しているもの

3.#REF!を参照しているもの

の3つがある。

この3つ目だけを消したい。

 

【なぜか起きること】

For Eachで上から順に1と2を素通りして、3つめのときローカルウインドウName.Valueが#REF!なのを確認しているのに、

3つ目をDelete すると1つ目が消える

  • +じゃなくてOr

    • そこは主題じゃなくね?

      • ある あとはたぶんLikeのとこ Instrとかにすればいけそう

        • 試してみたけどいけないんよ。 ローカルウインドウでnの中身見れるじゃん? そこで正しくValueが#REF!の名前を拾えてるのにDeleteするとなぜかいまアクティブなシートのエラー参照じゃ...

  • エクセルマエストロさんに聞いてみた https://chat.openai.com/share/96a4d6ac-9d4c-4114-96e2-3b5f60a569f9

    • ありがたいけど指摘されたそこじゃないんよ。 なんならIf InStr(1, n.Name, "Print_Area") = 0 Then でやっても同じ

      • excelさんにも聞いてみた https://chat.openai.com/share/13e2bbb8-edc6-47fb-a583-f6b3e4001286

        • なるほどなあコレクションに 勉強になるわあ と思って試してみたらやっぱりアクティブシートのプリントエリアが消された。 もうこれそういうバグとしてあきらめてプリントエリア名...

          • わろた さっきから貼っててナンだけど、これらエクセルGPTさんはChatGPT4の知識だけで解答してるから微妙なんだよね これで無理だったらわっきゃんない https://chat.openai.com/share/f0ea02dc-5706-4...

            • 何度もありがとう。なんて優しい増田なんだ。。。 やっぱりアクティブシートのプリントエリアが消された。 なんか気持ち悪いけど1個名前の定義が残ってる程度で別に何か起きるわけ...

              • ちょっと気になったから追求してみた、まあ知らない事もあったと思うから今後の検索にでも活かして!w https://chat.openai.com/share/f0ea02dc-5706-46ef-8503-5f9515724921

                • やってみたけど結局しっかりブック全体に属してるエラー参照のPrint_Areaを選択して削除してしっかりシート1のPrint_Areaが消された🤷‍♂️おてあげ 本当にありがとう!増田のあたたかさ...

  • 全角コメント消してみるとか?

  • それって隠し定義消せるかな。 隠し定義を見える定義に変える処理、必要じゃなかったっけ?

    • いま聞きたいことじゃないからはぶいてるけど、この記述の前に.Visible = Trueをつけてるよ

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん