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

A6:A15のチェックボックスにチェックを入れボタンをクリックすると指定位置の文字を消去することは可能でしょうか?
A13のチェックだったらC13:E13,P13:Q13 A15のチェックだったらC15:E15,P15:Q15
両方チェックだったらC13:E13,P13:Q13、C15:E15,P15:Q15を消去という具合に行いたいのですが
どのようにすればよいでしょうか?

ご指導のほどよろしくお願いします。

「マクロを使って指定箇所の文字の消去はでき」の質問画像

A 回答 (3件)

こんにちは



チェックボックスは、セルと独立した関係にあるので、どのチェックボックスがどの行にあるのか決められてはいません。
通常は、チェックボックスのチェック状態をセルと連動させておいて、それを参照して利用すると思います。
この方法であれば、ご質問の内容は関数でも実現できそうに思われます。

また、チェックボックスと一口に言っても、フォームコントロールのチェックボックスとActiveXのものと2種類あって、VBAでの扱いが微妙に変わります。
そのあたりの情報が何もないので、見た目の位置関係から調べるという少々回りくどい方法で処理してみました。
(普通は、上述のようにセルとの連動を利用すると思います)

Sub Sample()

Dim c As Range, cbx As Object
Dim rw As Long
Dim t As Single, h As Single, w As Single
Dim y As Single, v As Boolean, f As Boolean

For rw = 6 To 15
 Set c = Cells(rw, 1)
 t = c.Top
 h = t + c.Height
 w = c.Width
 f = False

 ' Form Control
 For Each cbx In ActiveSheet.CheckBoxes
  y = cbx.Top + cbx.Height / 2
  If t < y And y < h And cbx.Left < w Then
   f = True
   If cbx.Value = xlOn Then v = True Else v = False
   Exit For
  End If
 Next cbx

 ' ActiveX Control
 If Not f Then
  For Each cbx In ActiveSheet.OLEObjects
   If TypeName(cbx.Object) = "CheckBox" Then
    y = cbx.Top + cbx.Height / 2
    If t < y And y < h And cbx.Left < w Then
     f = True
     v = cbx.Object.Value
     Exit For
    End If
   End If
  Next cbx
 End If

 If f And v Then
  Cells(rw, 3).Resize(, 3).ClearContents
  Cells(rw, 16).Resize(, 2).ClearContents
 End If
Next rw

End Sub
    • good
    • 0

まず、チェックボックは、Placement プロパティでセルと関連づきます。


しかし、手動でつけたものは、位置が不揃いなので、機械的に修正する必要があります。
ただ、以下は、A列以外の場所にCheckBoxがあれば、このマクロは誤動作します。
その場合は、ご相談ください。
なお、ActiveX コントロールには対応しませんし、おすすめしません。ActiveXコントロールは使用制限があるし、それ自身がトラブルを起こすこともあるからです。

''//両方とも、標準モジュールです。
''一回きりの機能の取り付けマクロ

Sub AddFeatureToCheckBoxes()
'CheckBox の位置の修正と、マクロの取り付け
Dim Chk As CheckBox
Dim i As Long
i = 6 '6行目から
With ActiveSheet
For Each Chk In .CheckBoxes
  Chk.OnAction = "DelRowMacro" 
  Chk.Top = .Cells(i, 1).Top + 0.1
  Chk.TopLeftCell = .Cells(i, 1)
  Chk.Placement = xlMove 'セルと共に移動する
  i = i + 1
Next
End With
End Sub

'CheckBox に取り付けたマクロ(統一マクロ)単独では動きません。
Sub DelRowMacro()
 Dim ChkName As Variant
 Dim Cb As CheckBox
 Dim rw As Long
 With ActiveSheet
  ChkName = Application.Caller
  If VarType(ChkName) <> vbString Then Exit Sub 
  Set Cb = .CheckBoxes(ChkName)
  If Cb.Value = xlOn Then
   rw = Cb.TopLeftCell.Row
   .Cells(rw, 3).Resize(, 3).ClearContents 'Cから3列
   .Cells(rw, 16).Resize(, 2).ClearContents 'Pから2列
  End If
 End With
End Sub
    • good
    • 0

次のurlを参考にしてチェックボックスを作成してください。


http://www.becoolusers.com/excel/checkbox.html

まずA6にチェックボックスを作成します。
作成したチェックボックスを右クリックして、マクロの登録をクリックします。
新規作成ボタンを押すと、VisualBasicが起動します。
それを次のように編集してください。(Subの名前は、微妙に違うかもしれません。)

Sub チェック1_Click()
If ActiveSheet.CheckBoxes(Application.Caller) = xlOn Then
[C6:E6, P6:Q6].ClearContents
End If
End Sub

残りのセルも同様に作成してください。
    • good
    • 0

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