これ何て呼びますか

「テキストボックスにリンクしたいセルのアドレスを数式バーに入力し、
アドレスを消すとテキストボックスに値が残る」
という方法があることを知ったのですが、
テキストボックスの数が多いため、1つずつアドレスを消すのが大変な状況です。

質問
①複数ある数式バーのアドレスをまとめて1回で消す方法はないでしょうか。
②同様に、複数のテキストボックスに残った値を1回で消す方法はないでしょうか。

知識が浅いため、出来るだけ簡単な方法を教えていただけたら助かります。
よろしくお願い致します。

質問者からの補足コメント

  • 御礼の追加が出来なかったので、こちらに書かせていただきます。

    1.複数ある数式バーのアドレスをまとめて1回で消す
    角丸四角の図形の形になっていたテキストを、一旦、四角の形に変更して
    マクロを実行したら、1回で式が消えました。
    このとき、値表記も見た目消えてしまったので、無理か・・・と思ったのですが、
    値を黒字にすると、無事、表記されました。(黒字以外は反応しませんでした)

    2.複数のテキストボックスに残った値を1回で消す
    1同様の方法で消せました。

    理屈は分からないのですが、私がやりたかったことは完璧に出来ました。
    本当に有難うございました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/02/11 14:05

A 回答 (2件)

こんにちは。



一気に消す方法とかいうのは、マクロしか思いつきません。
以下のものをVBEに貼り付けください。
貼り付け場所は、表計算画面から、Alt+ F11 -> Alt +I →(Altを押したまま)->M
なお、フォームコントロール(開発メニュー挿入)のボタンに、マクロ登録をすると、便利だと思います。

1.複数ある数式バーのアドレスをまとめて1回で消す

Sub ClearFormulaInTxtBox()
Dim shp As Variant
Range("A1").Select '←誤動作を防ぐため
 For Each shp In ActiveSheet.Shapes
  If shp.AutoShapeType = msoShapeRectangle Then
    shp.DrawingObject.Formula = ""
  End If
 Next shp
End Sub

2.複数のテキストボックスに残った値を1回で消す方法

Sub ClearTxtInTxtBox()
Dim shp As Variant
Range("A1").Select
 On Error Resume Next
 For Each shp In ActiveSheet.Shapes
  If shp.AutoShapeType = msoShapeRectangle Then
    shp.DrawingObject.Text = ""
  End If
 Next shp
 On Error GoTo 0
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

本当にありがとうございます。
VBEにそのまま貼り付けると1回で消せました。

ただ、テキストの形を図形の楕円や角丸四角形などにしているsheetは
1、2とも反応しません。(消すことができません)
楕円や角丸四角形などの図形にしている箇所も1回で消せる方法がありましたら
ご教示頂けましたら助かります。

再三お手数をお掛けしますが、宜しくお願い致します。

お礼日時:2015/02/11 12:02

こんばんは。



>テキストの形を図形の楕円や角丸四角形などにしているsheetは
>1、2とも反応しません。(消すことができません)

話が、本来、テキストボックスの話でしたから、それに集約させました。
一応、知らべてみた結果では、

  If shp.AutoShapeType > 0 Then
このように変えればよいはずです。
コードを全部上書きをしてしまうか、行のところだけを上書きをしてください

>このとき、値表記も見た目消えてしまったので、無理か・・・と思ったのですが、
>値を黒字にすると、無事、表記されました。。
この現象は、私のほうは、[既定の図形]として[塗りつぶしなし]とか、文字の色は[黒]、
線は[黒][0.75]を設定していますから、変化しませんが、
デフォルト状態は、線が[青]で[塗りつぶしあり]で、文字の色も黒ではなかったはずです。
マクロで設定の一部が変わると、デフォルトになってしまうのだと思います。
まあ、もちろん、こういうレベルはマクロでは可能です。

1.複数ある数式バーのアドレスをまとめて1回で消す(オートシェイプ編)

Sub ClearFormulaInTxtBox()
Dim shp As Variant
Range("A1").Select
 For Each shp In ActiveSheet.Shapes
  If shp.AutoShapeType > 0 Then  '*
    shp.DrawingObject.Formula = ""
  End If
 Next shp
End Sub

2.複数のオートシェイプに残った値を1回で消す方法

Sub ClearTxtInTxtBox()
Dim shp As Variant
Range("A1").Select
 On Error Resume Next
 For Each shp In ActiveSheet.Shapes
  If shp.AutoShapeType > 0 Then
    shp.DrawingObject.Text = ""
  End If
 Next shp
 On Error GoTo 0
End Sub

3.今回の検査に使った、文字を入れるマクロ【数式のアドレスではありません】
'まずフォーム・コントロールにこのマクロを登録します。
'使い方は、最初に、オートシェイプを選択し、ポタンをクリック
'次にセルの任意の所をダイアログボックスで選択し、OKをクリック
'現行では、一つのセルしか選べません。
'オートシェイプの選択の仕方で、ダイアログボックスが
'出にくいことがありますが、選択の位置をずらしながら、数回ボタンをクリックしてください。

Sub PutInShapes()
Dim shp As Object
Dim r As Range
If VarType(Selection) = vbObject Then
  On Error Resume Next
  Set shp = Selection
  If shp Is Nothing Then Exit Sub
  If shp.ShapeRange.AutoShapeType > 0 Then
   Set r = Application.InputBox("セルを選択してください。", Type:=8)
   If Not r Is Nothing Then
    shp.Text = r.Text  '一つだけ(ここは変更可能)
   End If
  End If
Else
 MsgBox "最初に、オートシェイプを選択してください。", vbInformation
End If
 On Error GoTo 0
End Sub
    • good
    • 0
この回答へのお礼

御礼

言葉足らずで、大変お手数をお掛けしてしまいました。
申し訳ございません。

お蔭様でコードを上書きすることで、1、2とも解決しました。
マクロのことも、全く知識がなかったのですが、
丁寧に教えて頂けたので、私にも作ることが出来ました。
本当に有難うございました。

文字の色も、黒色・単色塗りつぶしを既定のテキストボックスに設定しましたら、
こちらも解決することが出来ました。

「3.今回の検査に使った、文字を入れるマクロ」は、
今のところ、まだ出来上がっていない状態ですが、頑張ります。

まずは、御礼かたがた、ご報告とさせて頂きます。
有難うございました。

お礼日時:2015/02/12 10:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報