[[20230803160001]] 『テキストボックスに入力された数式を一括削除』(mnt) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『テキストボックスに入力された数式を一括削除』(mnt)

参照を貼り付けたテキストボックスが複数あります。
今現在、数式バークリックしdeleteで一つ一つ消しているのですが、簡単に削除する方法はありますでしょうか。
テキストボックスは残し、参照してある数式だけを削除したいです。

ご教示のほどよろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


>参照を貼り付けたテキストボックスが複数あります。

どこにありますか?

>数式バークリックしdeleteで一つ一つ消している

それは消したままで良いものですか?
(火災報知器) 2023/08/03(木) 16:41:23


Sub Sample()

    Dim shp As Shape

    For Each shp In Worksheets(シート名orインデックス).Shapes
        If shp.Type = 17 Then _
            shp.TextFrame.Characters.Text = Empty
    Next shp

End Sub

でどうですか?
( 'ふ') 2023/08/03(木) 16:45:18


マクロでも使いますか?

例)

Sub Test()

    ThisWorkbook.Worksheets("Sheet1").TextBoxes(1).Text = ""
    ThisWorkbook.Worksheets("Sheet1").TextBoxes("テキスト ボックス 2").Text = ""

End Sub

テキストボックスは上記のように番号または名前で指定できます。
消したいテキストボックスの番号または名前を調べて、上記のように空白を代入しましょう。

このSubをVBAエディタから実行するか、ボタンなどに貼り付けて利用しましょう(ここまでの説明は必要か?)
(ゆたか) 2023/08/03(木) 16:50:37


'ふ' 様

インデックスが有効範囲にありません、と表示されてしまいます・・・。
(mnt) 2023/08/03(木) 16:53:13


火災報知器 様

>参照を貼り付けたテキストボックスが複数あります。
どこにありますか?
⇒シート内に複数のテキストボックスがあり、それぞれに別のシートのセルを参照しています。
テキストボックスは残して参照している数式だけを削除したいのですが量があるので簡単に削除できないかな、と思い質問しました。

>数式バークリックしdeleteで一つ一つ消している
それは消したままで良いものですか?
⇒参照している数式は削除したままで構いませんがテキストボックスは残したいです。
(mnt) 2023/08/03(木) 16:57:17


ゆたか 様

インデックスが有効範囲にありません、と表示されてしまいます・・・。

(mnt) 2023/08/03(木) 16:58:07


 Selectしてからだと消せますけど、何故かわかりません。
 詳しい方の解説待ちです。

    Sub Sample2()
        Dim shp As Shape
        For Each shp In ActiveSheet.Shapes
            If shp.Type = msoTextBox Then
                shp.Select
                Selection.Formula = Empty
                shp.TextFrame.Characters.Text = Empty
            End If
        Next
    End Sub

(ベクトル) 2023/08/03(木) 17:09:49


'ふ' 様

よく見ておらずコピペして実行していました。
シート名を入れたら実行できたのですが、数式は削除されませんでした。
(mnt) 2023/08/03(木) 17:18:14


ベクトル 様

実行したらテキストボックスは残り数式は消えました!
ありがとうございます!

Selectの意味がすみません…分からないのですが違う方法か何かですか?
(mnt) 2023/08/03(木) 17:21:14


教えていただいた方ありがとうございましたm(__)m
本当に困っていたので、迅速に対応していただき感謝感激です。

ありがとうございました。

(mnt) 2023/08/03(木) 17:25:22


 >Selectの意味
 文字通り「選択」です。

 For Each shp In ActiveSheet.Shapes
 のループの中で、
 shp.Formula = Empty
 としても 実行時エラー 438 になってしまうのですが、
 shp.Select
 Selection.Formula = Empty
 とすることで、目的は果たせます。

 やっていることは同じに思うのですが、
 エラーが発生するのも事実なので、私の知識では分からない、という事です。
(ベクトル) 2023/08/03(木) 17:40:08

 多分こういう解釈なんじゃないかと予想...

    Sub Sample2()
        Dim shp As Shape, t As TextBox
        For Each shp In ActiveSheet.Shapes
            If shp.Type = msoTextBox Then
                Set t = shp.OLEFormat.Object
                t.Formula = Empty
                t.Text = Empty
            End If
        Next
    End Sub

(白茶) 2023/08/03(木) 18:04:25


 白茶さん、コメントありがとうございます。
 いつも回答を参考にさせていただいてます。

 私の勉強不足が露呈してお恥ずかしいところですが、こういうことでしょうか。
 ShpをSelectしたことによって、いきなりFormulaプロパティを指定しても、
 今選択しているShapeオブジェクトはOLEFormat.Objectじゃん、
 よし!Formulaプロパティ書き換えてやんよ
 的なことをExcel側でしてくれた、ということでしょうか。

 コードはこういう感じで良かったということですね。
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoTextBox Then
            With shp.OLEFormat.Object
                .Formula = Empty
                .Text = Empty
            End With
        End If
    Next

 大変勉強になりました。ありがとうございました。
 mntさんにも知識向上のきっかけを与えていただいたこと、お礼申し上げます。
 ※誤記訂正しました
(ベクトル) 2023/08/03(木) 18:55:14

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.