
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
この回答へのお礼
お礼日時:2016/04/23 05:48
記述していただいたマクロを実行したのですが、いまいち何をしているのか理解できませんでした。理解できるよう努力します。
さっそくの回答ありがとうございました。返事遅くなりすみません。
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 …
リンクしたセルの列幅を狭くするなどしてを見えないようにしておけば、
気にならなくなると思います。
マクロを使わなくても連動しますので、試してみてください。
この回答へのお礼
お礼日時:2016/04/23 05:51
さっそくの回答ありがとうございました。
無事やりたい作業ができるようになりました。
回答はすぐ確認させていただき、問題は解決したのですが、お礼が遅くなり申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付が未入力の際はゼロか、空...
-
Excelの「0」だけ非表示、小数...
-
VBA セル間のリンク修正につい...
-
エクセルでデータを蓄積させる...
-
エクセルで条件に一致したセル...
-
シートが異なるセル同士を、相...
-
エクセルで、勤務表から 日付...
-
エクセルについて
-
VBAを使い、同一フォルダにある...
-
エクセルのシート間で連続した...
-
エクセルで複写のように自動入...
-
エクセルで日誌作成&自動日付挿入
-
複数シートの同じセル内容を1シ...
-
(Excel)あるセルに文字を入力...
-
[EXCELマクロ] シートタブに自...
-
INDIRECT(空白や()がある文字列...
-
エクセルで別シートからの最大...
-
Excel VBAについて
-
エクセルで特定の文字を打つと...
-
エクセル2010テキストボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
VBA セル間のリンク修正につい...
-
エクセルで1月0日と表示される!!
-
日付が未入力の際はゼロか、空...
-
Office2021のエクセルで米国株...
-
Excelで複数シートの選択セルを...
-
Excelシートの保護時にデータの...
-
エクセルで条件に一致したセル...
-
エクセルで、加筆修正したセル...
-
Excelでスクロールすると文字が...
-
エクセルで複写のように自動入...
-
ExcelでTODAY関数を更新させな...
-
(Excel)あるセルに文字を入力...
-
複数シートの同じセル内容を1シ...
-
エクセルで指定のセルのみ完全...
-
エクセル ハイパーリンクで画像...
-
エクセルで複数のシートの同じ...
-
エクセルについて
-
EXCELのハイパーリンクのセルを...
-
エクセルで別シートからの最大...
おすすめ情報