以前どなたかが質問していた際に、下記の様なコードで回答をていた方がいらっしゃいます。
これを流用させていただきたいと思っています。そこで、下記の通り2点ほど改良をくわえたいのですが、どうすればいいのでしょうか。
改良点1
現在は、このコードは1つ1つのセルに対しての処理になっています。(結合したセルではうまくいかない。)自分がやりたいのは、O24からT25までという感じに結合されたセルに対して、このようにダブルクリックすると○が入り、再びダブルクリックすると○が消える。ということをしたいのです。
改良点2
下記のコードだと、A1からA5のように連続したセルに対する処理になっていますが、自分としては、O24からT25までの結合したセルと、V24からAA25までの結合したセルと、AC24からAC25までの結合したセルと、AJ24からAO25までの結合したセルと、AQ24からAV25までの結合したセルと、AX24からBC25までの結合したセルの計6カ所に○をつけたり消したりするようにしたいです。
何とかならないものでしょうか。VBAはかなり初心者です。お願いします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
Dim Ad As String
Dim Lp As Single, Tp As Single, Hp As Single
Dim Ov As Oval
If Intersect(Target, Range("A1:A5")) Is Nothing Then
Exit Sub
End If
With Target
Ad = .Address
Hp = .Height
Lp = .Left + ((.Width / 2) - (Hp / 2))
Tp = .Top
End With
Cancel = True
With ActiveSheet
.Unprotect '★
For Each Ov In .Ovals
If Ov.TopLeftCell.Address = Ad Then
Ov.Delete: Ad = "": Exit For
End If
Next
If Ad <> "" Then
.Ovals.Add(Lp, Tp, Hp, Hp) _
.Interior.ColorIndex = xlColorIndexNone
End If
.Protect , True, False, False '★
End With
End Sub
No.2ベストアンサー
- 回答日時:
マークする範囲は Set Mark = Range("A1:D5, A10:D15, E6:G9") で複数範囲を
自分のシートに合わせて書き換えて応用してしてください。
備考: 赤○にして確認した。 Exit For は ○の重複◎がある場合に備え消し優先にするために外した。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Mark の複数の範囲のセル/結合セルに Wクリックで 赤○ つける/消す
Dim Ad As String
Dim Lp As Single, Tp As Single, Hp As Single
Dim Ov As Oval, Mark As Range
Set Mark = Range("A1:D5, A10:D15, E6:G9") '範囲の複数指定
If Intersect(Target, Mark) Is Nothing Then Exit Sub '範囲外は無視
With Target
Ad = .Address: Hp = .Height: Tp = .Top
If .Height > .Width Then Hp = .Width '縦長結合の場合に備える
Lp = .Left + ((.Width / 2) - (Hp / 2))
End With
Cancel = True
With ActiveSheet
.Unprotect '★
For Each Ov In .Ovals
If Not (Intersect(Target, Ov.TopLeftCell) Is Nothing) Then '既存○検出
Ov.Delete: Ad = "": ' Exit For '◎重複があるなら外し、削除優先する
End If
Next
If Ad <> "" Then
With .Ovals.Add(Lp, Tp, Hp, Hp)
.Interior.ColorIndex = xlColorIndexNone
.Border.Color = vbRed ' 赤○にする
End With
End If
Protect , True, False, False '★
End With
End Sub
No.1
- 回答日時:
改良点2について何をしたいのか伝わらないので、1だけ
Private Sub Worksheet_BeforeDoubleClick(ByVal mycell As Range, Cancel As Boolean)
Select Case mycell.Text
Case "○"
mycell = ""
Case ""
mycell = "○"
End Select
End Sub
この回答への補足
お返事本当にありがとうございます。
すみません。説明不足でした。書いてくださったプログラムを試してみたのですが、私が流用させていただいたプログラムはもともとセルの中にはテキストとして文字が入力されていても、その文字の上に丸をつけたり消したりするプログラムです。
できれば投稿したプログラムをなるべく生かす様にしたいです。
今のままだと、結合されたセルに対してはうまく動かないので、結合されたセルに対しても動くようにしたいのです。
改良点2の方はよくわからない言い方になってしまってすみません。
If Intersect(Target, Range("A1:A5")) Is Nothing Then
の部分ですが、この場合はセルA1:A5に対してはダブルクリックすると○がついたり消えたりしますよね。
それを、たとえばA1とA2とB1とB2の4つのセルが1つに結合されたセルと、少し離れた場所にあるG1とG2とH1とH2の4つのセルが1つに結合されたセルのように、結合されたセルが連続してない離れた場所に存在する場合に、その離れた場所に複数ある結合されたセルを対象範囲にしたいと考えています。
VBAでは結合されたセルに対して何かするというのは難しいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
Excelで空白セル直前のセルデー...
-
特定の色のついたセルを削除
-
VBAでユーザーフォームにセル値...
-
Excel UserForm の表示位置
-
VBA 複数条件の分岐処理の上手...
-
Excel VBA IF文がうまく動作し...
-
【Excel VBA】一番右端セルまで...
-
下記のマクロの説明(意味)を...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA にて、条件付き書式で背景...
-
Excel VBAで特定の範囲の空白セ...
-
入力規則のリスト選択
-
Excel VBAでCheckboxの名前を変...
-
SPREAD.netで選択セルの合計を...
-
C# DataGridViewで複数選択した...
-
エクセルの合計を自動で表示さ...
-
DataGridViewのフォーカス遷移...
-
VBA コンボボックスで選んだも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
下記のマクロの説明(意味)を...
-
Excel VBAでCheckboxの名前を変...
-
【VBA】写真の貼り付けコードが...
-
特定の色のついたセルを削除
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
DataGridViewのフォーカス遷移...
-
関数の引数でrangeを指定したとき
-
入力規則のリスト選択
-
DataGridViewで指定したセルの...
-
VBAでユーザーフォームにセル値...
-
複数指定セルの可視セルのみを...
おすすめ情報