![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
少しお邪魔します。
ワークシートのチェックボックスがどういうスタイルになっているかにもよるかと思います。たぶん、#1さんの方法のほうが管理は楽だと思います。多少のセルが必要なのと、アンタッチャブルな領域が出てくるということだけだと思います。
ただ、私はマクロで少しシュミレートしてみました。ActiveXコントロールの場合は、たぶん、インスタンスが必要かなと思っているのですが、まだ手をつけていません。というか面倒なのです。結局、取り付け方から教えるということも、また面倒です。
フォームコントロールは、クリックした時にオブジェクトの固有の名前を保持しているのですが、ActiveXコントロールは、固有の名前を保持していないので、名前を付けてあげなくてはならない、というやや面倒な手間が必要なのです。
これらのマクロの利点はアンタッチャブルな領域が、ワークシート上では存在しない、設定は一瞬で済むということです。ただ、既存のものにつける以上、多少複雑なものなります。
一度、シュミレートしてみることをお薦めします。
理屈は、既存でついている名前を、シートごとに1から順に同じ名前に統一していくというものです。
'既存のチェックのボックス向けです。
Sub ChangeCheckBoxesName()
Dim sh As Worksheet
Dim i As Long, j As Long, t As Long, k As Long
Dim Chk As CheckBox
For Each sh In Worksheets 'ブック全体で探す
t = sh.Shapes.Count
If t > 0 Then
j = 1
For i = 1 To t
If TypeName(sh.Shapes(i).DrawingObject) = "CheckBox" Then
Set Chk = sh.Shapes(i).DrawingObject
Chk.Caption = "" 'キャプションの非表示
On Error Resume Next
Chk.Name = "chk_" & j
If Err.Number > 0 Then
Do
Chk.Name = CStr(k) '臨時の名前付け
DoEvents
k = k + 1
Loop Until Err.Number = 0
Chk.Name = "chk_" & j
End If
On Error GoTo 0
Chk.OnAction = "OnOff_ChkBox" 'マクロをつける
'' Chk.TopLeftCell.Offset(, 2).Value = Chk.Name '名前の確認
Set Chk = Nothing
j = j + 1
End If
Next
Else
MsgBox "このシートにはオブジェクトが見当たりません。", vbExclamation
End If
j = 0
k = 0
Application.ScreenUpdating = True 'シートを活性化する
Next sh
End Sub
'------------------------
'これが、実際のチェックボックスに使われるマクロ
Sub OnOff_ChkBox()
Dim n As String
Dim obj As Object
Dim indx As String
Dim bln As Long
Dim sh As Worksheet
n = Application.Caller
indx = ActiveSheet.Shapes(n).Name '名前取り
bln = ActiveSheet.Shapes(n).DrawingObject.Value '値取り
Call allCheckes(indx, bln) 'シート全体で同じものを探す
End Sub
Sub allCheckes(ByVal indx As String, bln As Long)
Dim sh As Worksheet
For Each sh In Worksheets
If ActiveSheet.Name <> sh.Name Then
On Error Resume Next
sh.Shapes(indx).DrawingObject = bln
On Error GoTo 0
End If
Next sh
End Sub
'========================
オマケの実験用マクロです。
'シュミレート用のサンプルチェッボックス 1行ずつ入ります。
Sub AddChkBoxes()
'テスト用のチェックボックス設置
Dim sh As Worksheet
Dim Chk As CheckBox
Dim i As Long
For Each sh In Worksheets
For i = 1 To 10
With sh.Cells(i, 2)
Set Chk = sh.CheckBoxes.Add(.Left + 3, .Top, .Width, .Height)
Chk.Caption = ""
Chk.Name = "chk_" & i 'チェックボックスの名前の偏向
Chk.OnAction = "OnOff_ChkBox" 'マクロを取り付ける
'Chk.LinkedCell = .Offset(, 2).Address 'リンクするセル
'.Offset(, 3).Value = Chk.Name '名前をセルに出す
End With
Application.ScreenUpdating = True 'シートを活性化する
Next i
Next sh
MsgBox "シート" & Worksheets.Count & "枚にすべてのチェックボックスを付けました。", vbInformation
On Error GoTo ErrHandler
Call OnOff_ChkBox
Exit Sub
ErrHandler:
If Err.Number = 1004 Then
MsgBox "OnOff_CheckBox のマクロが必要です。", vbExclamation
Else
MsgBox "設定は正常に終わっています。"
End If
End Sub
Sub ObjectDelte()
'チェックボックスの削除用
Dim sh As Worksheet
Dim obj As Object
For Each sh In Worksheets
On Error Resume Next
For Each obj In sh.Shapes
If TypeName(obj.DrawingObject) = "CheckBox" Then
''obj.TopLeftCell.Offset(, 3).ClearContents '名前を出している時
obj.Delete
End If
Next obj
Next sh
End Sub
記述していただいたマクロを実行したのですが、いまいち何をしているのか理解できませんでした。理解できるよう努力します。
さっそくの回答ありがとうございました。返事遅くなりすみません。
No.1
- 回答日時:
使っているチェックボックスは、[フォームコントロール]のものですか?
それとも、[ ActiveX コントロール]のものですか?
[フォームコントロール]だったら[プロパティ](コントロールの書式設定)を
選択し、[コントロール]タブにある[リンクするセル]で特定のセルを指定
すれば、[TRUE]または[FALSE]でチェックの有無を指定できます。
[ Sheet1 ]のチェックボックスへとチェックすると、リンクするセルの値が
[TRUE]または[FALSE]になりますので、関連したチェックがすべて連動
します。
http://www4.synapse.ne.jp/yone/excel2010/faq/inp …
[ ActiveX コントロール]の場合は、[プロパティ]で[ LinkedCell ]の項目に
セル番号を指定すれば、同じように連動します。
http://www4.synapse.ne.jp/yone/excel2010/excel20 …
リンクするセルに[TRUE]または[FALSE]が表示されるのが嫌なら、その
[セルの書式設定]で[ユーザー定義]としてセミコロン3つ「;;;」を入力し、
[OK]すれば非表示になります。
http://www.relief.jp/itnote/archives/003300.php
http://www4.synapse.ne.jp/yone/excel2010/excel20 …
リンクしたセルの列幅を狭くするなどしてを見えないようにしておけば、
気にならなくなると思います。
マクロを使わなくても連動しますので、試してみてください。
さっそくの回答ありがとうございました。
無事やりたい作業ができるようになりました。
回答はすぐ確認させていただき、問題は解決したのですが、お礼が遅くなり申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) 画像のようなチェックボックスとハイパーリンクがありますが、 ハイパーリンクを押すと、チェックボックス 1 2023/04/07 12:56
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) たくさんあるフォームコントロールを効率よく確認するには 1 2022/12/24 12:27
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) VBAを使いシート間で貼り付け 3 2023/03/14 20:53
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
エクセルで1月0日と表示される!!
-
別シートのセルを絶対参照にする
-
(Excel)あるセルに文字を入力...
-
日付が未入力の際はゼロか、空...
-
エクセルで特定の文字を打つと...
-
ExcelでTODAY関数を更新させな...
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
Rangeメソッドは失敗しました。...
-
セルの値と同じ名前のシートを...
-
VBAで、セル(Range)のオブジ...
-
Excelシートの保護時にデータの...
-
エクセルで20万行あるシート...
-
エクセルのマクロで全シートを...
-
エクセル ハイパーリンクで画像...
-
Excelのファイル容量が減らない...
-
エクセルの文字
-
EXCELマクロで、シート間でのコ...
-
エクセルで、文字列の入ったセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
(Excel)あるセルに文字を入力...
-
Excelで複数シートの選択セルを...
-
Rangeメソッドは失敗しました。...
-
シート参照で変数を使いたい(EX...
-
別シートのセルを絶対参照にする
-
エクセルで複写のように自動入...
-
Excelシートの保護時にデータの...
-
excelでハイパーリンクになって...
-
エクセルで別シートからの最大...
-
複数シートの同じセル内容を1シ...
-
エクセルで20万行あるシート...
-
ExcelでTODAY関数を更新させな...
-
EXCEL関数でシート名が変わる可...
-
エクセルで、加筆修正したセル...
-
Excelのファイル容量が減らない...
-
エクセル ハイパーリンクで画像...
おすすめ情報