
チェックボックスではなく、□と■をダブルクリックで交互に表示したいのですが、よく方法が分かりません。※Excel初心者です。
自分なりに調べて下記を試してみてうまくいったのですが、セルの結合した箇所をダブルクリックすると実行時エラーがでてしまいます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1:AO300")) Is Nothing Then Exit Sub
Cancel = True
If Target.Value = "□" Then
Target.Value = "■"
ElseIf Target.Value = "■" Then
Target.Value = "□"
End If
End Sub
なにか良い方法はあるでしょうか?
No.6
- 回答日時:
こんばんは。
マクロコードを書こうか思いましたが、#1さんの解答で間違いはないと思います。どう書いても、似たようなマクロになりますから、それで解決しない場合は、別の要素が含まれている可能性が高いと思います。
うまくいかないのなら、その要件を出していただかないと、解決には至らないと思います。
結合セルというのは、If Target.Value = "□" Then のようには書けないということだけです。簡単に、直したいのでしたら、その質問のコードのプロシージャ部分(Private Sub )の行を除いて、
Target を ActiveCell
に置換すれば、それでマクロは通るはずでする
なお、チェックボックスの代わりにするということになれば、もう少し細かなお話が必要になってくるのではないかと思います。
No.5
- 回答日時:
No.4です。
投稿後気づきました。
セルが結合してあるかどうかの判断は不要だと思います。
前回のコードは消去し↓のコードに変更してください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1:AO300")) Is Nothing Then Exit Sub
Cancel = True
With Target(1)
If .Value = "□" Then
.Value = "■"
Else
.Value = "□"
End If
End With
End Sub
どうも失礼しました。m(_ _)m
No.4
- 回答日時:
こんばんは!
結合セルの選択は複数セルを選択しているコトになると思いますので
その複数セルの最初のセルをTargetにしてみてはどうでしょうか?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c As Range
Cancel = True
If Target.MergeCells Then '//Targetが結合セルの場合//
Set c = Target(1) '//結合セルの最初のセルを「c」に格納//
Else
Set c = Target
End If
If c = "□" Then
c = "■"
Else
c = "□"
End If
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.2
- 回答日時:
ANo1です。
>結合したセルというのは、選択しようとしている□ではない箇所になります。
>選択したい□は単体のセルになっています。
意味がいまひとつわかりません。
ご提示のコードはダブルクリックの際に実行されるようになっていますので、関係ないセルに結合があっても、単体セルをクリックする限りは問題は起きないはずです。
一方で、結合したセルは見掛け上はひとつのセルのように扱われますので、結合セルの範囲内のどこをダブルクリックしてもご提示のコードが実行されます。その際には、ANo1で回答した様なことが起こり得ます。
>そのままCopy and Pasteできる状態での回答だと大変助かります
問題の発生の状況がよくわからなくなってきたので、回答が正しいかどうか確信が持てなくなりましたが、ANo1の回答はそのままご提示のコードの(一部)を差し替えればよいように記したつもりです。
If Target.Value = "□" Then
~~~~
End If
の内容に1行追加した形となっていますが、その部分を差し替えれば動作すると思うのですが…?
お礼の文を読むと、『単独セルをダブルクリックしても、シート内に結合セルが存在するとエラーになる』という意味に取れますが、そういうことなのでしょうか?
・・・てか、ひょっとして「□」「■」を入れ替えたいのは、ダブルクリックしたセルではなくて、どこかの固定のセルの値を変えたいということなのでしょうか?
あるいは、シート内の(どこにあるかわからない)□か■の値を持つセルを反転させたいということなのか…
その場合、きっかけ(処理をするトリガー)となるのはシートのダブルクリックだけれど、それは単なるきっかけで、クリックする場所(セル位置)は処理する内容とは無関係ということなのでしょうか。
いろいろ、妄想をめぐらせすぎて、わけがわからなくなってきてしまいました。
コードとは関係なく、まず、『なさりたいこと』を明確にしていただければ、もう少しは判断ができるのではないかと思います。
No.1
- 回答日時:
こんにちは
>セルの結合した箇所をダブルクリックすると実行時エラーがでてしまいます。
結合されたセル範囲の場合、Targetに渡されるのは1つのセル範囲ではなく複数のセル範囲になります。
その場合に、
Target.Value
を参照しようとするとエラーになります。
結合セルの値はその範囲の最初のセルに入っていますので、一旦、単体のセル(Range)に置き換えておいて、以降はそちらを用いるのがわかりやすいのではないでしょうか。
(ダブルクリックしたのが単独セルの場合は、同じセルの参照になります)
例えば、
Set t = Target.Cells(1, 1) ' 変数tに最初のセルを再取得
If t.Value = "□" Then
t.Value = "■"
ElseIf t.Value = "■" Then
t.Value = "□"
End If
早速の回答ありがとうございます。
ですが、申し訳ありません。
理解出来ません。低レベルですいません。
ちなみに、追記ですが・・・
結合したセルというのは、選択しようとしている□ではない箇所になります。選択したい□は単体のセルになっています。
出来れば、そのままCopy and Pasteできる状態での回答だと大変助かります。不可能なのでしょうか?
初心者で本当に申し訳ないです。
宜しくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
Excel for Mac使用中ポインタが...
-
枠に収まらない文字を非表示に...
-
EXCEL VBA セルに既に入...
-
vba テキストボックスとリフト...
-
セルをクリック⇒そのセルに入力...
-
(Excel)数字記入セルの数値の後...
-
数式を残したまま、別のセルに...
-
Excelで数式内の文字色を一部だ...
-
ハイパーリンクの参照セルのズ...
-
エクセルでオブジェクトを常に...
-
Excelでのコメント表示位置
-
エクセルの一つのセルに複数の...
-
Excel 例A(1+9) のように番地の...
-
【エクセル】IF関数 Aまたは...
-
エクセル セルの中に縦線が入っ...
-
エクセルの書式設定の表示形式...
-
対象セル内(複数)が埋まった...
-
エクセルのセルの枠を超えて文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba テキストボックスとリフト...
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセル
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
エクセルの書式設定の表示形式...
-
Excel 例A(1+9) のように番地の...
-
エクセルの一つのセルに複数の...
-
excelの特定のセルの隣のセル指...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
エクセルのセルの枠を超えて文...
-
【エクセル】IF関数 Aまたは...
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
【Excel】 セルの色での判断は...
おすすめ情報