ANo4-5 merlionXXです。
おや、いつのまにか画像をUpされたのですね。
画像を見る限りでは、これまでのご説明とはことなり以下のように思えますが、それでよいでしょうか?
結合セル、B3:C3 D3:E3 F3:G3 これで1グループ
結合セル、B4:C4 D4:E4 F4:G4 これで1グループ
結合セル、B5:C5 D5:E5 F5:G5 これで1グループ
結合セル、B9:B10 これで1グループ
単独セル、B13 D13 F13 これで1グループ
これらの各グループ内のみでオプションボタン(エクセルではラジオボタンとは言いません)のような●印をダブルクリックで設定する。
であれば、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
Select Case .Row
Case 3, 4, 5
If .Column < 2 Or .Column > 7 Then Exit Sub
Range("B" & .Row & ":G" & .Row).ClearContents
Case 9, 10
If .Column <> 2 Then Exit Sub
Range("B9:B10").ClearContents
Case 13
If .Column <> 2 And .Column <> 4 And .Column <> 6 Then Exit Sub
Range("B13,D13,F13").ClearContents
Case Else
Exit Sub
End Select
.Value = "●"
Cancel = True
End With
End Sub
ではいかがでしょう?
添付図:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim GP(2) As Range
Dim dr(2) As String
Dim i As Long
Set GP(0) = Range("C3:H5") '塊ごとにグループ
Set GP(1) = Range("C8:C9")
Set GP(2) = Range("D11:D12,F11:F12,H11:H12")
dr(0) = "H" '横グループ
dr(1) = "V" '縦グループ
dr(2) = "H" '横グループ
For i = 0 To 2
If Not Application.Intersect(Target, GP(i)) Is Nothing Then
Application.Intersect(GP(i), IIf(dr(i) = "H", Target.EntireRow, Target.EntireColumn)).ClearContents
Target.Value = "●"
Cancel = True
End If
Next i
End Sub
こう言ってはナンですが,規則性もへったくれも無しにとにかく何でも突っ込んじゃえってカンジですね。
やれば出来ますが,整理されていないと言うことは即それだけ遅く重く汎用性も乏しくなっていきます。
ウソ:
>1~2行目はラジオボタンのように動作させたいセルがあるものの
>3行目は普通の文字入力をさせたく、
>4行目からはまた1~2行目と同様の処理をさせたい
本当?:
>AB列は,隣同士のセルで,ラジオボタンのように動作させたい
>C列は普通の文字入力をさせたく、
>DE列はまたAB列と同様の処理をさせたい
先に回答したマクロから,ベタですが判りやすく書き直してみます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
dim c
if target.column mod 3 > 0 then
if target.column mod 3 = 2 then
c = target.column - 1
else
c = target.column
end if
cells(target.row, c).resize(1, 2).clearcontents
target.value = "●"
cancel = true
end if
End Sub
#困ったことに,教わったマクロをご自分で修正し応用して利用することもできない,のに思いつきでウソ説明を垂れ流しているので,あっちとこっちで質問内容がばらばらころころ違っています。何がホントなの?それぞれにマクロも違ってくるのに,でも自分じゃ出来ないのに,一体どうしたいの?というお話ですね。
最初にご自分で書かれていたように
>具体的には
>[A1 A2] [A3 A4] [A5 A6]
>[B1 B2] [B3 B4] [B5 B6]
>のようにA1A2の結合されているセル、A3A4の結合されているセル、A5A6の結合されているセルの中から一つだけしか●が表示されないようにしたい
ホントの本当はいったい何がしたいのか,具体的にとはつまり「あなたのお手元の本当のエクセルの姿が正しく目に見えるように」事実を丁寧に書いてご相談を投稿してみてください。
ご自分の説明にウソや間違いが無いかちゃんと確かめながらご相談を投稿してみることで,ご自分の理解も進みますし半分以下の手間で問題も解決します。
ANo.4 merlionXXです。
質問をよく読みなおしたら、セルが上下に2つ結合しているのですね。
ならば、偶数行とか奇数行といった区分は出来ませんね。
たとえば、結合セルの上の部分(A1:A2ならA1)の行番号が1, 4, 7, 10, 13, 16の場合にのみ対象にするようにするなら
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
Select Case .Row
Case 1, 4, 7, 10, 13, 16
.EntireRow.ClearContents
.Value = "●"
Cancel = True
End Select
End With
End Sub
でOKです。
> 上記処理を行うグループが行でまとまった場合はどうなるでしょうか?
行でまとまった場合とはどういう意味ですか?
1行全体を、ひとつのグループにするという意味と解釈していいですね?
> かつそういったグループがシート内で飛び飛びである場合はどうなるでしょうか?
もうすこし具体的に書けませんか?
とびとびとは偶数行とか奇数行という意味ですか?
仮に偶数行に限定という意味なら
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
If .Row Mod 2 <> 0 Then Exit Sub
.EntireRow.ClearContents
.Value = "●"
End With
Cancel = True
End Sub
奇数行に限定なら
If .Row Mod 2 = 0 Then Exit Sub
にかえてください。
各列6行目までなら、以下のようなコードでOKだと思います。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
.Offset(1 - .Row).Resize(6, 1).ClearContents
.Value = "●"
End With
End Sub
>そういったグループがB列、C列とたくさんあるのです。
適切に所定範囲を変更して使ってください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
if application.intersect(target, range("A1:C6")) is nothing then exit sub
cells(1, target.column).resize(6, 1).clearcontents
target.value = "●"
cancel = true
End Sub
基本的には下記のようでいいのでは。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
r = Target.Row
c = Target.Column
If (r >= 1 And r <= 5) And (c >= 1 And c <= 2) Then
Target.Value = "●"
End If
End Sub
お礼
ありがとうございます。 全く私のイメージにぴったりの物が出来ました。 あとは、私のほうで出来そうです。 このたびはまことにありがとうございました。