Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12 / 12991 ツリー ←次へ | 前へ→

【79010】チェックボックスがONの場合に選択している行文字を太くする ペーターパン 17/4/14(金) 12:07 質問[未読]

【79043】Re:チェックボックスがONの場合に選択して... β 17/4/19(水) 17:07 発言[未読]
【79101】Re:チェックボックスがONの場合に選択して... ペーターパン 17/5/10(水) 10:36 質問[未読]
【79102】Re:チェックボックスがONの場合に選択して... β 17/5/10(水) 18:22 発言[未読]
【79104】Re:チェックボックスがONの場合に選択して... ペーターパン 17/5/11(木) 10:32 お礼[未読]

【79043】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/4/19(水) 17:07 -

引用なし
パスワード
   ▼ペーターパン さん:

もう、ご覧にならないかもしれませんが。

そういうことだったんですか。
要件をすっかり誤解していました。

であれば、以下の2つの方法が考えられます。

1.任意の行が選択されたときに、その時点のチェックボックスの選択の状態をみて
 チェックが入っていたら、選択された行を太字にする。

 チェックボックスにはマクロ登録をしません。していれば消してください。
 で、シートモジュールに。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Cells.Font.Bold = False
  If CheckBoxes("チェック 1").Value = xlOn Then  '★
    Selection.EntireRow.Font.Bold = True
  End If
End Sub

 ★のところ、実際のコントロール名に直してください。

2.チェックボックスにチェックが入った時点で、その時に選択されていた行を太字にする。
 (これは、やってみると、操作が面倒というか、スムーズじゃないなと思いましたが)

 シートモジュールは使いません。記述があれば消してください。
 標準モジュールに以下のマクロを書き、チェックボックスにマクロ登録します。

Sub Test()
  Cells.Font.Bold = False
  If ActiveSheet.CheckBoxes(Application.Caller).Value = xlOn Then Selection.EntireRow.Font.Bold = True
End Sub

【79101】Re:チェックボックスがONの場合に選択し...
質問  ペーターパン  - 17/5/10(水) 10:36 -

引用なし
パスワード
   ▼β さん:
お礼が遅くなり申し訳ありません。
ご尽力頂きありがとうございます。
あれからすぐマクロを組み使用しております。
今回、以下のような改善要望が出ました。

改善要望:エクセルの動作が少し重いので改善できないか。

確かに、毎回アクティブセルのボールドを解除するよう命令しているので、
一度下記のように書きました。
これですとアクティブセルの太字が残ってしまうので、コマンドボタンを押すとセルの太字が通常に戻るようにするなどの対策を取ろうと思っています。
もっとスマートな方法はあるのでしょうか?
ご教示頂ければ幸いです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If CheckBoxes("ChkBx1").Value = xlOn Then
    Cells.Font.Bold = False ←★ご教示頂いたマクロのこの部分を移動しました。
    Selection.EntireRow.Font.Bold = True
  End If
End Sub


>▼ペーターパン さん:
>
>もう、ご覧にならないかもしれませんが。
>
>そういうことだったんですか。
>要件をすっかり誤解していました。
>
>であれば、以下の2つの方法が考えられます。
>
>1.任意の行が選択されたときに、その時点のチェックボックスの選択の状態をみて
> チェックが入っていたら、選択された行を太字にする。
>
> チェックボックスにはマクロ登録をしません。していれば消してください。
> で、シートモジュールに。
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  Cells.Font.Bold = False
>  If CheckBoxes("チェック 1").Value = xlOn Then  '★
>    Selection.EntireRow.Font.Bold = True
>  End If
>End Sub
>
> ★のところ、実際のコントロール名に直してください。
>
>2.チェックボックスにチェックが入った時点で、その時に選択されていた行を太字にする。
> (これは、やってみると、操作が面倒というか、スムーズじゃないなと思いましたが)
>
> シートモジュールは使いません。記述があれば消してください。
> 標準モジュールに以下のマクロを書き、チェックボックスにマクロ登録します。
>
>Sub Test()
>  Cells.Font.Bold = False
>  If ActiveSheet.CheckBoxes(Application.Caller).Value = xlOn Then Selection.EntireRow.Font.Bold = True
>End Sub

【79102】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/5/10(水) 18:22 -

引用なし
パスワード
   ▼ペーターパン さん:

元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?


Option Explicit

Dim bLine As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not bLine Is Nothing Then
    bLine.Font.Bold = False
    Set bLine = Nothing
  End If
  If CheckBoxes("ChkBx1").Value = xlOn Then
    Selection.EntireRow.Font.Bold = True
    Set bLine = Selection.EntireRow
  End If
End Sub

【79104】Re:チェックボックスがONの場合に選択し...
お礼  ペーターパン  - 17/5/11(木) 10:32 -

引用なし
パスワード
   ▼β さん:
ありがとうございます。

モジュールレベルで変数を宣言する。
if not構文で宣言する。
どちらも今の私ではたどり着けない答えでした。

Worksheet_SelectionChangeの場合、イベント発生の度に変数がどうなっているかよく考えなくてはいけないのですね。
自分が試しに作ったものだと太字が延々と作られ続けた理由がよくわかりました。

壁にぶつかってまた1つ成長できました。
これからも精進します。

>▼ペーターパン さん:
>
>元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?
>
>
>Option Explicit
>
>Dim bLine As Range
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  If Not bLine Is Nothing Then
>    bLine.Font.Bold = False
>    Set bLine = Nothing
>  End If
>  If CheckBoxes("ChkBx1").Value = xlOn Then
>    Selection.EntireRow.Font.Bold = True
>    Set bLine = Selection.EntireRow
>  End If
>End Sub

12 / 12991 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free