Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
activexコントロールのTextBoxの値を消してもリンク先が正しい空白にならない
投稿日時: 23/05/22 05:00:01
投稿者: tako552101

以前にも質問したことがあるのですが、検索してもヒットしないので再質問です。
結果、うろ覚えです、ごめんなさい。
 
表題の通りなのですが、sheet2にはactivexコントロールのTextBoxを配置していて、sheet1の例えばA1セルにリンクしています。
 
入力には何ら問題ありませんが、TextBoxで消去した時(Delete、Backspace)にsheet1のA1セルは見た目は空欄ですが、正しく消去されておらず、A1セルの値を用いた計算式は「#VALUE」となります。
 
sheet1のA1に戻ってDeleteかBackspaceで消去すると、先ほどのエラーは解消されます。
 
sheet2のactivexコントロールのTextBoxでDelete、Backspaceが正しい空白を返す方法ありませんでしょうか。
よろしくお願いします。

回答
投稿日時: 23/05/22 07:19:34
投稿者: んなっと

「A1セルの値を用いた計算式」を以下のように変更する。
 
=IF(A1="","", 現在の式 )
とか
=IFERROR( 現在の式 ,"")

回答
投稿日時: 23/05/22 07:31:53
投稿者: WinArrow

テキストボックスのデータ型は「文字列」です。
見た目、何も入っていないkら、「空白」と思われがちですが、
本当は「空白文字列」になります。
「空白文字列」を「空白」にするには、当該セルで[Del]するしかありません。
関数で「空白」にすることはできません。
 
しかし、「空白」ではなく、強制的に「0」と見做すことは可能です。
 
例えば、
B1セルに
=A1*100
という数式が入っていた場合、
=IF(A1="",SUM(A1),A1)*100
のように「SUM」関数を使えば、空白文字列を「0」と見做してくれます。
 
参考になれば、お使いください。

回答
投稿日時: 23/05/22 08:03:06
投稿者: WinArrow

追加レス
 
>=IF(A1="",SUM(A1),A1)*100
面倒な数式と思われますが、
若し、数字のみと決まっているならば、
SUM関数は数字以外は「0」になりますので、
=SUM(A1)*100
でも大丈夫です。
 

投稿日時: 23/05/22 09:45:46
投稿者: tako552101

みなさん、ありがとうございます。
 
やはり基セル(A1)を空白文字から、空白にするより、A1を引用している他のセルを工夫するのが簡単なんでしょうか。
 
引用セルが多いのでなんとかA1を空白にしたいので…
 
例えばマクロでテキストボックスの値が変更されたら(このイベントわかりませんが)A1セルの状態をみて、空白文字なら「Sheets("hoge").Range("A1").ClearContents」発動みたいな…
 
…スマートではない…
VBA絡みは別に質問した方がいいでしょうか。

回答
投稿日時: 23/05/22 10:25:48
投稿者: 半平太

>activexコントロールのTextBox
 
なら、Sheet2のシートモジュールにそんなコードを書いてみたらどうでしょうか?
 

Private Sub TextBox1_Change()
    If TextBox1.Value = "" Then
        Sheets("Sheet1").Range("A1").ClearContents
    End If
End Sub

回答
投稿日時: 23/05/22 10:36:44
投稿者: んなっと

同じですが、
 
Private Sub TextBox1_LostFocus()
  With TextBox1
    If Len(.Value) = 0 Then
      Evaluate(.LinkedCell).ClearContents
    End If
  End With
End Sub

回答
投稿日時: 23/05/22 10:39:14
投稿者: WinArrow

ActiveXコントロールのイベントプロシジャは、
ActiveXコントロールが設置しているシートモジュールに記述します。
右クリックして「コードの表示」で、VBEが表示されます。
 
イベントプロシジャとしては、
TextBox1_LostFocus()がよいと思います。
LINKEDCELL(文字列)を解析して、シート名とセル名に分解すれば
よいでしょう。
 

回答
投稿日時: 23/05/23 09:14:40
投稿者: WinArrow

WinArrow さんの引用:

LINKEDCELL(文字列)を解析して、シート名とセル名に分解すれば

 
と書きましたが、
 んなっと さん レスの
Evauateを使用すれば、「解析」も「分解」の必要がありません。
ずっとスマートです。

回答
投稿日時: 23/05/23 10:23:19
投稿者: WinArrow

イベントプロシジャについて
Private Sub TextBox1_Chane()

Private Sub TextBox1_LostFocus()
の2つが紹介されています。
私は、後者をお勧めします。
各々の挙動を確認してから、選択することをお勧めします。

回答
投稿日時: 23/05/23 21:29:55
投稿者: WinArrow

引用:

引用セルが多いのでなんとかA1を空白にしたいので…

 
数式の変更は大変だとは思いますが、
空白文字列ではなく、
テキストボックスに、数字以外が入力されたら
というような確認はどのようにしているんでしょうか?
 

トピックに返信