VBA初心者です。よろしくお願いします。
[やりたいこと]
1.結合セル"A1:D1"に何か文字が入力されたら、TextBox1とTextBox2を表示させたい。
2.同結合セルの文字が削除されたら、TextBox1とTextBox2を非表示にしたい。
[現在のコード]
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1:$D$1"
If Target.Cells(1).Value <> "" Then
TextBox1.Visible = True
TextBox2.Visible = True
Else
TextBox1.Visible = False
TextBox2.Visible = False
End If
End Select
End Sub
上記コードを書いているのですがA1:D1に文字を入力しても削除してもテキストボックスに変化がありません。
似たような内容でオプションボタンをクリックしたら表示、非表示を切り替えるコードも同じモジュール内に書いているのですが、そちらは正常に動きます。
何が問題なのでしょうか。ご教授頂けると幸いです。
No.1
- 回答日時:
こんにちは
結合セルの場合、値は一つだけですし、そのアドレスはセル範囲の左上になります。
ですので「$A$1:$D$1」となることはありません。
ついでながら、判断したいケースは一通り(対象セルか否か)だけなので、SELECT CASE
で分岐しなくとも、普通にIF文で分岐すれば十分ではないでしょうか?
If Target.Address = "$A$1" Then
' ~~ 必要な処理 ~~
End If
とか。
なるほど、初歩的なことですね・・・。勉強になります。
"$A$1"と改めたら動くようになりました。
さらに申し訳ないことに、言葉が足りておりませんでした。
同様の処理を行いたい入力セルが他にも複数あり、どこに入力されたかでテキストボックスの表示、非表示を切り替えたいためにSELECT CASEを利用しておりました・・・(つまり、このコードはまだ書きかけということになります。)申し訳ありません。
ところで、別な質問となってしまい申し訳ないのですが、動くようになったものの、対象セルをBSキーで削除するとVisibleがFalseになりますが、Deleatキーで削除した時は反応しないようです。これは何故なのでしょうか?
No.2
- 回答日時:
No1です
>Deleatキーで削除した時は反応しないようです。これは何故なのでしょうか?
結合セルを扱うことがほとんどないので、見落としていたようです。
失礼いたしました。
調べてみると、Deleteの時だけはTarget.Addressが$A$1:$D$1となっているようです。
(なぜそのような挙動なのか理由まではわかりません)
両方に対応するためには「A1セルを含んでいるか」どうかで判断するか、「最初のセルがA1セルかどうか」で判断すればよさそうです。
前者であれば
If Not Intersect(Target, Range("A1")) Is Nothing Then
' ~~ 必要な処理 ~~
End If
後者であれば
If Target.Cells(1).Address = "$A$1" Then
' ~~ 必要な処理 ~~
End If
のような感じでしょうか。
度々ありがとうございます。感謝いたします。
ご教授いただいたNot Intersect Is NotingとTarget Addressを見て「なるほど!」となったのですが、現状うまく動いてくれません。
(Visibleが常時Trueになっている)
私の記述が誤っているだけだと思われるのですが・・・元のIf構文を頂いたIfで囲んだだけでは駄目でしょうか。
しつこくすみません。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "A1"
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Target.Cells(1).Value <> "" Then
TextBox1.Visible = True
TextBox2.Visible = True
Else
TextBox1.Visible = False
TextBox2.Visible = False
End If
End If
End Select
End Sub
No.3ベストアンサー
- 回答日時:
こんな感じの物はいかがでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1"
If Target.Value = "" Then
TextBox1.Visible = False
TextBox2.Visible = False
Else
TextBox1.Visible = True
TextBox2.Visible = True
End If
Case "$A$1:$D$1"
TextBox1.Visible = False
TextBox2.Visible = False
End Select
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) EXCELのセル相互同期用のVBAでの不具合 3 2022/08/10 11:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロについて教えてく...
-
Vba 実数および実数タイプの変...
-
ユーザーフォームに別シートか...
-
VBA レジストリの値の読み方に...
-
エクセルVBAについて
-
VBA listBoxから
-
ExcelのVBAコードについて教え...
-
VBA 複数条件の分岐処理の上手...
-
ExcelのVBAです。フォルダ内の...
-
VBAの計算で@が出てしまう件
-
VB.net(VB)で、フォームにExcel...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBAの質問になります Userform内で
-
VBAの質問になります メッセー...
-
Excel マクロについての相談
-
Vba SelStart、SelLen教えてく...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報