アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある申請書式でチェックボックスをあらかじめ用意しておりますが、左ワンクリックもしくは右クリックすればレ点が入るようにVBA言語を作りたいと思っています。
(例)
□昭和
□平成

ちなみにその申請書式ではセル結合も含まれております。

ちなみにフォームコントロールまたはアクティブXからのチェックボックスで一端作成してみましたが
ファイルを閉じたり開いたりするたびに位置がずれていくのでVBAで解決したいです。
VBAに詳しい方教えてください。
よろしくお願いします。

質問者からの補足コメント

  • すみません。私の説明不足で。
    教えて頂いた内容で実行するとA1とA2のチェックマークがどちらかに付くという
    ことになりました。そうではなくて、お互いに影響しあわないようにして且つ例えばA列とC列に
    アットランダムに配置しているいくつかの□に対して(セル結合あり)クリックするとレ点の付いた
    □になるというふうにするにはどうすればよろしいでしょうか?

    もう一つ補足でひとつのセルの中には□のみです。
    イメージはA列に□、B列に文字が表示されている感じです。
    ですので教えてもらった、昭和とか平成とかは外させてもらいました。

      補足日時:2017/10/08 05:16

A 回答 (8件)

No.5 の補足



複数セルを選択した状態で右クリックを行うと、一番左上のセルに合わせて全ての選択したセルが変化してしまいます。一番左上のセルのみ変化させるには以下のようにしてください。
-----------------------------------------------------------------------------
☆ シートモジュール
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Column
Case 1, 3
Application.EnableEvents = False
Cancel = True
Select Case Target(1).Text
Case ChrW(9744)
Target(1).Value = ChrW(9745)
Case ChrW(9745)
Target(1).Value = ChrW(9744)
End Select
Application.EnableEvents = True
End Select
End Sub
-----------------------------------------------------------------------------
☆ 標準モジュール(エラーなどで、イベントが発生しなくなった時の回復用)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub イベント回復()
Application.EnableEvents = True
End Sub
-----------------------------------------------------------------------------
    • good
    • 0

もしも、いまさら「☑」や「☐」を入力するのが面倒なら「置換で検索する文字列」に「□」、「置換後の文字列」に「☐」を入れて「すべて置換」を行えば一括で置換できます。


ちなみになぜ「□」を使わないかというと、それに対する「☑」が無いためです。微妙に大きさや形が違いますよね!
「エクセル VBA ワンクリックでチェック」の回答画像8
    • good
    • 0
この回答へのお礼

GooUserラック様
今までの数々の回答ありがとうございました。
おかげ様でできました。
「しかく」から変換した□を使用するのではなく、上記のU2610かU2611の文字を使用したら
できました。ありがとうございました。

お礼日時:2017/10/09 20:38

No.4 の訂正です。

右と左を間違えていました、大変申し訳ございません。

×「複数セルを選択状態でクリックしたときは、一番右上のセルのみ対応します。」
〇「複数セルを選択状態でクリックしたときは、一番左上のセルのみ対応します。」
    • good
    • 0

右クリックバージョンで、セル結合に対応し、A列とC列は右クリックメニューが出ないものです。


-----------------------------------------------------------------------------
☆ シートモジュール
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Column
Case 1, 3
Application.EnableEvents = False
Cancel = True
Select Case Target(1).Text
Case ChrW(9744)
Target.Value = ChrW(9745)
Case ChrW(9745)
Target.Value = ChrW(9744)
End Select
Application.EnableEvents = True
End Select
End Sub
-----------------------------------------------------------------------------
☆ 標準モジュール(エラーなどで、イベントが発生しなくなった時の回復用)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub イベント回復()
Application.EnableEvents = True
End Sub
-----------------------------------------------------------------------------
    • good
    • 0

左シングルクリックバージョンです。


ただし、左シングルクリックのイベントが無いので「SelectionChange」イベントを使用しますので制約がいくつかあります。
-------------------------------------------------------------------------------------
制約①
「入力後にセルを移動する」が有効になっていると、[Enter] のみでチェックマークのセルに移動して来ても反応してしまいます。(元のセルの内容が変更された場合は反応しないようにされています)
制約②
カーソルキーでチェックマークのセルに移動して来ても反応してしまいます。
制約③
クリックが早すぎると誤動作しますので、操作はゆっくりと行ってください。
制約④
複数セルを選択状態でクリックしたときは、一番右上のセルのみ対応します。
-----------------------------------------------------------------------------
☆ シートモジュール
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_Change(ByVal Target As Range)
無効 = True
End Sub
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If 無効 = False Then
Select Case Target.Column
Case 1, 3
Application.EnableEvents = False
Select Case Target(1).Text
Case ChrW(9744)
Target(1).Value = ChrW(9745)
Cells(Target(Target.Count).Row, Target(Target.Count).Column + 1).Select
Case ChrW(9745)
Target(1).Value = ChrW(9744)
Cells(Target(Target.Count).Row, Target(Target.Count).Column + 1).Select
End Select
Application.EnableEvents = True
End Select
End If
無効 = False
End Sub
-----------------------------------------------------------------------------
☆ 標準モジュール
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Public 無効 As Boolean
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub イベント回復()
Application.EnableEvents = True
End Sub
-----------------------------------------------------------------------------
※ もちろんチェックマークには「☑」か「☐」をコピーしてお使いください。
    • good
    • 0

「左ワンクリック」バージョンも考えていますが、少し捻らないといけないので今日一杯閉めないでください。

    • good
    • 0

チェックマークには「☑」か「☐」をコピーしてお使いください。


(IMEに単語登録しておいた方が良いと思います)
-----------------------------------------------------------------------------
☆ シートモジュール
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count <> 1 Then Exit Sub
Select Case Target.Column
Case 1, 3
Application.EnableEvents = False
Select Case Target.Text
Case ChrW(9744)
Target.Value = ChrW(9745)
Cancel = True
Case ChrW(9745)
Target.Value = ChrW(9744)
Cancel = True
End Select
Application.EnableEvents = True
End Select
End Sub
-----------------------------------------------------------------------------
☆ 標準モジュール(エラーなどで、イベントが発生しなくなった時の回復用)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub イベント回復()
Application.EnableEvents = True
End Sub
-----------------------------------------------------------------------------
なお「Cancel = True」は、右クリックメニューをどこで出してよいか判らないので、とりあえず、チェックマークが有る所だけ表示しないようにしています。適当に置き場所を変えてください。
    • good
    • 0

下図のようなものでしょうか?


-----------------------------------------------------------------------------------------
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Address(False, False)
Case "A1"
If Target.Value = ChrW(9744) & "昭和" Then
Range("A1").Value = ChrW(9745) & "昭和"
Range("A2").Value = ChrW(9744) & "平成"
Else
Range("A1").Value = ChrW(9744) & "昭和"
Range("A2").Value = ChrW(9745) & "平成"
End If
Cancel = True
Case "A2"
If Target.Value = ChrW(9744) & "平成" Then
Range("A1").Value = ChrW(9744) & "昭和"
Range("A2").Value = ChrW(9745) & "平成"
Else
Range("A1").Value = ChrW(9745) & "昭和"
Range("A2").Value = ChrW(9744) & "平成"
End If
Cancel = True
End Select
End Sub
-----------------------------------------------------------------------------------------
・セルは適当に直して下さい。
・フォントによっては文字化けします。
・何も入力しないで「A1」または「A2」セルを右クリックすると下図のようにセットされます。その後、右クリックごとに入れ替わります。
「エクセル VBA ワンクリックでチェック」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A